guoshilong
2024-03-23 f04487fef5ac47380dfa9670156743c9d273966b
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
@@ -3,9 +3,10 @@
import cn.gistack.flow.core.constant.ProcessConstant;
import cn.gistack.flow.core.entity.BladeFlow;
import cn.gistack.flow.core.feign.IFlowClient;
import cn.gistack.flow.core.utils.FlowUtil;
import cn.gistack.flow.core.utils.TaskUtil;
import cn.gistack.nky.fegin.INkyClient;
import cn.gistack.sm.patrol.params.PersonHandleParams;
import cn.gistack.sm.patrol.dto.PatrolTaskDTO;
import cn.gistack.sm.patrol.entity.PatrolRecord;
import cn.gistack.sm.patrol.entity.PatrolReport;
import cn.gistack.sm.patrol.entity.PatrolTask;
@@ -16,23 +17,22 @@
import cn.gistack.sm.patrol.util.EnhancementServicesTool;
import cn.gistack.sm.patrol.util.IdWorker;
import cn.gistack.sm.patrol.vo.*;
import cn.gistack.sm.sjztmd.service.IAttResManagePersonService;
import cn.gistack.sm.sjztmd.service.IYwTermitesTaskService;
import cn.gistack.sm.sjztmd.vo.ChargePersonVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
import java.util.stream.Collectors;
@Service
@AllArgsConstructor
@@ -43,6 +43,7 @@
   private final IPatrolReportService patrolReportService;
   private final INkyClient nkyClient;
   private final IYwTermitesTaskService waterDataTermitesService;
   private final IAttResManagePersonService attResManagePersonService;
   private final String PATROL_USER = "patrolUser";
   private final String TECH_USER = "techUser";
@@ -59,14 +60,14 @@
    */
   @Override
   public IPage<PatrolTaskVO> selectPatrolTask(IPage<PatrolTaskVO> page, PatrolTaskVO patrolTask) {
//      List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTask(page, patrolTask);
      List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTask(page, patrolTask);
      List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTaskPage(page.getCurrent() - 1, page.getSize(), patrolTask);
      long total = baseMapper.getPatrolTaskTotal(patrolTask);
      page.setRecords(patrolTaskList);
      page.setTotal(total);
//      List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTaskPage(page.getCurrent() - 1, page.getSize(), patrolTask);
//      long total = baseMapper.getPatrolTaskTotal(patrolTask);
//      page.setRecords(patrolTaskList);
//      page.setTotal(total);
      return page;
      return page.setRecords(patrolTaskList);
   }
   /**
@@ -128,53 +129,231 @@
   @Override
   @Transactional(rollbackFor = Exception.class)
   public PatrolTask startProcess(PatrolTask patrolTask) {
      String businessTable = FlowUtil.getBusinessTable(ProcessConstant.PATROL_KEY);
      if (Func.isEmpty(patrolTask.getId())) {
         save(patrolTask);
         // 启动流程
//      String businessTable = FlowUtil.getBusinessTable(ProcessConstant.PATROL_KEY);
//      if (Func.isEmpty(patrolTask.getId())) {
//         save(patrolTask);
//
//
//         // 启动流程
////         Kv variables = Kv.create()
////            //设置创建人
////            .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserId())
////            //指定任务处理人
////            .set("taskUser", TaskUtil.getTaskUser(patrolTask.getToUserId()));
////         R<BladeFlow> result = flowClient.startProcessInstanceById(patrolTask.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(patrolTask.getId())), variables);
//
//         Kv variables = Kv.create()
//            //设置创建人
//            .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserId())
//            //指定任务处理人
//            //指定巡查责任人
//            .set(PATROL_USER, TaskUtil.getTaskUser(patrolTask.getToUserId()))
//            .set("taskUser", TaskUtil.getTaskUser(patrolTask.getToUserId()));
//         R<BladeFlow> result = flowClient.startProcessInstanceById(patrolTask.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(patrolTask.getId())), variables);
         Kv variables = Kv.create()
            //设置创建人
            .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserId())
            //指定巡查责任人
            .set(PATROL_USER, TaskUtil.getTaskUser(patrolTask.getToUserId()))
            .set("taskUser", TaskUtil.getTaskUser(patrolTask.getToUserId()));
         R<BladeFlow> result = flowClient.startProcessInstanceById(patrolTask.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(patrolTask.getId())), variables);
         if (result.isSuccess()) {
            log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId());
            // 返回流程id写入leave
            patrolTask.setProcessInstanceId(result.getData().getProcessInstanceId());
            updateById(patrolTask);
         } else {
            throw new ServiceException("开启流程失败");
         }
      } else {
         updateById(patrolTask);
      }
      return patrolTask;
//
//         if (result.isSuccess()) {
//            log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId());
//            // 返回流程id写入leave
//            patrolTask.setProcessInstanceId(result.getData().getProcessInstanceId());
//            updateById(patrolTask);
//         } else {
//            throw new ServiceException("开启流程失败");
//         }
//      } else {
//         updateById(patrolTask);
//      }
//      return patrolTask;
      return null;
   }
   @Override
   public boolean personCompleteTask(PatrolTaskVO patrolTaskVO, String currentUserId, String taskUser) {
      String taskId = patrolTaskVO.getFlowTaskId();
      String processInstanceId = patrolTaskVO.getProcessInstanceId();
      String comment = patrolTaskVO.getComment();
//      String taskId = patrolTaskVO.getFlowTaskId();
//      String processInstanceId = patrolTaskVO.getProcessInstanceId();
//      String comment = patrolTaskVO.getComment();
//
//      //保存巡查记录
//      if (patrolTaskVO.getPatrolRecordList() != null && patrolTaskVO.getPatrolRecordList().size()>0){
//         patrolRecordService.saveBatch(patrolTaskVO.getPatrolRecordList());
//      }
//
//      // 创建变量
//      Map<String, Object> variables = new HashMap<>();
//      if (variables == null) {
//         variables = Kv.create();
//      }
//
//      //指定了人就是上报,没指定就表示已经处理了
//      if (StringUtil.isNotBlank(taskUser)){
//         variables.put("taskUser",TaskUtil.getTaskUser(taskUser));
//         variables.put(ProcessConstant.REPORT_KEY,true);
//      }else{
//         variables.put(ProcessConstant.REPORT_KEY,false);
//
//         //查监测预警表,看是否有这个任务,有的话修改任务状态
//         Boolean finishDamTask = nkyClient.finishTask(patrolTaskVO.getId().toString());
//         if (!finishDamTask){
//            //查白蚁表,看是否有这个任务,有的话修改任务状态
//            Boolean finishTermitesTask = waterDataTermitesService.finishTask(patrolTaskVO.getId().toString());
//         }
//      }
//
//
//
//
//      flowClient.completeTask(taskId, processInstanceId, comment, variables);
//      return updateById(patrolTaskVO);
      return false;
   }
      //保存巡查记录
      if (patrolTaskVO.getPatrolRecordList() != null && patrolTaskVO.getPatrolRecordList().size()>0){
         patrolRecordService.saveBatch(patrolTaskVO.getPatrolRecordList());
   @Override
   public List<PatrolTask> deliverTask(PatrolTask patrolTask) {
      String projectIds = patrolTask.getProjectId();
      String patrolRole = patrolTask.getPatrolRole();
      String reservoirName = patrolTask.getReservoirName();
      List<String> resList = Arrays.asList(projectIds.split(","));
      List<String> roleList = Arrays.asList(patrolRole.split(","));
      List<String> reservoirNameList = Arrays.asList(reservoirName.split(","));
      List<PatrolTask> saveList = new ArrayList<>();
      //循环水库
      for (int i = 0; i < resList.size(); i++) {
         String resId = resList.get(i);
         for (int j = 0; j < roleList.size(); j++) {
            String role = roleList.get(j);
            //获取该类型责任人
            List<ChargePersonVO> managePersonList = attResManagePersonService.getManagePersonList(resId, role);
            PatrolTask saveTask = new PatrolTask();
            saveTask.setTitle(patrolTask.getTitle());
            saveTask.setStartTime(patrolTask.getStartTime());
            saveTask.setEndTime(patrolTask.getEndTime());
            saveTask.setContent(patrolTask.getContent());
            List<String> collect = managePersonList.stream().map(p -> p.getUserId()).collect(Collectors.toList());
            if (StringUtil.isBlank(patrolTask.getToUserId())) {
               //没传就自己找
               //有几个就有几个
               saveTask.setToUserId(StringUtil.join(collect, ","));
            } else {
               saveTask.setToUserId(patrolTask.getToUserId());
            }
            saveTask.setProjectId(resId);
            saveTask.setReservoirName(reservoirNameList.get(i));
            saveTask.setTaskType(patrolTask.getTaskType());
            saveTask.setPatrolGroupItemId(patrolTask.getPatrolGroupItemId());
            saveTask.setPatrolRole(role);
            saveList.add(saveTask);
         }
      }
      boolean saveBatch = saveBatch(saveList);
      return saveList;
   }
   @Override
   public PatrolTask saveTask(PatrolTask patrolTask) {
      save(patrolTask);
      return patrolTask;
   }
   @Override
   public PatrolTaskDTO getTaskDTO(String taskId) {
      return baseMapper.getTaskDTO(taskId);
   }
   @Override
   public Object getMyTask(PatrolTaskVO patrolTask, IPage<PatrolTask> page) {
      if (patrolTask.getIsPage()) {
         return page.setRecords(baseMapper.getMyTask(patrolTask, page));
      }
      return baseMapper.getMyTask(patrolTask, null);
   }
   @Override
   public Boolean finishPatrolTask(PatrolTaskVO patrolTaskVO) {
      //更新任务信息
      boolean updateTask = updateById(patrolTaskVO);
//      查监测预警表,看是否有这个任务,有的话修改任务状态
      Boolean finishDamTask = nkyClient.finishTask(patrolTaskVO.getId().toString());
      if (!finishDamTask) {
         //查白蚁表,看是否有这个任务,有的话修改任务状态
         Boolean finishTermitesTask = waterDataTermitesService.finishTask(patrolTaskVO.getId().toString());
      }
      List<PatrolRecordVO> patrolRecordList = patrolTaskVO.getPatrolRecordList();
      if (patrolRecordList != null && patrolRecordList.size() > 0) {
         patrolRecordList.forEach(record -> {
            patrolRecordService.startProcess(record, patrolTaskVO.getProjectId());
         });
      }
      return updateTask;
   }
   @Override
   public Boolean personHandle(PersonHandleParams personHandleParams) {
      PatrolRecord patrolRecord = personHandleParams.getPatrolRecord();
      String recordId = personHandleParams.getRecordId();
      String taskId = personHandleParams.getTaskId();
      String flowTaskId = personHandleParams.getFlowTaskId();
      String taskUser = personHandleParams.getTaskUser();
      String comment = personHandleParams.getComment();
      String processInstanceId = personHandleParams.getProcessInstanceId();
      if (StringUtil.isBlank(recordId)) {
         throw new ServiceException("recordId为空");
      }
      if (StringUtil.isBlank(taskId)) {
         throw new ServiceException("taskId为空");
      }
      if (StringUtil.isBlank(flowTaskId)) {
         throw new ServiceException("flowTaskId为空");
      }
      if (StringUtil.isBlank(processInstanceId)) {
         throw new ServiceException("processInstanceId为空");
      }
      //说明处理了问题
      if (patrolRecord != null) {
         //保存处理记录
         patrolRecordService.save(patrolRecord);
         //修改该任务的处理状态
         PatrolRecord upRecord = new PatrolRecord();
         upRecord.setId(Long.parseLong(recordId));
         upRecord.setState("1");
         patrolRecordService.updateById(upRecord);
         //修改任务的问题数量
         PatrolTask byId = getById(taskId);
         Integer problemCount = byId.getProblemCount();
         PatrolTask upTask = new PatrolTask();
         upTask.setId(byId.getId());
         upTask.setProblemCount(problemCount - 1);
         updateById(upTask);
      }
      // 创建变量
      Map<String, Object> variables = new HashMap<>();
@@ -183,62 +362,58 @@
      }
      //指定了人就是上报,没指定就表示已经处理了
      if (StringUtil.isNotBlank(taskUser)){
         variables.put("taskUser",TaskUtil.getTaskUser(taskUser));
         variables.put(ProcessConstant.REPORT_KEY,true);
      }else{
         variables.put(ProcessConstant.REPORT_KEY,false);
         //查监测预警表,看是否有这个任务,有的话修改任务状态
         Boolean finishDamTask = nkyClient.finishTask(patrolTaskVO.getId().toString());
         if (!finishDamTask){
            //查白蚁表,看是否有这个任务,有的话修改任务状态
            Boolean finishTermitesTask = waterDataTermitesService.finishTask(patrolTaskVO.getId().toString());
         }
      if (StringUtil.isNotBlank(taskUser)) {
         variables.put("taskUser", TaskUtil.getTaskUser(taskUser));
         variables.put(ProcessConstant.REPORT_KEY, true);
      } else {
         variables.put(ProcessConstant.REPORT_KEY, false);
//         //查监测预警表,看是否有这个任务,有的话修改任务状态
//         Boolean finishDamTask = nkyClient.finishTask(patrolTaskVO.getId().toString());
//         if (!finishDamTask){
//            //查白蚁表,看是否有这个任务,有的话修改任务状态
//            Boolean finishTermitesTask = waterDataTermitesService.finishTask(patrolTaskVO.getId().toString());
//         }
      }
      flowClient.completeTask(flowTaskId, processInstanceId, comment, variables);
      return true;
      flowClient.completeTask(taskId, processInstanceId, comment, variables);
      return updateById(patrolTaskVO);
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public boolean patrolCompleteTask(PatrolTaskVO patrolTask, String currentUserId, String taskUser) {
      R<BladeFlow> res = flowClient.getBladeFlow(patrolTask.getId().toString(), currentUserId);
      if (res.isSuccess()) {
         BladeFlow flow = res.getData();
         String taskId = flow.getTaskId();
         String processInstanceId = patrolTask.getProcessInstanceId();
//         String comment = patrolTask.getReport() ? "巡查任务发现问题" : "巡查任务完成,未发现问题";
         String comment = patrolTask.getComment();
         // 创建变量
         Map<String, Object> variables = flow.getVariables();
         if (variables == null) {
            variables = Kv.create();
         }
         //设置是否上报标识
         variables.put(ProcessConstant.REPORT_KEY, patrolTask.getReport());
//         variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, taskUser));
         variables.put(TECH_USER, TaskUtil.getTaskUser(taskUser));
         // 完成任务
         flowClient.completeTask(taskId, processInstanceId, comment, variables);
         //保存巡查记录
         if (patrolTask.getPatrolRecordList() != null && patrolTask.getPatrolRecordList().size() > 0){
            patrolRecordService.saveBatch(patrolTask.getPatrolRecordList());
         }
         return baseMapper.updateById(patrolTask) > 0;
      } else {
         return false;
      }
//      R<BladeFlow> res = flowClient.getBladeFlow(patrolTask.getId().toString(), currentUserId);
//      if (res.isSuccess()) {
//         BladeFlow flow = res.getData();
//         String taskId = flow.getTaskId();
//         String processInstanceId = patrolTask.getProcessInstanceId();
////         String comment = patrolTask.getReport() ? "巡查任务发现问题" : "巡查任务完成,未发现问题";
//         String comment = patrolTask.getComment();
//         // 创建变量
//         Map<String, Object> variables = flow.getVariables();
//         if (variables == null) {
//            variables = Kv.create();
//         }
//         //设置是否上报标识
//         variables.put(ProcessConstant.REPORT_KEY, patrolTask.getReport());
////         variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, taskUser));
//         variables.put(TECH_USER, TaskUtil.getTaskUser(taskUser));
//         // 完成任务
//         flowClient.completeTask(taskId, processInstanceId, comment, variables);
//         //保存巡查记录
//         if (patrolTask.getPatrolRecordList() != null && patrolTask.getPatrolRecordList().size() > 0){
//            patrolRecordService.saveBatch(patrolTask.getPatrolRecordList());
//         }
//
//
//
//         return baseMapper.updateById(patrolTask) > 0;
//      } else {
//         return false;
//      }
      return false;
   }
   @Override
@@ -269,9 +444,6 @@
//      return true;
      String taskId = bladeFlowTask.getTaskId();
      String processInstanceId = bladeFlowTask.getProcessInstanceId();
      String comment = bladeFlowTask.getComment();
@@ -295,13 +467,13 @@
      switch (currentNode.getHistoryActivityId()) {
         case "techPerson":
            variables.put(bladeFlowTask.getToDept()?DEPT_USER:SUPERVISOR_USER,TaskUtil.getTaskUser(bladeFlowTask.getTaskUser()));
            variables.put(bladeFlowTask.getToDept() ? DEPT_USER : SUPERVISOR_USER, TaskUtil.getTaskUser(bladeFlowTask.getTaskUser()));
            break;
         case "supervisorPerson":
            variables.put(bladeFlowTask.getToDept()?DEPT_USER:ADMIN_USER,TaskUtil.getTaskUser(bladeFlowTask.getTaskUser()));
            variables.put(bladeFlowTask.getToDept() ? DEPT_USER : ADMIN_USER, TaskUtil.getTaskUser(bladeFlowTask.getTaskUser()));
            break;
         case "adminPerson":
            variables.put(DEPT_USER,TaskUtil.getTaskUser(bladeFlowTask.getTaskUser()));
            variables.put(DEPT_USER, TaskUtil.getTaskUser(bladeFlowTask.getTaskUser()));
            break;
         case "department":
            //当前节点为水行政部门,需要指定回复给谁
@@ -311,9 +483,9 @@
            if (beforeId.equals("techPerson")) {
               //前一个节点是技术责任人
               variables.put(ProcessConstant.TOTECH_KEY, true);
            }else if (beforeId.equals("supervisorPerson")){
            } else if (beforeId.equals("supervisorPerson")) {
               variables.put(ProcessConstant.TOSUPERVISOR_KEY, true);
            }else if (beforeId.equals("adminPerson")){
            } else if (beforeId.equals("adminPerson")) {
               variables.put(ProcessConstant.TOADMIN_KEY, true);
            }
            break;