guoshilong
2023-05-18 6cd2da8eb7d7aefecd96a19ebbfe9caba59ea88c
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/service/impl/ReportFloodRecordServiceImpl.java
@@ -39,7 +39,6 @@
@Service
@AllArgsConstructor
public class ReportFloodRecordServiceImpl extends BaseServiceImpl<ReportFloodRecordMapper, ReportFloodRecord> implements IReportFloodRecordService {
   private final IFlowClient flowClient;
   private final IAttResManagePersonService attResManagePersonService;
   private final IUserClient userClient;
@@ -49,82 +48,8 @@
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public boolean startProcess(ReportFloodRecordVO reportFloodRecord) {
      String businessTable = FlowUtil.getBusinessTable(ProcessConstant.REPORT_FLOOD_KEY);
      if (Func.isEmpty(reportFloodRecord.getId())) {
         save(reportFloodRecord);
         // 启动流程
         Kv variables = Kv.create()
            .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, reportFloodRecord.getCreateUser())
            .set("taskUser", StringUtil.format("{}{}", TASK_USR_PREFIX, reportFloodRecord.getTaskUser()));
         R<BladeFlow> result = flowClient.startProcessInstanceById(reportFloodRecord.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(reportFloodRecord.getId())), variables);
         if (result.isSuccess()) {
            log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId());
            // 返回流程id写入
            reportFloodRecord.setProcessInstanceId(result.getData().getProcessInstanceId());
            updateById(reportFloodRecord);
//            //状态正常直接结束任务
            ReportFloodRecordVO reportFloodRecordVO = new ReportFloodRecordVO();
            reportFloodRecordVO.setProcessInstanceId(reportFloodRecord.getProcessInstanceId());
            //业务id
            String businessId = reportFloodRecord.getId().toString();
            //当前用户id
            String currentUserId = reportFloodRecord.getCreateUser().toString();
            //指定下一人
            String taskUser = reportFloodRecord.getTaskUser();
            R<BladeFlow> res = flowClient.getBladeFlow(businessId,currentUserId);
            //参数设置
            if (res.isSuccess()){
               reportFloodRecordVO.setFlow(res.getData());
               if (Func.equals(reportFloodRecord.getStatus(),1)){
                  //状态正常结束任务
                  reportFloodRecordVO.setReport(false);
               }else{
                  //异常
                  if (Func.equals(reportFloodRecord.getSolution(),"1")){
                     //自行处理
                     return true;
                  }else {
                     //上报给技术责任人
                     reportFloodRecordVO.setReport(true);
                  }
               }
            }
            completeTask(reportFloodRecordVO,taskUser,currentUserId);
         } else {
            throw new ServiceException("开启流程失败");
         }
      } else {
         updateById(reportFloodRecord);
      }
      return true;
   }
   @Override
   public boolean completeTask(ReportFloodRecordVO reportFloodRecord, String taskUser, String currentUser) {
         BladeFlow flow = reportFloodRecord.getFlow();
         String taskId = flow.getTaskId();
         String processInstanceId = reportFloodRecord.getProcessInstanceId();
         String comment = "完成";
         // 创建变量
         Map<String, Object> variables = flow.getVariables();
         if (variables == null) {
            variables = Kv.create();
         }
         //指定是否上报
         variables.put(ProcessConstant.REPORT_KEY,reportFloodRecord.isReport());
         //指定转交人
         variables.put("taskUser", StringUtil.format("{}{}", TASK_USR_PREFIX, taskUser));
         // 完成任务
         flowClient.completeTask(taskId,processInstanceId,comment,variables);
         return true;
   }
   @Override
   public ReportFloodRecordVO customizeGetDetail(String businessId) {
      return baseMapper.customizeGetDetail(businessId);
   public ReportFloodRecordVO customizeGetDetail(ReportFloodRecordVO reportFloodRecordVO) {
      return baseMapper.customizeGetDetail(reportFloodRecordVO);
   }
   /**