lipenghui 4 сар өмнө
parent
commit
765e808286

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

@@ -93,4 +93,11 @@ public class IotFailureReportController {
                         BeanUtils.toBean(list, IotFailureReportRespVO.class));
     }
 
+    @PutMapping("/submitForApproval")
+    @Operation(summary = "提交审核")
+    @PreAuthorize("@ss.hasPermission('supplier:base:create')")
+    public CommonResult<Boolean> submitForApproval(@RequestParam("id") Long id) {
+        iotFailureReportService.submitForApproval(id);
+        return success(true);
+    }
 }

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/failure/vo/IotFailureReportSaveReqVO.java

@@ -27,7 +27,7 @@ public class IotFailureReportSaveReqVO {
     private Long deviceId;
 
     @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotEmpty(message = "状态不能为空")
+    //@NotEmpty(message = "状态不能为空")
     private String status;
 
     @Schema(description = "是否停机")

+ 4 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/failure/IotFailureReportDO.java

@@ -88,5 +88,9 @@ public class IotFailureReportDO extends BaseDO {
      * 备注
      */
     private String remark;
+    /**
+     * 工作流编号
+     */
+    private String processInstanceId;
 
 }

+ 5 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/failure/IotFailureReportService.java

@@ -14,7 +14,11 @@ import cn.iocoder.yudao.module.pms.dal.dataobject.failure.IotFailureReportDO;
  * @author 芋道源码
  */
 public interface IotFailureReportService {
-
+    /**
+     * 提交供应商数据审核
+     *
+     */
+    Long submitForApproval(Long id);
     /**
      * 创建故障上报
      *

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

@@ -2,18 +2,33 @@ package cn.iocoder.yudao.module.pms.service.failure;
 
 import cn.hutool.core.date.DateUtil;
 import cn.iocoder.yudao.framework.common.exception.ServiceException;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
+import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportSaveReqVO;
 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.mysql.IotDeviceMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.failure.IotFailureReportMapper;
+import cn.iocoder.yudao.module.supplier.dal.dataobject.product.SupplierDO;
+import cn.iocoder.yudao.module.supplier.enums.common.SupplierAuditStatusEnum;
+import cn.iocoder.yudao.module.system.api.dingtalk.DingtalkSendApi;
+import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
+import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
+
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@@ -30,11 +45,36 @@ import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_FAILURE_RE
 @Service
 @Validated
 public class IotFailureReportServiceImpl implements IotFailureReportService {
-
+    public static final String PROCESS_KEY = "failure-report";
     @Resource
     private IotFailureReportMapper iotFailureReportMapper;
     @Resource
     private IotDeviceMapper iotDeviceMapper;
+    @Resource
+    private NotifyMessageSendApi notifyMessageSendApi;
+    @Resource
+    private DeptService deptService;
+    @Resource
+    private AdminUserMapper adminUserMapper;
+    @Resource
+    private DingtalkSendApi dingtalkSendApi;
+    @Resource
+    private BpmProcessInstanceApi processInstanceApi;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long submitForApproval(Long id) {
+        IotFailureReportDO iotFailureReportDO = iotFailureReportMapper.selectById(id);
+        if (Objects.isNull(iotFailureReportDO)) {throw new ServiceException(IOT_FAILURE_REPORT_NOT_EXISTS);}
+        // 发起BPM流程
+        // 获取当前登录人信息
+        String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(),
+                new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY).setBusinessKey(String.valueOf(id)));
+        // 将流程实例id 更新到 供应商主数据表
+        iotFailureReportMapper.updateById(new IotFailureReportDO().setId(id).setProcessInstanceId(processInstanceId)
+                .setStatus("转工单"));
+        return 0l;
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -49,6 +89,24 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
         iotFailureReport.setFailureName(iotDeviceDO.getDeviceName()+DateUtil.format(new Date(), "yyyyMMddHHmmss"));
         iotFailureReport.setDeviceName(iotDeviceDO.getDeviceName());
         iotFailureReport.setDeleted(false);
+        if (iotFailureReport.getIfDeal()) {
+            iotFailureReport.setStatus("finished");
+            //todo 发送站内信及钉钉
+            Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
+            DeptDO dept = deptService.getDept(loginUserDeptId);
+            List<AdminUserDO> users = adminUserMapper.selectListByDept(dept.getParentId());
+            String templateCode = "failure-report"; // 站内信模版,记得在【站内信管理】中配置噢
+            Map<String, Object> templateParams = new HashMap<>();
+            templateParams.put("name", iotFailureReport.getDeviceName());
+            CompletableFuture.runAsync(() -> users.forEach(e ->{
+                notifyMessageSendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
+                        .setUserId(e.getId()).setTemplateCode(templateCode).setTemplateParams(templateParams));
+                String msg = "【PMS】故障上报 - "+iotFailureReport.getFailureName()+"故障已解决。"+"["+new Date()+"]";
+                dingtalkSendApi.send(e.getMobile(), msg);
+            }));
+        } else {
+            iotFailureReport.setStatus("reporting");
+        }
         iotFailureReportMapper.insert(iotFailureReport);
         // 返回
         return iotFailureReport.getId();

+ 5 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.system.dal.mysql.user;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
@@ -47,5 +48,8 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
     default List<AdminUserDO> selectListByDeptIds(Collection<Long> deptIds) {
         return selectList(AdminUserDO::getDeptId, deptIds);
     }
-
+    @DataPermission(enable = false)
+    default List<AdminUserDO> selectListByDept(Long deptId) {
+        return selectList(AdminUserDO::getDeptId, deptId);
+    }
 }