xieb
2024-03-05 200f9e99bab7dcab9360f34fa25f6fa97c33c167
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
@@ -44,8 +44,15 @@
   private final INkyClient nkyClient;
   private final IYwTermitesTaskService waterDataTermitesService;
   private final String PATROL_USER = "patrolUser";
   private final String TECH_USER = "techUser";
   private final String SUPERVISOR_USER = "supervisorUser";
   private final String ADMIN_USER = "adminUser";
   private final String DEPT_USER = "deptUser";
   /**
    * 自定义分页查询
    *
    * @param page
    * @param patrolTask
    * @return
@@ -64,6 +71,7 @@
   /**
    * 查询巡查人员统计数据信息
    *
    * @param patrolTask
    * @return
    */
@@ -74,6 +82,7 @@
   /**
    * 自定义编辑(空间坐标编辑)
    *
    * @param patrolTask
    * @return
    */
@@ -89,6 +98,7 @@
   /**
    * 自定义添加
    *
    * @param patrolTask
    * @return
    */
@@ -106,6 +116,7 @@
   /**
    * 自定义通过id查询
    *
    * @param id
    * @return
    */
@@ -120,11 +131,24 @@
      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);
         if (result.isSuccess()) {
            log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId());
            // 返回流程id写入leave
@@ -139,6 +163,50 @@
      return patrolTask;
   }
   @Override
   public boolean personCompleteTask(PatrolTaskVO patrolTaskVO, String currentUserId, String taskUser) {
      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);
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public boolean patrolCompleteTask(PatrolTaskVO patrolTask,String currentUserId,String taskUser) {
@@ -147,30 +215,25 @@
         BladeFlow flow = res.getData();
         String taskId = flow.getTaskId();
         String processInstanceId = patrolTask.getProcessInstanceId();
//         String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
         String comment = "完成";
//         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("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());
         //保存上报
         //停用
//         saveReport(patrolTask);
         //查监测预警表,看是否有这个任务,有的话修改任务状态
         Boolean finishDamTask = nkyClient.finishTask(patrolTask.getId().toString());
         if (!finishDamTask){
            //查白蚁表,看是否有这个任务,有的话修改任务状态
            Boolean finishTermitesTask = waterDataTermitesService.finishTask(patrolTask.getId().toString());
         }
         return baseMapper.updateById(patrolTask) >0;
      }else {
@@ -180,39 +243,110 @@
   @Override
   public boolean chargeCompletePerson(BladeFlowTask bladeFlowTask) {
      //判断是否上报
//      boolean isReport = false;
//      List<PatrolReport> collect = bladeFlowTask.getPatrolReportList().stream().filter(report -> Func.equals(report.getStatus(), 2)).collect(Collectors.toList());
//      if (collect.size()>0){
//      if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())){
//         isReport = true;
//      }
//      //更新report表
//      boolean update = patrolReportService.updateBatchById(bladeFlowTask.getPatrolReportList());
//
//      String taskId = bladeFlowTask.getTaskId();
//      String processInstanceId = bladeFlowTask.getProcessInstanceId();
//      String comment = "完成";
//      // 创建变量
//      Map<String, Object> variables = new HashMap<>();
//      if (variables == null) {
//         variables = Kv.create();
//      }
//      //指定下一个人
//      variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, bladeFlowTask.getTaskUser()));
//      //指定是否上报
//      variables.put(ProcessConstant.REPORT_KEY,isReport);
//      //指定是否上报给部门
//      variables.put(ProcessConstant.TODEPT_KEY,bladeFlowTask.getToDept());
//      //指定是否转交
//      variables.put(ProcessConstant.TOTECH_KEY,bladeFlowTask.getToTech());
//      //完成任务
//      flowClient.completeTask(taskId, processInstanceId, comment, variables);
//      return true;
      boolean isReport = false;
      if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())){
         isReport = true;
      }
      String taskId = bladeFlowTask.getTaskId();
      String processInstanceId = bladeFlowTask.getProcessInstanceId();
      String comment = "完成";
      String comment = bladeFlowTask.getComment();
      // 创建变量
      Map<String, Object> variables = new HashMap<>();
      if (variables == null) {
         variables = Kv.create();
      }
      //指定下一个人
      variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, bladeFlowTask.getTaskUser()));
      //指定是否上报
      //默认不上报
      boolean isReport = false;
      if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())) {
         //指定了下一个人,修改状态为上报
         isReport = true;
      }
      //techPerson   supervisorPerson  adminPerson department
      //获取当前节点
      BladeFlow currentNode = getFlowNode(processInstanceId, 1);
      switch (currentNode.getHistoryActivityId()) {
         case "techPerson":
            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()));
            break;
         case "adminPerson":
            variables.put(DEPT_USER,TaskUtil.getTaskUser(bladeFlowTask.getTaskUser()));
            break;
         case "department":
            //当前节点为水行政部门,需要指定回复给谁
            //获取前一个节点
            BladeFlow beforeNode = getFlowNode(processInstanceId, 2);
            String beforeId = beforeNode.getHistoryActivityId();
            if (beforeId.equals("techPerson")) {
               //前一个节点是技术责任人
               variables.put(ProcessConstant.TOTECH_KEY, true);
            }else if (beforeId.equals("supervisorPerson")){
               variables.put(ProcessConstant.TOSUPERVISOR_KEY, true);
            }else if (beforeId.equals("adminPerson")){
               variables.put(ProcessConstant.TOADMIN_KEY, true);
            }
            break;
         default:
            break;
      }
      variables.put(ProcessConstant.REPORT_KEY,isReport);
      //指定是否上报给部门
      variables.put(ProcessConstant.TODEPT_KEY,bladeFlowTask.getToDept());
      //指定是否转交
      variables.put(ProcessConstant.TOTECH_KEY,bladeFlowTask.getToTech());
      //完成任务
      flowClient.completeTask(taskId, processInstanceId, comment, variables);
      return true;
   }
   /**
    * 获取节点信息,倒数第一个是自己,第二个是上一节点
    *
    * @param processInstanceId
    * @param i                 倒数第几
    * @return
    */
   private BladeFlow getFlowNode(String processInstanceId, int i) {
      R<List<BladeFlow>> res = flowClient.historyFlowList(processInstanceId, "start", "finish");
      if (res.isSuccess()) {
         //历史流程
         List<BladeFlow> data = res.getData();
         //size减1为当前节点,-2为上一节点
         BladeFlow bladeFlow = data.get(data.size() - i);
         return bladeFlow;
      } else {
         return null;
      }
   }
   @Override
@@ -294,6 +428,7 @@
      return taskStatus;
   }
   @Override
   public List<TaskStatusCount> getTaskTypeCount(PatrolTaskVO patrolTaskVO) {
      return baseMapper.getTaskTypeCount(patrolTaskVO);