package cn.com.goldenwater.dcproj.task; import cn.com.goldenwater.dcproj.dao.TaskDthDayCountDao; import cn.com.goldenwater.dcproj.dto.BisInspTaskTotal; import cn.com.goldenwater.dcproj.model.AttAdBase; import cn.com.goldenwater.dcproj.model.BisInspTaskDthDay; import cn.com.goldenwater.dcproj.model.BisInspTaskOrgPtype; import cn.com.goldenwater.dcproj.param.AttAdBaseParam; import cn.com.goldenwater.dcproj.param.BisInspTaskOrgPtypeParam; import cn.com.goldenwater.dcproj.service.AttAdBaseService; import cn.com.goldenwater.dcproj.service.BisInspTaskDthDayService; import cn.com.goldenwater.dcproj.service.BisInspTaskOrgPtypeService; import cn.com.goldenwater.dcproj.utils.AdLevelUtil; import cn.com.goldenwater.dcproj.utils.DateUtils; import com.alibaba.fastjson.JSON; import org.apache.commons.lang3.StringUtils; import org.quartz.DisallowConcurrentExecution; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * @author lhc * @date 2020/10/12 11:00 */ @DisallowConcurrentExecution public class DayTypeRegService implements Job { private Logger log = LoggerFactory.getLogger(getClass()); /** * 要执行的 BisInspTaskOrgPtype */ private final static String IS_STAT = "1"; @Autowired private BisInspTaskOrgPtypeService bisInspTaskOrgPtypeService; @Autowired private BisInspTaskDthDayService bisInspTaskDthDayService; @Autowired private AttAdBaseService attAdBaseService; @Autowired private TaskDthDayCountDao taskDthDayCountDao; @Override public void execute(JobExecutionContext arg0) { log.info("执行定时任务日行政区督查任务整编:DayTypeRegService.execute()..."); JobDataMap dataMap = arg0.getJobDetail().getJobDataMap(); String param = dataMap.getString("param"); log.info("param:{}", param); // 设置整编时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date stTm = null; Date enTm = null; if (StringUtils.isNotBlank(param)) { Map dateMap = JSON.parseObject(param, Map.class); try { if (StringUtils.isNotBlank(dateMap.get("sttm"))) { stTm = sdf.parse(dateMap.get("sttm")); } if (StringUtils.isNotBlank(dateMap.get("entm"))) { enTm = sdf.parse(dateMap.get("entm")); } } catch (ParseException e) { e.printStackTrace(); } } // 提取需要处理的行政区类型及代码循环处理统计数据 BisInspTaskOrgPtypeParam bisInspTaskOrgPtypeParam = new BisInspTaskOrgPtypeParam(); bisInspTaskOrgPtypeParam.setIsStat(IS_STAT); List bisInspTaskOrgPtypes = bisInspTaskOrgPtypeService.findList(bisInspTaskOrgPtypeParam); if (bisInspTaskOrgPtypes != null && bisInspTaskOrgPtypes.size() > 0) { for (BisInspTaskOrgPtype bisInspTaskOrgPtype : bisInspTaskOrgPtypes) { regCounty(bisInspTaskOrgPtype, stTm, enTm); } } } /** * 根据配置整编某个省下的数据 * * @param bisInspTaskOrgPtype * @param stTm 开始时间 * @param enTm 结束时间 */ public void regCounty(BisInspTaskOrgPtype bisInspTaskOrgPtype, Date stTm, Date enTm) { if (null == stTm || null == enTm) { stTm = getYesterday(); enTm = getToday(); } AttAdBaseParam attAdBaseParam = new AttAdBaseParam(); attAdBaseParam.setAdCode(AdLevelUtil.getAddvcd(bisInspTaskOrgPtype.getAdCode())); // attAdBaseParam.setAdGrad("4"); List attAdBases = attAdBaseService.findList(attAdBaseParam); String pType = String.valueOf(Integer.parseInt(bisInspTaskOrgPtype.getObjType())); while (stTm.getTime() < enTm.getTime()) { Date tempTm = getAddDay(stTm, 1); //提取行政区代码下所有市或县,循环提取县下的督查对象添加情况和问题录入情况; for (AttAdBase attAdBase : attAdBases) { BisInspTaskDthDay bisInspTaskDthDay = new BisInspTaskDthDay(); bisInspTaskDthDay.setOrgId(bisInspTaskOrgPtype.getOrgId()); bisInspTaskDthDay.setObjType(bisInspTaskOrgPtype.getObjType()); bisInspTaskDthDay.setObjName(bisInspTaskOrgPtype.getObjName()); bisInspTaskDthDay.setTm(stTm); bisInspTaskDthDay.setAdCode(attAdBase.getAdCode()); bisInspTaskDthDay.setAdName(attAdBase.getAdName()); bisInspTaskDthDay.setAdFullName(attAdBase.getAdFullName()); bisInspTaskDthDay.setAdGrad(attAdBase.getAdGrad()); // 获取对象数 taskDthDayCountDao BisInspTaskTotal bisInspTaskTotal = taskDthDayCountDao.getListByTm(attAdBase.getAdCode().substring(0, 6), pType, DateUtils.Date2Str(stTm, "yyyy-MM-dd"), DateUtils.Date2Str(tempTm, "yyyy-MM-dd")); bisInspTaskDthDay.setObjSize(bisInspTaskTotal == null ? 0 : bisInspTaskTotal.getObjSize()); if (bisInspTaskTotal != null && bisInspTaskTotal.getObjSize() != 0){ log.info("时间:{}", DateUtils.Date2Str(stTm, "yyyy-MM-dd")); log.info(bisInspTaskTotal.toString()); log.info(String.valueOf(bisInspTaskDthDay.getObjSize())); } // 获取问题数据 BisInspTaskTotal bisInspTaskTotalPblm = taskDthDayCountDao.getPblmListByTm(attAdBase.getAdCode().substring(0, 6), pType, DateUtils.Date2Str(stTm, "yyyy-MM-dd"), DateUtils.Date2Str(tempTm, "yyyy-MM-dd")); bisInspTaskDthDay.setPblmSize(bisInspTaskTotalPblm == null ? 0 : bisInspTaskTotalPblm.getPblmSize()); bisInspTaskDthDay.setInfoPlbm(bisInspTaskTotalPblm == null ? 0 : bisInspTaskTotalPblm.getInfoPlbm()); bisInspTaskDthDay.setWarmPlbm(bisInspTaskTotalPblm == null ? 0 : bisInspTaskTotalPblm.getWarmPlbm()); bisInspTaskDthDay.setErrorPlbm(bisInspTaskTotalPblm == null ? 0 : bisInspTaskTotalPblm.getErrorPlbm()); if (bisInspTaskTotalPblm != null && bisInspTaskTotalPblm.getPblmSize() != 0){ log.info("时间:{}", DateUtils.Date2Str(stTm, "yyyy-MM-dd")); log.info(bisInspTaskTotalPblm.toString()); log.info("问题个数:{}", String.valueOf(bisInspTaskDthDay.getPblmSize())); } // BisInspTaskTotal bisInspTaskTotalDelPblm = taskDthDayCountDao.getDelPblmListByTm(attAdBase.getAdCode().substring(0, 6), String.valueOf(Integer.parseInt(bisInspTaskOrgPtype.getObjType())), // DateUtils.Date2Str(stTm, "yyyy-MM-dd"), DateUtils.Date2Str(tempTm, "yyyy-MM-dd")); // bisInspTaskDthDay.setPblmLogSize(bisInspTaskTotalDelPblm == null ? 0 : bisInspTaskTotalDelPblm.getPblmLogSize()); // TODO 整改数 bisInspTaskDthDay.setMendSize(0); // TODO 销号数 bisInspTaskDthDay.setPblmLogSize(0); bisInspTaskDthDayService.insert(bisInspTaskDthDay); } stTm = tempTm; } } public Date getAddDay(Date stTm, int size) { Calendar c = Calendar.getInstance(); c.setTime(stTm); c.add(Calendar.DAY_OF_MONTH, size); return c.getTime(); } public Date getYesterday() { // 日历对象 Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH, -1); // 时 calendar.set(Calendar.HOUR_OF_DAY, 0); // 分 calendar.set(Calendar.MINUTE, 0); // 秒 calendar.set(Calendar.SECOND, 0); // 毫秒 calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime(); } public static Date getToday() { //日历对象 Calendar calendar = Calendar.getInstance(); // 时 calendar.set(Calendar.HOUR_OF_DAY, 0); // 分 calendar.set(Calendar.MINUTE, 0); // 秒 calendar.set(Calendar.SECOND, 0); // 毫秒 calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime(); } }