lipenghui 1 тиждень тому
батько
коміт
20a8c2e69c

+ 2 - 1
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.bpm.api.task;
 import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
 
 import javax.validation.Valid;
+import java.util.Map;
 
 /**
  * 流程实例 Api 接口
@@ -21,5 +22,5 @@ public interface BpmProcessInstanceApi {
     String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO);
 
 
-
+    void updateProcessVariables(String processId, Map<String, Object> variables);
 }

+ 6 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java

@@ -7,6 +7,7 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.util.Map;
 
 /**
  * Flowable 流程实例 Api 实现类
@@ -26,4 +27,9 @@ public class BpmProcessInstanceApiImpl implements BpmProcessInstanceApi {
         return processInstanceService.createProcessInstance(userId, reqDTO);
     }
 
+    @Override
+    public void updateProcessVariables(String processId, Map<String, Object> variables) {
+        processInstanceService.updateProcessInstanceVariables(processId, variables);
+    }
+
 }

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/constant/PmsConstants.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.pms.constant;
 public interface PmsConstants {
     String GENERATE_INSPECT = "generateInspect";
     String GENERATE_MAINTAIN = "generateMaintain";
+    String FAILURE_NO_PASS = "failureNoPass";
     String GENERATE_MAINTAIN_TEMPLATE = "generate-maintain";
     String GENERATE_MAINTENANCE = "generateMaintenance";
     String FAILURE_REPORT = "failureReport";

+ 26 - 6
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/failure/IotFailureReportController.java

@@ -1,12 +1,17 @@
 package cn.iocoder.yudao.module.pms.controller.admin.failure;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportProcessVO;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonRelationSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainSaveVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.failure.IotFailureReportDO;
+import cn.iocoder.yudao.module.pms.service.IotDeviceService;
 import cn.iocoder.yudao.module.pms.service.failure.IotFailureReportService;
+import cn.iocoder.yudao.module.pms.service.iotdeviceperson.IotDevicePersonService;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,6 +50,12 @@ public class IotFailureReportController {
     private IotFailureReportService iotFailureReportService;
     @Autowired
     private AdminUserApi adminUserApi;
+    @Autowired
+    private BpmProcessInstanceApi bpmProcessInstanceApi;
+    @Autowired
+    private IotDeviceService iotDeviceService;
+    @Autowired
+    private IotDevicePersonService iotDevicePersonService;
 
     @PostMapping("/create")
     @Operation(summary = "创建故障上报")
@@ -124,12 +135,21 @@ public class IotFailureReportController {
     @PutMapping("/process-info")
     @Operation(summary = "故障上报更新流程信息")
     @PreAuthorize("@ss.hasPermission('rq:iot-failure-report:create')")
-    public CommonResult<Long> updateIotFailureReportProcess(@RequestParam("id")String id, @RequestParam("type") String type, @RequestParam("assigneeUserId") String assigneeUserId) {
-        IotFailureReportProcessVO iotFailureReportProcessVO = new IotFailureReportProcessVO();
-        iotFailureReportProcessVO.setId(id);
-        iotFailureReportProcessVO.setType(type);
-        iotFailureReportProcessVO.setAssigneeUserId(Long.valueOf(assigneeUserId));
-        return success(iotFailureReportService.updateIotFailureReportProcess(iotFailureReportProcessVO));
+    public CommonResult<String> updateIotFailureReportProcess(@RequestParam("processId") String processId,@RequestParam("id")String id, @RequestParam("type") String type,
+                                                            @RequestParam("assigneeUserId") String assigneeUserId,@RequestParam("trans") String trans) {
+        if ("true".equals(trans)) {
+            Map<String, Object> params = new HashMap<>();
+            IotFailureReportProcessVO iotFailureReportProcessVO = new IotFailureReportProcessVO();
+            iotFailureReportProcessVO.setId(id);
+            iotFailureReportProcessVO.setType(type);
+            iotFailureReportProcessVO.setAssigneeUserId(Long.valueOf(assigneeUserId));
+            params.put("continue", "1");
+            bpmProcessInstanceApi.updateProcessVariables(processId, params);
+            iotFailureReportService.updateIotFailureReportProcess(iotFailureReportProcessVO);
+            return success("完成");
+        } else {
+            return success("完成");
+        }
     }
 
     @GetMapping("/get/approval")

+ 4 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/IotMaintainController.java

@@ -196,6 +196,10 @@ public class IotMaintainController {
         }
         List<AdminUserRespDTO> userListByDeptId = adminUserApi.getUserListByDeptId(iotFailureReportDO.getDeptId());
         userListByDept.addAll(userListByDeptId);
+        if (StringUtils.isNotBlank(iotFailureReportDO.getCreator())&&Objects.nonNull(iotFailureReportDO.getCreator())) {
+            AdminUserRespDTO creator = adminUserApi.getUser(Long.valueOf(iotFailureReportDO.getCreator()));
+            userListByDept.add(creator);
+        }
         return success(userListByDept);
 
     }

+ 9 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/message/PmsMessage.java

@@ -77,6 +77,9 @@ public class PmsMessage {
             if (PmsConstants.GENERATE_OPERATION.equals(businessType)) {
                 msg = "您有新的运行记录工单 " + name + ",请处理。"+"["+ DateUtil.format(new Date(),"yyyy-MM-dd hh:mm:ss")+"]";
             }
+            if (PmsConstants.FAILURE_NO_PASS.equals(businessType)) {
+                msg = name+"故障上报流程审批完成,没有生成维修工单,将设备的状态调整为观察使用。";
+            }
             String url = "";
 
             if(PmsConstants.GENERATE_OPERATION.equals(businessType)){
@@ -91,7 +94,12 @@ public class PmsMessage {
                 url=systemUrl + "dingding?id="+businessId+"&type="+businessType+"&userId="+userId;
             }
 
-            dingtalkSendApi.send(mobile, msg,"link", url);
+            if (PmsConstants.FAILURE_NO_PASS.equals(businessType)) {
+                //通知设备状态变更为观察使用
+                dingtalkSendApi.send(mobile, msg, "text",url);
+            } else {
+                dingtalkSendApi.send(mobile, msg,"link", url);
+            }
         }
     }
 }

+ 76 - 38
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/failure/IotFailureReportServiceImpl.java

@@ -13,14 +13,18 @@ import cn.iocoder.yudao.module.pms.constant.PmsConstants;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportProcessVO;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonRelationSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.failure.IotFailureReportDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotdeviceperson.IotDevicePersonDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.maintain.IotMaintainDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.IotDeviceMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.failure.IotFailureReportMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.maintain.IotMaintainMapper;
 import cn.iocoder.yudao.module.pms.enums.common.FailureAuditStatusEnum;
 import cn.iocoder.yudao.module.pms.message.PmsMessage;
+import cn.iocoder.yudao.module.pms.service.iotdeviceperson.IotDevicePersonService;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
 import cn.iocoder.yudao.module.system.api.dingtalk.DingtalkSendApi;
@@ -79,53 +83,79 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
     private RoleApi roleApi;
     @Autowired
     private PmsMessage pmsMessage;
+    @Autowired
+    private IotDevicePersonService iotDevicePersonService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void approvalFailureReport(Long id, Integer bpmResult) {
-        if(bpmResult ==2 ){
-            //更新故障上报状态及审核状态
-            IotFailureReportDO failureReportDO = iotFailureReportMapper.selectById(id);
-            failureReportDO.setStatus("trans");//转工单
-            failureReportDO.setAuditStatus(FailureAuditStatusEnum.APPROVE.getStatus());
-            iotFailureReportMapper.insertOrUpdate(failureReportDO);
-            //生成工单
-            IotMaintainDO iotMaintainDO = new IotMaintainDO();
-            BeanUtils.copyProperties(failureReportDO, iotMaintainDO);
-            iotMaintainDO.setStatus("tx");
-            iotMaintainDO.setPic(null);
-            //iotMaintainDO.setAuditStatus(0);
-            iotMaintainDO.setAuditStatus(null);
-            iotMaintainDO.setMaintainType("故障上报");
-            iotMaintainDO.setMaintainPerson(Objects.isNull(failureReportDO.getAssigneeUserId())? Long.valueOf(failureReportDO.getCreator()) :failureReportDO.getAssigneeUserId());
-            AdminUserRespDTO apiUser = adminUserApi.getUser(iotMaintainDO.getMaintainPerson());
-            if (Objects.isNull(apiUser)) {
-                throw new ServiceException(new ErrorCode(11,"责任人不存在"));
-            }
-            iotMaintainDO.setMaintainPersonName(apiUser.getNickname());
-            iotMaintainDO.setFailureId(failureReportDO.getId());
-            iotMaintainDO.setId(null);
-            iotMaintainDO.setOutFile("[]");
-            iotMaintainMapper.insert(iotMaintainDO);
-            //发送消息
-            Map<String, Object> templateParams = new HashMap<>();
-            templateParams.put("name", iotMaintainDO.getDeviceName());
-            templateParams.put("businessType", PmsConstants.GENERATE_MAINTAIN);
-            templateParams.put("businessId", iotMaintainDO.getId());
-            AdminUserRespDTO user = adminUserApi.getUser(Objects.isNull(failureReportDO.getAssigneeUserId()) ? Long.valueOf(failureReportDO.getCreator()) : failureReportDO.getAssigneeUserId());
+        IotFailureReportDO failureReportDO = iotFailureReportMapper.selectById(id);
+        if (Objects.nonNull(failureReportDO.getAssigneeUserId())) {
+            if(bpmResult ==2 ){
+                //更新故障上报状态及审核状态
+                failureReportDO.setStatus("trans");//转工单
+                failureReportDO.setAuditStatus(FailureAuditStatusEnum.APPROVE.getStatus());
+                iotFailureReportMapper.insertOrUpdate(failureReportDO);
+                //生成工单
+                IotMaintainDO iotMaintainDO = new IotMaintainDO();
+                BeanUtils.copyProperties(failureReportDO, iotMaintainDO);
+                iotMaintainDO.setStatus("tx");
+                iotMaintainDO.setPic(null);
+                //iotMaintainDO.setAuditStatus(0);
+                iotMaintainDO.setAuditStatus(null);
+                iotMaintainDO.setMaintainType("故障上报");
+                iotMaintainDO.setMaintainPerson(Objects.isNull(failureReportDO.getAssigneeUserId())? Long.valueOf(failureReportDO.getCreator()) :failureReportDO.getAssigneeUserId());
+                AdminUserRespDTO apiUser = adminUserApi.getUser(iotMaintainDO.getMaintainPerson());
+                if (Objects.isNull(apiUser)) {
+                    throw new ServiceException(new ErrorCode(11,"责任人不存在"));
+                }
+                iotMaintainDO.setMaintainPersonName(apiUser.getNickname());
+                iotMaintainDO.setFailureId(failureReportDO.getId());
+                iotMaintainDO.setId(null);
+                iotMaintainDO.setOutFile("[]");
+                iotMaintainMapper.insert(iotMaintainDO);
+                //发送消息
+                Map<String, Object> templateParams = new HashMap<>();
+                templateParams.put("name", iotMaintainDO.getDeviceName());
+                templateParams.put("businessType", PmsConstants.GENERATE_MAINTAIN);
+                templateParams.put("businessId", iotMaintainDO.getId());
+                AdminUserRespDTO user = adminUserApi.getUser(Objects.isNull(failureReportDO.getAssigneeUserId()) ? Long.valueOf(failureReportDO.getCreator()) : failureReportDO.getAssigneeUserId());
 //            notifyMessageSendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
 //                    .setUserId(failureReportDO.getAssigneeUserId()).setTemplateCode(PmsConstants.GENERATE_MAINTAIN).setTemplateParams(templateParams));
-            if (Objects.nonNull(user)) {
-                pmsMessage.sendMessage(iotMaintainDO.getId(), iotMaintainDO.getDeviceName(), PmsConstants.GENERATE_MAINTAIN, failureReportDO.getAssigneeUserId(), user.getMobile());
+                if (Objects.nonNull(user)) {
+                    if (Objects.nonNull(failureReportDO.getAssigneeUserId())) {
+                        pmsMessage.sendMessage(iotMaintainDO.getId(), iotMaintainDO.getDeviceName(), PmsConstants.GENERATE_MAINTAIN, failureReportDO.getAssigneeUserId(), user.getMobile());
+                    }
+                }
+            } else if (bpmResult ==3 ) {
+                //更新故障上报状态及审核状态
+                failureReportDO.setStatus("close");//关闭
+                failureReportDO.setAuditStatus(FailureAuditStatusEnum.REJECT.getStatus());
+                iotFailureReportMapper.insertOrUpdate(failureReportDO);
             }
-        } else if (bpmResult ==3 ) {
-            //更新故障上报状态及审核状态
-            IotFailureReportDO failureReportDO = iotFailureReportMapper.selectById(id);
+        } else {
+            //最终节点为否的情况下
+            //首先更新故障上报的状态
             failureReportDO.setStatus("close");//关闭
-            failureReportDO.setAuditStatus(FailureAuditStatusEnum.REJECT.getStatus());
+            failureReportDO.setAuditStatus(FailureAuditStatusEnum.APPROVE.getStatus());
             iotFailureReportMapper.insertOrUpdate(failureReportDO);
+            //更新设备状态为观察使用
+            Long deviceId = failureReportDO.getDeviceId();
+            IotDevicePersonRelationSaveReqVO statusVo = new IotDevicePersonRelationSaveReqVO();
+            statusVo.setDeviceId(deviceId);
+            statusVo.setStatus("gcsy");
+            statusVo.setReason("没有生成维修工单,设备状态调整为观察使用");
+            iotDevicePersonService.saveDeviceStatuses(ImmutableList.of(statusVo));
+            IotDevicePersonPageReqVO pageReqVO = new IotDevicePersonPageReqVO();
+            pageReqVO.setDeviceIds(ImmutableList.of(deviceId));
+            List<IotDevicePersonDO> persons = iotDevicePersonService.getPersonsByDeviceIds(pageReqVO);
+            persons.forEach(e ->{
+                AdminUserRespDTO userApiUser = adminUserApi.getUser(e.getPersonId());
+                if (Objects.nonNull(userApiUser)) {
+                    pmsMessage.sendMessage(failureReportDO.getId(), failureReportDO.getDeviceCode()+failureReportDO.getDeviceName(), PmsConstants.FAILURE_NO_PASS, e.getPersonId(), userApiUser.getMobile());
+                }
+            });
         }
-
     }
 
 
@@ -142,8 +172,10 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
             approvalIds.add(Long.parseLong(s));
         }
         assigness.put("failure_approval", approvalIds);
+        Map<String, Object> variable = new HashMap<>();
+        variable.put("continue", "0");
         String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(),
-                new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY).setBusinessKey(String.valueOf(id)).setStartUserSelectAssignees(assigness));
+                new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY).setBusinessKey(String.valueOf(id)).setStartUserSelectAssignees(assigness).setVariables(variable));
         // 将流程实例id 更新到 供应商主数据表
         iotFailureReportMapper.updateById(new IotFailureReportDO().setId(id).setProcessInstanceId(processInstanceId).setAuditStatus(FailureAuditStatusEnum.PROCESS.getStatus()));
         return processInstanceId;
@@ -211,6 +243,12 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
         reportDO.setAssigneeUserId(processVO.getAssigneeUserId());
         reportDO.setType(processVO.getType());
         iotFailureReportMapper.insertOrUpdate(reportDO);
+        //修改设备状态为待维修
+        IotDevicePersonRelationSaveReqVO statusVo = new IotDevicePersonRelationSaveReqVO();
+        statusVo.setDeviceId(reportDO.getDeviceId());
+        statusVo.setStatus("dwx");
+        statusVo.setReason("生成维修工单,设备状态为待维修");
+        iotDevicePersonService.saveDeviceStatuses(ImmutableList.of(statusVo));
         //sendMessage(reportDO);
         return reportDO.getId();
     }