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
@@ -54,7 +61,7 @@
   public IPage<PatrolTaskVO> selectPatrolTask(IPage<PatrolTaskVO> page, PatrolTaskVO patrolTask) {
//      List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTask(page, patrolTask);
      List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTaskPage(page.getCurrent()-1,page.getSize(),patrolTask);
      List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTaskPage(page.getCurrent() - 1, page.getSize(), patrolTask);
      long total = baseMapper.getPatrolTaskTotal(patrolTask);
      page.setRecords(patrolTaskList);
      page.setTotal(total);
@@ -64,6 +71,7 @@
   /**
    * 查询巡查人员统计数据信息
    *
    * @param patrolTask
    * @return
    */
@@ -74,6 +82,7 @@
   /**
    * 自定义编辑(空间坐标编辑)
    *
    * @param patrolTask
    * @return
    */
@@ -84,11 +93,12 @@
      enhancementServicesTool.resolveEntity(patrolTask);
      Integer update = baseMapper.updatePatrolTask(patrolTask);
      //返回
      return update>0?true:false;
      return update > 0 ? true : false;
   }
   /**
    * 自定义添加
    *
    * @param patrolTask
    * @return
    */
@@ -101,11 +111,12 @@
      // 新增
      Integer save = baseMapper.savePatrolTask(patrolTask);
      //返回
      return save>0?true:false;
      return save > 0 ? true : false;
   }
   /**
    * 自定义通过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,80 +163,190 @@
      return patrolTask;
   }
   @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 = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
         String comment = "完成";
         // 创建变量
         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));
         // 完成任务
         flowClient.completeTask(taskId,processInstanceId,comment,variables);
         //保存巡查记录
         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 {
         return  false;
      }
   }
   @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){
//         isReport = true;
//      }
//      //更新report表
//      boolean update = patrolReportService.updateBatchById(bladeFlowTask.getPatrolReportList());
   public boolean personCompleteTask(PatrolTaskVO patrolTaskVO, String currentUserId, String taskUser) {
      boolean isReport = false;
      if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())){
         isReport = true;
      String taskId = patrolTaskVO.getFlowTaskId();
      String processInstanceId = patrolTaskVO.getProcessInstanceId();
      String comment = patrolTaskVO.getComment();
      //保存巡查记录
      if (patrolTaskVO.getPatrolRecordList() != null && patrolTaskVO.getPatrolRecordList().size()>0){
         patrolRecordService.saveBatch(patrolTaskVO.getPatrolRecordList());
      }
      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());
      //完成任务
      //指定了人就是上报,没指定就表示已经处理了
      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) {
      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;
      }
   }
   @Override
   public boolean chargeCompletePerson(BladeFlowTask bladeFlowTask) {
//      boolean isReport = false;
//      if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())){
//         isReport = true;
//      }
//
//      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;
      String taskId = bladeFlowTask.getTaskId();
      String processInstanceId = bladeFlowTask.getProcessInstanceId();
      String comment = bladeFlowTask.getComment();
      // 创建变量
      Map<String, Object> variables = new HashMap<>();
      if (variables == null) {
         variables = Kv.create();
      }
      //默认不上报
      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());
      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
@@ -226,15 +360,15 @@
   }
   @Override
   public IPage<PatrolTaskReport> getTaskReportPage(IPage<PatrolTaskReport> page,PatrolTaskReport patrolTaskReport) {
      List<PatrolTaskReport> list  = new ArrayList<>();
   public IPage<PatrolTaskReport> getTaskReportPage(IPage<PatrolTaskReport> page, PatrolTaskReport patrolTaskReport) {
      List<PatrolTaskReport> list = new ArrayList<>();
      //获取行政区划统计报表
      if (patrolTaskReport.getRegionFlag().equals("1")){
         list = baseMapper.getRegionReportPage(page,patrolTaskReport);
      }else {
      if (patrolTaskReport.getRegionFlag().equals("1")) {
         list = baseMapper.getRegionReportPage(page, patrolTaskReport);
      } else {
         //获取水库巡查报表
         list = baseMapper.getReservoirReportPage(page,patrolTaskReport);
         list = baseMapper.getReservoirReportPage(page, patrolTaskReport);
      }
      return page.setRecords(list);
   }
@@ -244,9 +378,9 @@
      List<PatrolTaskReport> list = new ArrayList();
      //获取行政区划统计报表
      if (patrolTaskReport.getRegionFlag().equals("1")){
      if (patrolTaskReport.getRegionFlag().equals("1")) {
         list = baseMapper.getRegionReportList(patrolTaskReport);
      }else {
      } else {
         //获取水库巡查报表
         list = baseMapper.getReservoirReportList(patrolTaskReport);
      }
@@ -274,10 +408,10 @@
      TaskStatus taskStatus = baseMapper.getTaskStatus(patrolTaskVO);
      TaskStatusCount unfinished = new TaskStatusCount("未完成","1",taskStatus.getUnfinished());
      TaskStatusCount processing = new TaskStatusCount("进行中","2",taskStatus.getProcessing());
      TaskStatusCount finished = new TaskStatusCount("已完成","3",taskStatus.getFinished());
      TaskStatusCount all = new TaskStatusCount("全部","",taskStatus.getTotal());
      TaskStatusCount unfinished = new TaskStatusCount("未完成", "1", taskStatus.getUnfinished());
      TaskStatusCount processing = new TaskStatusCount("进行中", "2", taskStatus.getProcessing());
      TaskStatusCount finished = new TaskStatusCount("已完成", "3", taskStatus.getFinished());
      TaskStatusCount all = new TaskStatusCount("全部", "", taskStatus.getTotal());
      list.add(unfinished);
      list.add(processing);
@@ -294,6 +428,7 @@
      return taskStatus;
   }
   @Override
   public List<TaskStatusCount> getTaskTypeCount(PatrolTaskVO patrolTaskVO) {
      return baseMapper.getTaskTypeCount(patrolTaskVO);
@@ -304,14 +439,14 @@
      List<PatrolTaskReport> list = new ArrayList();
      list = baseMapper.getTaskReportDetailRegion(page,patrolTaskReport);
      list = baseMapper.getTaskReportDetailRegion(page, patrolTaskReport);
      return page.setRecords(list);
   }
   @Transactional(rollbackFor = Exception.class)
   public void saveReport(PatrolTask patrolTask){
   public void saveReport(PatrolTask patrolTask) {
      //拿到当前任务下的异常巡查记录
      PatrolRecord patrolRecord = new PatrolRecord();
      patrolRecord.setTaskId(patrolTask.getId().toString());
@@ -320,7 +455,7 @@
      List<PatrolRecord> list = patrolRecordService.list(Condition.getQueryWrapper(patrolRecord));
      //向上报表中添加数据
      list.forEach(record->{
      list.forEach(record -> {
         PatrolReport patrolReport = new PatrolReport();
         patrolReport.setContent(record.getContent());
         patrolReport.setImages(record.getImages());