|
|
@@ -0,0 +1,284 @@
|
|
|
+package com.java110.job.task.oa;
|
|
|
+
|
|
|
+import com.java110.core.factory.GenerateCodeFactory;
|
|
|
+import com.java110.dto.classes.ScheduleClassesStaffDto;
|
|
|
+import com.java110.dto.community.CommunityDto;
|
|
|
+import com.java110.dto.task.TaskDto;
|
|
|
+import com.java110.dto.workCycle.WorkCycleDto;
|
|
|
+import com.java110.dto.workPool.WorkPoolDto;
|
|
|
+import com.java110.dto.workPoolFile.WorkPoolFileDto;
|
|
|
+import com.java110.dto.workTask.WorkTaskDto;
|
|
|
+import com.java110.intf.oa.IWorkCycleV1InnerServiceSMO;
|
|
|
+import com.java110.intf.oa.IWorkPoolFileV1InnerServiceSMO;
|
|
|
+import com.java110.intf.oa.IWorkPoolV1InnerServiceSMO;
|
|
|
+import com.java110.intf.oa.IWorkTaskV1InnerServiceSMO;
|
|
|
+import com.java110.intf.store.IScheduleClassesStaffV1InnerServiceSMO;
|
|
|
+import com.java110.job.quartz.TaskSystemQuartz;
|
|
|
+import com.java110.po.workPoolFile.WorkPoolFilePo;
|
|
|
+import com.java110.po.workTask.WorkTaskPo;
|
|
|
+import com.java110.utils.exception.CmdException;
|
|
|
+import com.java110.utils.util.DateUtil;
|
|
|
+import com.java110.utils.util.ListUtil;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Component
|
|
|
+public class CycleWorkTaskGeneratorTemplate extends TaskSystemQuartz {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IWorkCycleV1InnerServiceSMO workCycleV1InnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IScheduleClassesStaffV1InnerServiceSMO scheduleClassesStaffV1InnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IWorkTaskV1InnerServiceSMO workTaskV1InnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IWorkPoolV1InnerServiceSMO workPoolV1InnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IWorkPoolFileV1InnerServiceSMO workPoolFileV1InnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void process(TaskDto taskDto) throws Exception {
|
|
|
+ logger.debug("开始执行周期性工作单任务生成" + taskDto.toString());
|
|
|
+
|
|
|
+ // 获取小区
|
|
|
+ List<CommunityDto> communityDtos = getAllCommunity();
|
|
|
+
|
|
|
+ for (CommunityDto communityDto : communityDtos) {
|
|
|
+ try {
|
|
|
+ generatorTask(taskDto, communityDto);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("推送消息失败", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void generatorTask(TaskDto taskDto, CommunityDto communityDto) {
|
|
|
+
|
|
|
+ WorkCycleDto workCycleDto = new WorkCycleDto();
|
|
|
+ workCycleDto.setCommunityId(communityDto.getCommunityId());
|
|
|
+ workCycleDto.setWorkCycle(WorkPoolDto.WORK_CYCLE_CYCLE);
|
|
|
+ workCycleDto.setCurTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
|
|
|
+ List<WorkCycleDto> workCycleDtos = workCycleV1InnerServiceSMOImpl.queryWorkCycles(workCycleDto);
|
|
|
+
|
|
|
+ if(workCycleDtos == null){
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+
|
|
|
+ for(WorkCycleDto tmpWorkCycleDto : workCycleDtos){
|
|
|
+
|
|
|
+ try{
|
|
|
+ doGeneratorTask(tmpWorkCycleDto,taskDto,communityDto);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void doGeneratorTask(WorkCycleDto tmpWorkCycleDto,TaskDto taskDto, CommunityDto communityDto) {
|
|
|
+
|
|
|
+ WorkPoolDto workPoolDto = new WorkPoolDto();
|
|
|
+ workPoolDto.setWorkId(tmpWorkCycleDto.getWorkId());
|
|
|
+ List<WorkPoolDto>workPoolDtos = workPoolV1InnerServiceSMOImpl.queryWorkPools(workPoolDto);
|
|
|
+
|
|
|
+ if(ListUtil.isNull(workPoolDtos)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Date startTime = DateUtil.getDateFromStringA(workPoolDtos.get(0).getStartTime());
|
|
|
+ Calendar startTimeCal = Calendar.getInstance();
|
|
|
+ startTimeCal.setTime(startTime);
|
|
|
+
|
|
|
+ Calendar nowCal = Calendar.getInstance();
|
|
|
+ nowCal.set(Calendar.HOUR,startTimeCal.get(Calendar.HOUR));
|
|
|
+ nowCal.set(Calendar.MINUTE,startTimeCal.get(Calendar.MINUTE));
|
|
|
+ nowCal.set(Calendar.SECOND,startTimeCal.get(Calendar.SECOND));
|
|
|
+
|
|
|
+ Date nowTime = nowCal.getTime();
|
|
|
+
|
|
|
+ boolean hasCondition = false;
|
|
|
+ switch (tmpWorkCycleDto.getPeriod()) {
|
|
|
+ case WorkCycleDto.PERIOD_MONTH_DAY:
|
|
|
+ hasCondition = hasGeneratorTaskConditionByDay(tmpWorkCycleDto, taskDto, communityDto,nowTime);
|
|
|
+ break;
|
|
|
+ case WorkCycleDto.PERIOD_MONTH_WORKDAY:
|
|
|
+ hasCondition = hasGeneratorTaskConditionByWeek(tmpWorkCycleDto, taskDto, communityDto,nowTime);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (!hasCondition) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ WorkTaskPo workTaskPo = new WorkTaskPo();
|
|
|
+ workTaskPo.setWorkId(tmpWorkCycleDto.getWorkId());
|
|
|
+ workTaskPo.setState(WorkTaskDto.STATE_WAIT);
|
|
|
+ workTaskPo.setTaskId(GenerateCodeFactory.getGeneratorId("11"));
|
|
|
+ workTaskPo.setStoreId(tmpWorkCycleDto.getStoreId());
|
|
|
+ workTaskPo.setCommunityId(tmpWorkCycleDto.getCommunityId());
|
|
|
+ workTaskPo.setStartTime(DateUtil.getFormatTimeStringA(nowTime));
|
|
|
+ workTaskPo.setEndTime(DateUtil.getAddHoursStringA(nowTime,Integer.parseInt(tmpWorkCycleDto.getHours())));
|
|
|
+ workTaskPo.setStaffId(tmpWorkCycleDto.getStaffId());
|
|
|
+ workTaskPo.setStaffName(tmpWorkCycleDto.getStaffName());
|
|
|
+ workTaskPo.setOrgStaffId(tmpWorkCycleDto.getStaffId());
|
|
|
+ workTaskPo.setOrgStaffName(tmpWorkCycleDto.getStaffName());
|
|
|
+
|
|
|
+ int flag = workTaskV1InnerServiceSMOImpl.saveWorkTask(workTaskPo);
|
|
|
+
|
|
|
+ if (flag < 1) {
|
|
|
+ throw new CmdException("保存数据失败");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ WorkPoolFileDto workPoolFileDto = new WorkPoolFileDto();
|
|
|
+ workPoolFileDto.setWorkId(tmpWorkCycleDto.getWorkId());
|
|
|
+ workPoolFileDto.setFileType(WorkPoolFileDto.FILE_TYPE_START);
|
|
|
+ List<WorkPoolFileDto> workPoolFileDtos = workPoolFileV1InnerServiceSMOImpl.queryWorkPoolFiles(workPoolFileDto);
|
|
|
+
|
|
|
+ if(ListUtil.isNull(workPoolFileDtos)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ WorkPoolFilePo workPoolFilePo = null;
|
|
|
+ for(WorkPoolFileDto tmpWorkPoolFileDto : workPoolFileDtos){
|
|
|
+ workPoolFilePo = new WorkPoolFilePo();
|
|
|
+ workPoolFilePo.setCommunityId(workTaskPo.getCommunityId());
|
|
|
+ workPoolFilePo.setFileType(WorkPoolFileDto.FILE_TYPE_START);
|
|
|
+ workPoolFilePo.setFileId(GenerateCodeFactory.getGeneratorId("11"));
|
|
|
+ workPoolFilePo.setWorkId(workTaskPo.getWorkId());
|
|
|
+ workPoolFilePo.setTaskId(workTaskPo.getTaskId());
|
|
|
+ workPoolFilePo.setPathUrl(tmpWorkPoolFileDto.getPathUrl());
|
|
|
+ workPoolFilePo.setStoreId(workTaskPo.getStoreId());
|
|
|
+ workPoolFileV1InnerServiceSMOImpl.saveWorkPoolFile(workPoolFilePo);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean hasGeneratorTaskConditionByWeek(WorkCycleDto tmpWorkCycleDto, TaskDto taskDto, CommunityDto communityDto,Date nowTime) {
|
|
|
+
|
|
|
+ // 检查 今日是否 需要 生成巡检任务
|
|
|
+ // 检查 今日是否 需要 生成巡检任务
|
|
|
+ String[] workday = tmpWorkCycleDto.getPeriodWorkday().split(",");
|
|
|
+
|
|
|
+ Calendar today = Calendar.getInstance();
|
|
|
+ int day = today.get(Calendar.DAY_OF_WEEK);
|
|
|
+
|
|
|
+ //一周第一天是否为星期天
|
|
|
+ boolean isFirstSunday = (today.getFirstDayOfWeek() == Calendar.SUNDAY);
|
|
|
+ //获取周几
|
|
|
+ //若一周第一天为星期天,则-1
|
|
|
+ if (isFirstSunday) {
|
|
|
+ day = day - 1;
|
|
|
+ if (day == 0) {
|
|
|
+ day = 7;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!Arrays.asList(workday).contains(day+"")){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //当前时间是否 到了 巡检任务前30分钟
|
|
|
+ int beforeTime = Integer.parseInt(tmpWorkCycleDto.getBeforeTime());
|
|
|
+
|
|
|
+ String planTime = DateUtil.getFormatTimeStringA(nowTime);
|
|
|
+
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(DateUtil.getDateFromStringA(planTime));
|
|
|
+ calendar.add(Calendar.MINUTE,beforeTime*(-1));
|
|
|
+ if(DateUtil.getCurrentDate().before(calendar.getTime())){ // 还没到生成任务时间
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ ScheduleClassesStaffDto scheduleClassesStaffDto = new ScheduleClassesStaffDto();
|
|
|
+ scheduleClassesStaffDto.setStaffId(tmpWorkCycleDto.getStaffId());
|
|
|
+ scheduleClassesStaffDto.setToday(DateUtil.getDateFromStringA(planTime));
|
|
|
+ scheduleClassesStaffDto = scheduleClassesStaffV1InnerServiceSMOImpl.staffIsWork(scheduleClassesStaffDto);
|
|
|
+
|
|
|
+ if(!scheduleClassesStaffDto.isWork()){//根据排班员工 休息
|
|
|
+ return false;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ WorkTaskDto workTaskDto = new WorkTaskDto();
|
|
|
+ workTaskDto.setCommunityId(tmpWorkCycleDto.getCommunityId());
|
|
|
+ workTaskDto.setWorkId(tmpWorkCycleDto.getWorkId());
|
|
|
+ workTaskDto.setTaskInsTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B));
|
|
|
+ workTaskDto.setOrgStaffId(tmpWorkCycleDto.getStaffId());
|
|
|
+
|
|
|
+ //目前逻辑修改 一个巡检 计划 对于一个员工只能生成一次巡检任务,所以 传 员工 巡检计划ID 时间即可
|
|
|
+ List<WorkTaskDto> workTasksDtos = workTaskV1InnerServiceSMOImpl.queryWorkTasks(workTaskDto);
|
|
|
+ if (workTasksDtos != null && !workTasksDtos.isEmpty()) { // 已经生成过
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean hasGeneratorTaskConditionByDay(WorkCycleDto tmpWorkCycleDto, TaskDto taskDto, CommunityDto communityDto,Date nowTime) {
|
|
|
+
|
|
|
+ // 检查 今日是否 需要 生成巡检任务
|
|
|
+ String[] months = tmpWorkCycleDto.getPeriodMonth().split(",");
|
|
|
+
|
|
|
+ Calendar today = Calendar.getInstance();
|
|
|
+ int month = today.get(Calendar.MONTH) + 1;
|
|
|
+ if (!Arrays.asList(months).contains(month + "")) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ String[] days = tmpWorkCycleDto.getPeriodDay().split(",");
|
|
|
+ int day = today.get(Calendar.DAY_OF_MONTH);
|
|
|
+ if (!Arrays.asList(days).contains(day + "")) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //当前时间是否 到了 巡检任务前30分钟
|
|
|
+
|
|
|
+ int beforeTime = Integer.parseInt(tmpWorkCycleDto.getBeforeTime());
|
|
|
+
|
|
|
+ String planTime = DateUtil.getFormatTimeStringA(nowTime);
|
|
|
+
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(DateUtil.getDateFromStringA(planTime));
|
|
|
+ calendar.add(Calendar.MINUTE, beforeTime * (-1));
|
|
|
+ if (DateUtil.getCurrentDate().before(calendar.getTime())) { // 还没到生成任务时间
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 判断 员工是否上班
|
|
|
+
|
|
|
+ ScheduleClassesStaffDto scheduleClassesStaffDto = new ScheduleClassesStaffDto();
|
|
|
+ scheduleClassesStaffDto.setStaffId(tmpWorkCycleDto.getStaffId());
|
|
|
+ scheduleClassesStaffDto.setToday(DateUtil.getDateFromStringA(planTime));
|
|
|
+ scheduleClassesStaffDto = scheduleClassesStaffV1InnerServiceSMOImpl.staffIsWork(scheduleClassesStaffDto);
|
|
|
+
|
|
|
+ if (!scheduleClassesStaffDto.isWork()) {//根据排班员工 休息
|
|
|
+ return false;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ WorkTaskDto workTaskDto = new WorkTaskDto();
|
|
|
+ workTaskDto.setCommunityId(tmpWorkCycleDto.getCommunityId());
|
|
|
+ workTaskDto.setWorkId(tmpWorkCycleDto.getWorkId());
|
|
|
+ workTaskDto.setTaskInsTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B));
|
|
|
+ workTaskDto.setOrgStaffId(tmpWorkCycleDto.getStaffId());
|
|
|
+
|
|
|
+ //目前逻辑修改 一个巡检 计划 对于一个员工只能生成一次巡检任务,所以 传 员工 巡检计划ID 时间即可
|
|
|
+ List<WorkTaskDto> workTasksDtos = workTaskV1InnerServiceSMOImpl.queryWorkTasks(workTaskDto);
|
|
|
+ if (workTasksDtos != null && !workTasksDtos.isEmpty()) { // 已经生成过
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+}
|