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;
|
}
|
}
|