|
|
|
|
@ -6,12 +6,22 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
|
import com.google.common.collect.Lists; |
|
|
|
|
import com.xxl.job.core.log.XxlJobLogger; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
|
import org.springblade.core.tool.utils.CollectionUtil; |
|
|
|
|
import org.springblade.core.tool.utils.Func; |
|
|
|
|
import org.springblade.core.tool.utils.ObjectUtil; |
|
|
|
|
import org.springblade.hzinfo_inspect.obj.entity.*; |
|
|
|
|
import org.springblade.hzinfo_inspect.obj.services.*; |
|
|
|
|
import org.springblade.hzinfo_inspect.plan.PlanContants.PlanCycleEnum; |
|
|
|
|
import org.springblade.hzinfo_inspect.plan.PlanContants.PlanTypeEnum; |
|
|
|
|
import org.springblade.hzinfo_inspect.plan.entity.*; |
|
|
|
|
import org.springblade.hzinfo_inspect.plan.service.*; |
|
|
|
|
import org.springblade.hzinfo_inspect.plan.service.IPlanObjectTemplateService; |
|
|
|
|
import org.springblade.hzinfo_inspect.plan.service.IPlanOrgService; |
|
|
|
|
import org.springblade.hzinfo_inspect.plan.service.IPlanPositionService; |
|
|
|
|
import org.springblade.hzinfo_inspect.plan.service.IPlanUserService; |
|
|
|
|
import org.springblade.hzinfo_inspect.task.TaskContants; |
|
|
|
|
import org.springblade.hzinfo_inspect.task.TaskContants.ClaimStatusEnum; |
|
|
|
|
import org.springblade.hzinfo_inspect.task.entity.*; |
|
|
|
|
@ -19,13 +29,6 @@ import org.springblade.hzinfo_inspect.task.service.ITaskObjectProjectContentServ
|
|
|
|
|
import org.springblade.hzinfo_inspect.task.service.ITaskObjectProjectService; |
|
|
|
|
import org.springblade.hzinfo_inspect.task.service.ITaskObjectService; |
|
|
|
|
import org.springblade.hzinfo_inspect.task.service.ITaskService; |
|
|
|
|
import com.xxl.job.core.log.XxlJobLogger; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
|
import org.springblade.core.tool.utils.CollectionUtil; |
|
|
|
|
import org.springblade.core.tool.utils.Func; |
|
|
|
|
import org.springblade.core.tool.utils.ObjectUtil; |
|
|
|
|
import org.springblade.system.user.entity.User; |
|
|
|
|
import org.springblade.system.user.feign.IUserClient; |
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
@ -42,6 +45,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 任务派发处理逻辑 |
|
|
|
|
* |
|
|
|
|
* @author ninglong |
|
|
|
|
* @create 2020-08-26 17:06 |
|
|
|
|
*/ |
|
|
|
|
@ -85,14 +89,15 @@ public class TaskJobService {
|
|
|
|
|
// @Autowired
|
|
|
|
|
// private IDutyMainClient dutyMainClient;
|
|
|
|
|
|
|
|
|
|
private final String dateSplit = "_"; |
|
|
|
|
private final String dateSplit = "_"; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 根据计划用户获取接任务的人 |
|
|
|
|
* |
|
|
|
|
* @param planUserId |
|
|
|
|
* @param taskId |
|
|
|
|
*/ |
|
|
|
|
public TaskUserEntity getTaskUser(Long planUserId, Long taskId,Long deptId) { |
|
|
|
|
public TaskUserEntity getTaskUser(Long planUserId, Long taskId, Long deptId) { |
|
|
|
|
// public TaskUserEntity getTaskUser(Long planUserId, Long taskId,String tenantId) {
|
|
|
|
|
TaskUserEntity taskUserEntity = TaskUserEntity.builder().taskId(taskId).userId(planUserId) |
|
|
|
|
.claimStatus(ClaimStatusEnum.UN_COLLECT.getStatus()).build(); |
|
|
|
|
@ -103,6 +108,7 @@ public class TaskJobService {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 从巡检计划和任务获取信息插入巡检任务对象表以及对应的历史数据表 |
|
|
|
|
* |
|
|
|
|
* @param plan 巡检计划实例 |
|
|
|
|
* @param task 巡检任务实例 |
|
|
|
|
* @return |
|
|
|
|
@ -110,47 +116,47 @@ public class TaskJobService {
|
|
|
|
|
public String distributeTaskObjs(PlanEntity plan, TaskEntity task) { |
|
|
|
|
String result = StringUtils.EMPTY; |
|
|
|
|
List<TaskObjectEntity> taskObjectList = Lists.newArrayList(); |
|
|
|
|
if(PlanTypeEnum.FREE_TYPE.getType().equals(plan.getType())){//自由模式,通过计划找到用户,通过用户找到对象,通过对象找到模板
|
|
|
|
|
List<PlanUserEntity> planUserList = planUserService.list(Wrappers.<PlanUserEntity>query().lambda().eq(PlanUserEntity::getPlanId,plan.getId())); |
|
|
|
|
for (PlanUserEntity entity:planUserList){ |
|
|
|
|
List<ObjectUserEntity> objectUserList = objectUserService.list(Wrappers.<ObjectUserEntity>query().lambda().eq(ObjectUserEntity::getUserId,entity.getUserId())); |
|
|
|
|
for (ObjectUserEntity ou:objectUserList){ |
|
|
|
|
//如果是抢占模式
|
|
|
|
|
List<TaskObjectEntity> existEntity = taskObjectList.stream().filter(taskObjectEntity -> ou.getObjectId().equals(taskObjectEntity.getObjectId())).collect(Collectors.toList()); |
|
|
|
|
if(ObjectUtil.isNotEmpty(existEntity)){ |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
result = distributeTaskObjs(taskObjectList,task,ou.getObjectId(),ou.getTemplateId()); |
|
|
|
|
if(!result.equals(StringUtils.EMPTY)){ |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
if (PlanTypeEnum.FREE_TYPE.getType().equals(plan.getType())) {//自由模式,通过计划找到用户,通过用户找到对象,通过对象找到模板
|
|
|
|
|
List<PlanUserEntity> planUserList = planUserService.list(Wrappers.<PlanUserEntity>query().lambda().eq(PlanUserEntity::getPlanId, plan.getId())); |
|
|
|
|
for (PlanUserEntity entity : planUserList) { |
|
|
|
|
List<ObjectUserEntity> objectUserList = objectUserService.list(Wrappers.<ObjectUserEntity>query().lambda().eq(ObjectUserEntity::getUserId, entity.getUserId())); |
|
|
|
|
for (ObjectUserEntity ou : objectUserList) { |
|
|
|
|
//如果是抢占模式
|
|
|
|
|
List<TaskObjectEntity> existEntity = taskObjectList.stream().filter(taskObjectEntity -> ou.getObjectId().equals(taskObjectEntity.getObjectId())).collect(Collectors.toList()); |
|
|
|
|
if (ObjectUtil.isNotEmpty(existEntity)) { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
result = distributeTaskObjs(taskObjectList, task, ou.getObjectId(), ou.getTemplateId()); |
|
|
|
|
if (!result.equals(StringUtils.EMPTY)) { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}else{ |
|
|
|
|
List<PlanObjectTemplateEntity> templates = planObjectTemplateService.list(Wrappers.<PlanObjectTemplateEntity>query().lambda().eq(PlanObjectTemplateEntity::getPlanId,plan.getId())); |
|
|
|
|
} else { |
|
|
|
|
List<PlanObjectTemplateEntity> templates = planObjectTemplateService.list(Wrappers.<PlanObjectTemplateEntity>query().lambda().eq(PlanObjectTemplateEntity::getPlanId, plan.getId())); |
|
|
|
|
for (PlanObjectTemplateEntity template : templates) { |
|
|
|
|
result = distributeTaskObjs(taskObjectList,task,template.getObjectId(),template.getTemplateId()); |
|
|
|
|
if(!result.equals(StringUtils.EMPTY)){ |
|
|
|
|
result = distributeTaskObjs(taskObjectList, task, template.getObjectId(), template.getTemplateId()); |
|
|
|
|
if (!result.equals(StringUtils.EMPTY)) { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(taskObjectList.size()>0 && result.equals(StringUtils.EMPTY)){ |
|
|
|
|
if (taskObjectList.size() > 0 && result.equals(StringUtils.EMPTY)) { |
|
|
|
|
taskObjectService.saveBatch(taskObjectList); |
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String distributeTaskObjs(List<TaskObjectEntity> taskObjectList,TaskEntity task,Long objectId,Long templateId){ |
|
|
|
|
private String distributeTaskObjs(List<TaskObjectEntity> taskObjectList, TaskEntity task, Long objectId, Long templateId) { |
|
|
|
|
String result = StringUtils.EMPTY; |
|
|
|
|
ObjectEntity io = objectService.getById(objectId); |
|
|
|
|
if(io == null) { |
|
|
|
|
return "巡检对象id="+objectId+"找不到记录"; |
|
|
|
|
} |
|
|
|
|
TemplateEntity templateInfo = templateService.getById(templateId); |
|
|
|
|
if(templateInfo == null) { |
|
|
|
|
return "巡检模板id="+templateId+"找不到记录"; |
|
|
|
|
} |
|
|
|
|
if (io == null) { |
|
|
|
|
return "巡检对象id=" + objectId + "找不到记录"; |
|
|
|
|
} |
|
|
|
|
TemplateEntity templateInfo = templateService.getById(templateId); |
|
|
|
|
if (templateInfo == null) { |
|
|
|
|
return "巡检模板id=" + templateId + "找不到记录"; |
|
|
|
|
} |
|
|
|
|
TaskObjectEntity ito = new TaskObjectEntity(); |
|
|
|
|
ito.setTaskId(task.getId()); |
|
|
|
|
ito.setObjectId(objectId); |
|
|
|
|
@ -166,25 +172,27 @@ public class TaskJobService {
|
|
|
|
|
// ito.setTenantId(task.getTenantId());
|
|
|
|
|
ito.setStatus(TaskContants.StatusEnum.INIT_STATUS.getStatus()); |
|
|
|
|
taskObjectList.add(ito); |
|
|
|
|
List<TemplateProjectEntity> projects = templateProjectService.list(Wrappers.<TemplateProjectEntity>query().lambda().eq(TemplateProjectEntity::getTemplateId,templateId)); |
|
|
|
|
List<TemplateProjectEntity> projects = templateProjectService.list(Wrappers.<TemplateProjectEntity>query().lambda().eq(TemplateProjectEntity::getTemplateId, templateId)); |
|
|
|
|
for (TemplateProjectEntity project : projects) { |
|
|
|
|
result = distributeTaskProjects(task, objectId, project); |
|
|
|
|
if(!result.equals(StringUtils.EMPTY)){ |
|
|
|
|
if (!result.equals(StringUtils.EMPTY)) { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 从巡检任务、巡检计划对象模板、巡检模板项目获取信息插入巡检任务项目表以及对应的历史数据表 |
|
|
|
|
* |
|
|
|
|
* @param objectId 巡检计划对象模板实例 |
|
|
|
|
* @param project 巡检模板项目实例 |
|
|
|
|
* @param project 巡检模板项目实例 |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private String distributeTaskProjects(TaskEntity task, Long objectId, TemplateProjectEntity project) { |
|
|
|
|
String result = StringUtils.EMPTY; |
|
|
|
|
ProjectEntity ip = projectService.getById(project.getProjectId()); |
|
|
|
|
if(ip == null) return "巡检项目id="+project.getProjectId()+"找不到记录"; |
|
|
|
|
if (ip == null) return "巡检项目id=" + project.getProjectId() + "找不到记录"; |
|
|
|
|
TaskObjectProjectEntity itop = new TaskObjectProjectEntity(); |
|
|
|
|
itop.setObjectId(objectId); |
|
|
|
|
itop.setProjectId(ip.getId()); |
|
|
|
|
@ -194,14 +202,14 @@ public class TaskJobService {
|
|
|
|
|
itop.setDescription(ip.getDescription()); |
|
|
|
|
itop.setCreateTime(project.getCreateTime()); |
|
|
|
|
// itop.setTenantId(task.getTenantId());
|
|
|
|
|
itop.setCreateUser(task.getCreateUser()); |
|
|
|
|
itop.setCreateDept(task.getCreateDept()); |
|
|
|
|
itop.setStatus(TaskContants.StatusEnum.INIT_STATUS.getStatus()); |
|
|
|
|
itop.setCreateUser(task.getCreateUser()); |
|
|
|
|
itop.setCreateDept(task.getCreateDept()); |
|
|
|
|
itop.setStatus(TaskContants.StatusEnum.INIT_STATUS.getStatus()); |
|
|
|
|
taskObjectProjectService.save(itop); |
|
|
|
|
List<ProjectContentEntity> contents = projectContentService.list(Wrappers.<ProjectContentEntity>query().lambda().eq(ProjectContentEntity::getProjectId,project.getProjectId())); |
|
|
|
|
List<ProjectContentEntity> contents = projectContentService.list(Wrappers.<ProjectContentEntity>query().lambda().eq(ProjectContentEntity::getProjectId, project.getProjectId())); |
|
|
|
|
for (ProjectContentEntity content : contents) { |
|
|
|
|
result = distributeTaskContents(task, objectId, content); |
|
|
|
|
if(!result.equals(StringUtils.EMPTY)){ |
|
|
|
|
if (!result.equals(StringUtils.EMPTY)) { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -210,13 +218,16 @@ public class TaskJobService {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 从巡检任务、巡检计划对象模板、巡检项目内容获取信息插入巡检任务内容表以及对应的历史数据表 |
|
|
|
|
* |
|
|
|
|
* @param objectId 巡检计划对象模板实例 |
|
|
|
|
* @param content 巡检项目内容实例 |
|
|
|
|
* @param content 巡检项目内容实例 |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private String distributeTaskContents(TaskEntity task, Long objectId, ProjectContentEntity content) { |
|
|
|
|
ContentEntity ioc = contentService.getById(content.getContentId()); |
|
|
|
|
if(ioc == null) {return "巡检内容id="+content.getContentId()+"找不到记录";} |
|
|
|
|
if (ioc == null) { |
|
|
|
|
return "巡检内容id=" + content.getContentId() + "找不到记录"; |
|
|
|
|
} |
|
|
|
|
TaskObjectProjectContentEntity itopc = new TaskObjectProjectContentEntity(); |
|
|
|
|
itopc.setTaskId(task.getId()); |
|
|
|
|
itopc.setObjectId(objectId); |
|
|
|
|
@ -229,8 +240,8 @@ public class TaskJobService {
|
|
|
|
|
itopc.setRecordType(ioc.getRecordType()); |
|
|
|
|
itopc.setCreateTime(content.getCreateTime()); |
|
|
|
|
// itopc.setTenantId(task.getTenantId());
|
|
|
|
|
itopc.setCreateUser(task.getCreateUser()); |
|
|
|
|
itopc.setCreateDept(task.getCreateDept()); |
|
|
|
|
itopc.setCreateUser(task.getCreateUser()); |
|
|
|
|
itopc.setCreateDept(task.getCreateDept()); |
|
|
|
|
itopc.setCheckTypeSon(ioc.getCheckTypeSon()); |
|
|
|
|
itopc.setCameraAddr(ioc.getCameraAddr()); |
|
|
|
|
itopc.setCameraId(ioc.getCameraId()); |
|
|
|
|
@ -244,64 +255,64 @@ public class TaskJobService {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 根据巡检计划返回与计划有关的所有用户 |
|
|
|
|
* |
|
|
|
|
* @param plan 巡检计划实例 |
|
|
|
|
* @return 计划相关用户集合 |
|
|
|
|
*/ |
|
|
|
|
public List<PlanUserEntity> getUsersByPlan(PlanEntity plan) { |
|
|
|
|
List<PlanUserEntity> res = new LinkedList<PlanUserEntity>(); |
|
|
|
|
if(PlanTypeEnum.USER_TYPE.getType().equals(plan.getType()) || PlanTypeEnum.FREE_TYPE.getType().equals(plan.getType())){ |
|
|
|
|
if (PlanTypeEnum.USER_TYPE.getType().equals(plan.getType()) || PlanTypeEnum.FREE_TYPE.getType().equals(plan.getType())) { |
|
|
|
|
QueryWrapper<PlanUserEntity> planUserQw = new QueryWrapper<>(); |
|
|
|
|
planUserQw.lambda().eq(PlanUserEntity::getPlanId, plan.getId()); |
|
|
|
|
res.addAll(planUserService.list(planUserQw)); |
|
|
|
|
}else if(PlanTypeEnum.POSITION_TYPE.getType().equals(plan.getType())){ |
|
|
|
|
} else if (PlanTypeEnum.POSITION_TYPE.getType().equals(plan.getType())) { |
|
|
|
|
QueryWrapper<PlanPositionEntity> planPositionEntityQueryWrapper = new QueryWrapper<>(); |
|
|
|
|
planPositionEntityQueryWrapper.lambda().eq(PlanPositionEntity::getPlanId, plan.getId()); |
|
|
|
|
planPostionService.list(planPositionEntityQueryWrapper).stream().forEach(entity->{ |
|
|
|
|
//获取该机构下所有用户列表
|
|
|
|
|
List<User> users = new ArrayList<>(); |
|
|
|
|
List<User> positionUsers = userClient.userListByPosition(entity.getPositionId()).getData(); |
|
|
|
|
if(CollectionUtil.isNotEmpty(positionUsers)){ |
|
|
|
|
users = positionUsers.stream().filter(user->user.getCreateDept().toString().contains(entity.getCreateDept().toString())).collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
//List<User> users = userClient.userListByPositionAndDept(entity.getPositionId(), plan.getCreateDept()).getData();
|
|
|
|
|
log.info("岗位信息:" + entity.toString() + "; 获取到的user:{}",users.stream().map(User::getName).collect(Collectors.joining(","))); |
|
|
|
|
for(User u:users){ |
|
|
|
|
planPostionService.list(planPositionEntityQueryWrapper).stream().forEach(entity -> { |
|
|
|
|
//获取该机构下所有用户列表
|
|
|
|
|
List<User> users = new ArrayList<>(); |
|
|
|
|
List<User> positionUsers = userClient.userListByPosition(entity.getPositionId()).getData(); |
|
|
|
|
if (CollectionUtil.isNotEmpty(positionUsers)) { |
|
|
|
|
users = positionUsers.stream().filter(user -> user.getCreateDept().toString().contains(entity.getCreateDept().toString())).collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
//List<User> users = userClient.userListByPositionAndDept(entity.getPositionId(), plan.getCreateDept()).getData();
|
|
|
|
|
log.info("岗位信息:" + entity.toString() + "; 获取到的user:{}", users.stream().map(User::getName).collect(Collectors.joining(","))); |
|
|
|
|
for (User u : users) { |
|
|
|
|
res.add(PlanUserEntity.builder().planId(plan.getId()).userId(u.getId()).build()); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}else if(PlanTypeEnum.ORG_TYPE.getType().equals(plan.getType())){ |
|
|
|
|
} else if (PlanTypeEnum.ORG_TYPE.getType().equals(plan.getType())) { |
|
|
|
|
QueryWrapper<PlanOrgEntity> planOrgEntityQueryWrapper = new QueryWrapper<>(); |
|
|
|
|
planOrgEntityQueryWrapper.lambda().eq(PlanOrgEntity::getPlanId, plan.getId()); |
|
|
|
|
planOrgService.list(planOrgEntityQueryWrapper).stream().forEach(entity->{ |
|
|
|
|
planOrgService.list(planOrgEntityQueryWrapper).stream().forEach(entity -> { |
|
|
|
|
List<User> users = userClient.userListByDeptId(entity.getOrgId()).getData(); |
|
|
|
|
for(User u:users){ |
|
|
|
|
for (User u : users) { |
|
|
|
|
res.add(PlanUserEntity.builder().planId(plan.getId()).userId(u.getId()).build()); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}else if(PlanTypeEnum.CLASS_TYPE.getType().equals(plan.getType())){ |
|
|
|
|
log.error("巡检计划为班次时,有单独的处理流程,不应该跑到该分支下面来, plan = " + plan.toString()); |
|
|
|
|
JSONArray timeJsonArray; |
|
|
|
|
if(Func.isNotEmpty(plan.getExecTimeJson())){ |
|
|
|
|
/** 多次计划执行时间 **/ |
|
|
|
|
timeJsonArray = JSON.parseArray(plan.getExecTimeJson()); |
|
|
|
|
} |
|
|
|
|
else{ |
|
|
|
|
throw new ServiceException("巡检计划未设置值班班次: plan = " + plan.toString()); |
|
|
|
|
} |
|
|
|
|
for(int i=0;i<plan.getTaskTimesADay();i++){ |
|
|
|
|
JSONObject time = timeJsonArray.getJSONObject(i); |
|
|
|
|
plan.setExecStartTime(time.get("execStartTime").toString()); |
|
|
|
|
plan.setExecEndTime(time.get("execEndTime").toString()); |
|
|
|
|
if (time.containsKey("isNextDay")) { |
|
|
|
|
plan.setIsNextDay(time.getBoolean("isNextDay")); |
|
|
|
|
} |
|
|
|
|
//获取值班用户
|
|
|
|
|
if (time.containsKey("classId")) { |
|
|
|
|
DateTimeFormatter dfShort = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|
|
|
|
//ImsDutyMainFeignVO mainPerson = dutyMainClient.getMainPerson(time.getLong("classId"), dfShort.format(LocalDate.now()));
|
|
|
|
|
//List<Long> ids = mainPerson.getPersons();
|
|
|
|
|
//log.info("--计划为:{};人员ID为:{}--",plan.getName(),ids.stream().map(id->String.valueOf(id)).collect(Collectors.joining(",")));
|
|
|
|
|
//plan.setDutyId(mainPerson.getMainId());
|
|
|
|
|
} else if (PlanTypeEnum.CLASS_TYPE.getType().equals(plan.getType())) { |
|
|
|
|
log.error("巡检计划为班次时,有单独的处理流程,不应该跑到该分支下面来, plan = " + plan.toString()); |
|
|
|
|
JSONArray timeJsonArray; |
|
|
|
|
if (Func.isNotEmpty(plan.getExecTimeJson())) { |
|
|
|
|
/** 多次计划执行时间 **/ |
|
|
|
|
timeJsonArray = JSON.parseArray(plan.getExecTimeJson()); |
|
|
|
|
} else { |
|
|
|
|
throw new ServiceException("巡检计划未设置值班班次: plan = " + plan.toString()); |
|
|
|
|
} |
|
|
|
|
for (int i = 0; i < plan.getTaskTimesADay(); i++) { |
|
|
|
|
JSONObject time = timeJsonArray.getJSONObject(i); |
|
|
|
|
plan.setExecStartTime(time.get("execStartTime").toString()); |
|
|
|
|
plan.setExecEndTime(time.get("execEndTime").toString()); |
|
|
|
|
if (time.containsKey("isNextDay")) { |
|
|
|
|
plan.setIsNextDay(time.getBoolean("isNextDay")); |
|
|
|
|
} |
|
|
|
|
//获取值班用户
|
|
|
|
|
if (time.containsKey("classId")) { |
|
|
|
|
DateTimeFormatter dfShort = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|
|
|
|
//ImsDutyMainFeignVO mainPerson = dutyMainClient.getMainPerson(time.getLong("classId"), dfShort.format(LocalDate.now()));
|
|
|
|
|
//List<Long> ids = mainPerson.getPersons();
|
|
|
|
|
//log.info("--计划为:{};人员ID为:{}--",plan.getName(),ids.stream().map(id->String.valueOf(id)).collect(Collectors.joining(",")));
|
|
|
|
|
//plan.setDutyId(mainPerson.getMainId());
|
|
|
|
|
// if(Func.isNotEmpty(ids)){
|
|
|
|
|
// for (Long id : ids) {
|
|
|
|
|
// res.add(PlanUserEntity.builder().planId(plan.getId()).userId(id).build());
|
|
|
|
|
@ -309,8 +320,8 @@ public class TaskJobService {
|
|
|
|
|
// } else {
|
|
|
|
|
// log.error("获取该班次值班人员为空, plan = " + plan.toString());
|
|
|
|
|
// }
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/*PlanClassEntity one = planClassService.getOne(Wrappers.lambdaQuery(PlanClassEntity.class).eq(PlanClassEntity::getPlanId, plan.getId()).last(" limit 1 ")); |
|
|
|
|
if(Func.isNotEmpty(one)) { |
|
|
|
|
DateTimeFormatter dfShort = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|
|
|
|
@ -329,79 +340,85 @@ public class TaskJobService {
|
|
|
|
|
}*/ |
|
|
|
|
} |
|
|
|
|
//设置租户
|
|
|
|
|
List<PlanUserEntity> userResult = res.stream().distinct().map(entity-> { |
|
|
|
|
List<PlanUserEntity> userResult = res.stream().distinct().map(entity -> { |
|
|
|
|
// entity.setTenantId(plan.getTenantId());
|
|
|
|
|
entity.setCreateDept(plan.getCreateDept()); |
|
|
|
|
return entity; |
|
|
|
|
}).collect(Collectors.toList()); |
|
|
|
|
return entity; |
|
|
|
|
}).collect(Collectors.toList()); |
|
|
|
|
//res.forEach(entity->entity.setTenantId(plan.getTenantId()));
|
|
|
|
|
return userResult; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 根据计划信息设置任务信息 |
|
|
|
|
* @param plan 巡检计划实例 |
|
|
|
|
* |
|
|
|
|
* @param plan 巡检计划实例 |
|
|
|
|
* @param totalTaskNum 任务数 并发任务有多少个人做任务就生成多少个任务,抢占任务只生成一个 |
|
|
|
|
* @return 巡检任务实例 |
|
|
|
|
*/ |
|
|
|
|
public TaskEntity fillInspectionTask(PlanEntity plan,int totalTaskNum) { |
|
|
|
|
totalTaskNum = plan.getTaskTimesADay() * totalTaskNum; |
|
|
|
|
public TaskEntity fillInspectionTask(PlanEntity plan, int totalTaskNum) { |
|
|
|
|
totalTaskNum = plan.getTaskTimesADay() * totalTaskNum; |
|
|
|
|
TaskEntity task = new TaskEntity(); |
|
|
|
|
LocalDate now = LocalDate.now(); |
|
|
|
|
DateTimeFormatter dfShort = DateTimeFormatter.ofPattern("yyyy-MM-dd "); |
|
|
|
|
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
|
|
|
|
DateTimeFormatter dfShort = DateTimeFormatter.ofPattern("yyyy-MM-dd "); |
|
|
|
|
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
|
|
|
|
|
|
|
|
|
if(PlanCycleEnum.NEVER_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setBatchNumber(now.getYear()+dateSplit+now.getMonthValue()+dateSplit+now.getDayOfMonth() + "N"); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(plan.getEndTime())+plan.getExecEndTime(), df)); |
|
|
|
|
}else if(PlanCycleEnum.EVERYDAY_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setBatchNumber(now.getYear()+dateSplit+now.getMonthValue()+dateSplit+now.getDayOfMonth() +""); |
|
|
|
|
if(Func.isNotEmpty(plan.getIsNextDay()) && plan.getIsNextDay()){ |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now.plusDays(1L)) + plan.getExecEndTime(), df)); |
|
|
|
|
if (PlanCycleEnum.NEVER_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setBatchNumber(now.getYear() + dateSplit + now.getMonthValue() + dateSplit + now.getDayOfMonth() + "N"); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(plan.getEndTime()) + plan.getExecEndTime(), df)); |
|
|
|
|
} else if (PlanCycleEnum.EVERYDAY_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setBatchNumber(now.getYear() + dateSplit + now.getMonthValue() + dateSplit + now.getDayOfMonth() + ""); |
|
|
|
|
if (Func.isNotEmpty(plan.getIsNextDay()) && plan.getIsNextDay()) { |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now.plusDays(1L)) + plan.getExecEndTime(), df)); |
|
|
|
|
} else { |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now) + plan.getExecEndTime(), df)); |
|
|
|
|
} |
|
|
|
|
}else if(PlanCycleEnum.EVERYWEEK_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY,1); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now) + plan.getExecEndTime(), df)); |
|
|
|
|
} |
|
|
|
|
} else if (PlanCycleEnum.EVERYWEEK_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY, 1); |
|
|
|
|
int weeks = now.get(weekFields.weekOfYear()); |
|
|
|
|
task.setBatchNumber(now.getYear()+dateSplit+now.getMonthValue() + dateSplit+weeks + "W"); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now.plusWeeks(1)) + plan.getExecEndTime(), df)); |
|
|
|
|
}else if(PlanCycleEnum.EVERYMONTH_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setBatchNumber(now.getYear()+dateSplit+now.getMonthValue()); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now.plusMonths(1))+plan.getExecEndTime(), df)); |
|
|
|
|
}else if(PlanCycleEnum.EVERYQUARTER_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setBatchNumber(now.getYear()+dateSplit+now.getMonthValue() + "Q"); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now.plusMonths(3)) + plan.getExecEndTime(), df)); |
|
|
|
|
}else if(PlanCycleEnum.EVERYYEAR_CYCLE.getCycle().equals(plan.getCycle())){ |
|
|
|
|
task.setBatchNumber(now.getYear()+""); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now.plusYears(1))+plan.getExecEndTime(), df)); |
|
|
|
|
task.setBatchNumber(now.getYear() + dateSplit + now.getMonthValue() + dateSplit + weeks + "W"); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now.plusWeeks(1)) + plan.getExecEndTime(), df)); |
|
|
|
|
} else if (PlanCycleEnum.EVERYMONTH_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setBatchNumber(now.getYear() + dateSplit + now.getMonthValue()); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now.plusMonths(1)) + plan.getExecEndTime(), df)); |
|
|
|
|
} else if (PlanCycleEnum.EVERYQUARTER_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setBatchNumber(now.getYear() + dateSplit + now.getMonthValue() + "Q"); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now.plusMonths(3)) + plan.getExecEndTime(), df)); |
|
|
|
|
} else if (PlanCycleEnum.EVERYYEAR_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setBatchNumber(now.getYear() + ""); |
|
|
|
|
task.setPlanEndTime(LocalDateTime.parse(dfShort.format(now.plusYears(1)) + plan.getExecEndTime(), df)); |
|
|
|
|
} |
|
|
|
|
task.setDutyId(plan.getDutyId()); |
|
|
|
|
task.setPlanId(plan.getId()); |
|
|
|
|
task.setPlanName(plan.getName()); |
|
|
|
|
task.setType(plan.getType()); |
|
|
|
|
task.setCycle(plan.getCycle()); |
|
|
|
|
if(PlanCycleEnum.NEVER_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setPlanStartTime(LocalDateTime.parse(dfShort.format(plan.getStartTime()) + plan.getExecStartTime(), df)); |
|
|
|
|
} else { |
|
|
|
|
task.setPlanStartTime(LocalDateTime.parse(dfShort.format(now) + plan.getExecStartTime(), df)); |
|
|
|
|
} |
|
|
|
|
if (PlanCycleEnum.NEVER_CYCLE.getCycle().equals(plan.getCycle())) { |
|
|
|
|
task.setPlanStartTime(LocalDateTime.parse(dfShort.format(plan.getStartTime()) + plan.getExecStartTime(), df)); |
|
|
|
|
} else { |
|
|
|
|
task.setPlanStartTime(LocalDateTime.parse(dfShort.format(now) + plan.getExecStartTime(), df)); |
|
|
|
|
} |
|
|
|
|
task.setStatus(Integer.valueOf(TaskContants.TaskStatusEnum.INIT_STATUS.getStatus())); |
|
|
|
|
task.setCreateUser(plan.getCreateUser()); |
|
|
|
|
task.setCreateDept(plan.getCreateDept()); |
|
|
|
|
task.setAutoVideo(plan.getAutoVideo()); |
|
|
|
|
task.setCreateUser(plan.getCreateUser()); |
|
|
|
|
task.setCreateDept(plan.getCreateDept()); |
|
|
|
|
task.setAutoVideo(plan.getAutoVideo()); |
|
|
|
|
task.setMethod(plan.getMethod()); |
|
|
|
|
task.setEndRemindFlag(true); |
|
|
|
|
task.setStartRemindFlag(true); |
|
|
|
|
task.setStartRemindTime(task.getPlanStartTime().minusMinutes(plan.getStartRemind())); |
|
|
|
|
task.setEndRemindTime(task.getPlanEndTime().minusMinutes(plan.getEndRemind())); |
|
|
|
|
int taskCount = taskService.count(Wrappers.<TaskEntity>query().lambda().eq(TaskEntity::getPlanId,task.getPlanId()).eq(TaskEntity::getBatchNumber, task.getBatchNumber())); |
|
|
|
|
XxlJobLogger.log("该计划已生成计划批次:{},数量:{}",task.getBatchNumber(),taskCount); |
|
|
|
|
if(taskCount>=totalTaskNum){ |
|
|
|
|
log.info("计划id={}本周期batchNumber={}的任务已生成",plan.getId(),task.getBatchNumber()); |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
task.setEndRemindTime(task.getPlanEndTime().minusMinutes(plan.getEndRemind())); |
|
|
|
|
int taskCount = taskService.count(Wrappers.<TaskEntity>query().lambda().eq(TaskEntity::getPlanId, task.getPlanId()).eq(TaskEntity::getBatchNumber, task.getBatchNumber())); |
|
|
|
|
XxlJobLogger.log("该计划已生成计划批次:{},数量:{}", task.getBatchNumber(), taskCount); |
|
|
|
|
if (taskCount >= totalTaskNum) { |
|
|
|
|
log.info("计划id={}本周期batchNumber={}的任务已生成", plan.getId(), task.getBatchNumber()); |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
// 自动报备
|
|
|
|
|
task.setKeepOnRecord(TaskContants.keepOnRecordEnum.yes.getType()); |
|
|
|
|
task.setStartTime(LocalDateTime.now()); |
|
|
|
|
task.setStatus(Integer.valueOf(TaskContants.TaskStatusEnum.UNDERWAY_STATUS.getStatus())); |
|
|
|
|
taskService.save(task); |
|
|
|
|
|
|
|
|
|
return task; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|