소스 검색

维修工单后端调整

lipenghui 4 달 전
부모
커밋
83246b0938
10개의 변경된 파일145개의 추가작업 그리고 45개의 파일을 삭제
  1. 2 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/material/vo/IotMaintainMaterialPageReqVO.java
  2. 2 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/material/vo/IotMaintainMaterialRespVO.java
  3. 2 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/material/vo/IotMaintainMaterialSaveReqVO.java
  4. 14 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/vo/IotMaintainPageReqVO.java
  5. 13 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/vo/IotMaintainRespVO.java
  6. 17 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/vo/IotMaintainSaveReqVO.java
  7. 14 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/maintain/IotMaintainDO.java
  8. 2 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/maintain/material/IotMaintainMaterialDO.java
  9. 38 29
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/failure/IotFailureReportServiceImpl.java
  10. 41 8
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/maintain/IotMaintainServiceImpl.java

+ 2 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/material/vo/IotMaintainMaterialPageReqVO.java

@@ -32,10 +32,10 @@ public class IotMaintainMaterialPageReqVO extends PageParam {
     private String sourceType;
 
     @Schema(description = "消耗数量", example = "30700")
-    private Integer depleteCount;
+    private BigDecimal depleteCount;
 
     @Schema(description = "总库存数量", example = "5934")
-    private Integer totalCount;
+    private BigDecimal totalCount;
 
     @Schema(description = "SAP系统中的物料唯一编号")
     private String sapCode;

+ 2 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/material/vo/IotMaintainMaterialRespVO.java

@@ -39,11 +39,11 @@ public class IotMaintainMaterialRespVO {
 
     @Schema(description = "消耗数量", example = "30700")
     @ExcelProperty("消耗数量")
-    private Integer depleteCount;
+    private BigDecimal depleteCount;
 
     @Schema(description = "总库存数量", example = "5934")
     @ExcelProperty("总库存数量")
-    private Integer totalCount;
+    private BigDecimal totalCount;
 
     @Schema(description = "SAP系统中的物料唯一编号")
     @ExcelProperty("SAP系统中的物料唯一编号")

+ 2 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/material/vo/IotMaintainMaterialSaveReqVO.java

@@ -29,10 +29,10 @@ public class IotMaintainMaterialSaveReqVO {
     private String sourceType;
 
     //@Schema(description = "消耗数量", example = "30700")
-    private Integer depleteCount;
+    private BigDecimal depleteCount;
 
     //@Schema(description = "总库存数量", example = "5934")
-    private Integer totalCount;
+    private BigDecimal totalCount;
 
     //@Schema(description = "SAP系统中的物料唯一编号")
     private String sapCode;

+ 14 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/vo/IotMaintainPageReqVO.java

@@ -4,6 +4,8 @@ import lombok.*;
 import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -75,4 +77,16 @@ public class IotMaintainPageReqVO extends PageParam {
     @Schema(description = "部门id", example = "27456")
     private Long deptId;
     private String type;
+    /**
+     * 维修费用
+     */
+    private BigDecimal maintainFee;
+    /**
+     * 供应商
+     */
+    private Long supplier;
+    /**
+     * 委外附件
+     */
+    private String outFile;
 }

+ 13 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/vo/IotMaintainRespVO.java

@@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.pms.dal.dataobject.maintain.material.IotMaintainM
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -103,4 +104,16 @@ public class IotMaintainRespVO {
     @Schema(description = "工单物料")
     private List<IotMaintainMaterialDO> maintainMaterialDOS;
     private String type;
+    /**
+     * 维修费用
+     */
+    private BigDecimal maintainFee;
+    /**
+     * 供应商
+     */
+    private Long supplier;
+    /**
+     * 委外附件
+     */
+    private String outFile;
 }

+ 17 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/maintain/vo/IotMaintainSaveReqVO.java

@@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
 import javax.validation.constraints.*;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 //@Schema(description = "管理后台 - 维修工单新增/修改 Request VO")
@@ -78,4 +79,20 @@ public class IotMaintainSaveReqVO {
     //@Schema(description = "维修负责人")
 //    @NotEmpty(message = "维修负责人不能为空")
     private String maintainPerson;
+    /**
+     * 维修费用
+     */
+    private BigDecimal maintainFee;
+    /**
+     * 供应商
+     */
+    private Long supplier;
+    /**
+     * 委外附件
+     */
+    private String outFile;
+    /**
+     * 类型
+     */
+    private String type;
 }

+ 14 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/maintain/IotMaintainDO.java

@@ -1,6 +1,8 @@
 package cn.iocoder.yudao.module.pms.dal.dataobject.maintain;
 
 import lombok.*;
+
+import java.math.BigDecimal;
 import java.util.*;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
@@ -119,4 +121,16 @@ public class IotMaintainDO extends BaseDO {
      * 维修负责人
      */
     private Long maintainPerson;
+    /**
+     * 维修费用
+     */
+    private BigDecimal maintainFee;
+    /**
+     * 供应商
+     */
+    private Long supplier;
+    /**
+     * 委外附件
+     */
+    private String outFile;
 }

+ 2 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/maintain/material/IotMaintainMaterialDO.java

@@ -51,11 +51,11 @@ public class IotMaintainMaterialDO extends BaseDO {
     /**
      * 消耗数量
      */
-    private Integer depleteCount;
+    private BigDecimal depleteCount;
     /**
      * 总库存数量
      */
-    private Integer totalCount;
+    private BigDecimal totalCount;
     /**
      * SAP系统中的物料唯一编号
      */

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

@@ -2,6 +2,8 @@ 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.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 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;
@@ -15,8 +17,6 @@ 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.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;
@@ -24,23 +24,16 @@ import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 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.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
 
+import javax.annotation.Resource;
 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;
-
-
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_FAILURE_REPORT_NOT_EXISTS;
 
@@ -83,7 +76,7 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
         BeanUtils.copyProperties(failureReportDO, iotMaintainDO);
         iotMaintainDO.setStatus("tx");
         iotMaintainDO.setAuditStatus(0);
-        iotMaintainDO.setMaintainPerson(failureReportDO.getAssigneeUserId());
+        iotMaintainDO.setMaintainPerson(Objects.isNull(failureReportDO.getAssigneeUserId())? Long.valueOf(failureReportDO.getCreator()) :failureReportDO.getAssigneeUserId());
         iotMaintainDO.setFailureId(failureReportDO.getId());
         iotMaintainMapper.insert(iotMaintainDO);
     }
@@ -91,8 +84,8 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
     @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);}
+//        IotFailureReportDO iotFailureReportDO = iotFailureReportMapper.selectById(id);
+//        if (Objects.isNull(iotFailureReportDO)) {throw new ServiceException(IOT_FAILURE_REPORT_NOT_EXISTS);}
         // 发起BPM流程
         // 获取当前登录人信息
         String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(),
@@ -117,34 +110,50 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
         iotFailureReport.setDeleted(false);
         if (iotFailureReport.getIfDeal()) {
             iotFailureReport.setStatus("finished");
-            //todo 发送站内信及钉钉
-            Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
-            DeptDO dept = deptService.getDept(loginUserDeptId);
-            List<AdminUserRespDTO> users = adminUserApi.getUserListByDept(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);
-            }));
+            iotFailureReportMapper.insert(iotFailureReport);
+            sendMessage(iotFailureReport);
         } else {
             iotFailureReport.setStatus("reporting");
-            iotFailureReport.setAuditStatus(FailureAuditStatusEnum.DRAFT.getStatus());
+            iotFailureReport.setAuditStatus(FailureAuditStatusEnum.PROCESS.getStatus());
+            iotFailureReportMapper.insert(iotFailureReport);
+            //直接发起流程
+            submitForApproval(iotFailureReport.getId());
+            sendMessage(iotFailureReport);
         }
-        iotFailureReportMapper.insert(iotFailureReport);
         // 返回
         return iotFailureReport.getId();
     }
 
+    private void sendMessage(IotFailureReportDO iotFailureReport) {
+        Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
+        DeptDO dept = deptService.getDept(loginUserDeptId);
+        DeptDO parentDept = deptService.getDept(dept.getParentId());
+        String templateCode = "failure-report"; // 站内信模版,记得在【站内信管理】中配置噢
+        Map<String, Object> templateParams = new HashMap<>();
+        templateParams.put("name", iotFailureReport.getDeviceName());
+        CompletableFuture.runAsync(() ->{
+            if (Objects.nonNull(parentDept.getLeaderUserId())){
+//                parentDept.getLeaderUserId().forEach(e ->{
+                notifyMessageSendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
+                        .setUserId(parentDept.getLeaderUserId()).setTemplateCode(templateCode).setTemplateParams(templateParams));
+                String msg = "【PMS】故障上报 - "+iotFailureReport.getFailureName()+"故障已解决。"+"["+new Date()+"]";
+                AdminUserRespDTO user = adminUserApi.getUser(parentDept.getParentId());
+                if (Objects.nonNull(user)) {
+                    dingtalkSendApi.send(user.getMobile(), msg);
+                }
+//                })
+            }
+
+        });
+    }
+
     @Override
     public Long updateIotFailureReportProcess(IotFailureReportProcessVO processVO) {
         IotFailureReportDO reportDO = iotFailureReportMapper.selectById(processVO.getId());
         reportDO.setAssigneeUserId(processVO.getAssigneeUserId());
         reportDO.setType(processVO.getType());
         iotFailureReportMapper.insertOrUpdate(reportDO);
+        sendMessage(reportDO);
         return reportDO.getId();
     }
 

+ 41 - 8
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/maintain/IotMaintainServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.maintain.material.vo.IotMaintainMaterialSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainSaveReqVO;
@@ -21,6 +22,13 @@ import cn.iocoder.yudao.module.pms.dal.mysql.iotlockstock.IotLockStockMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotoutbound.IotOutboundMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.maintain.IotMaintainMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.maintain.material.IotMaintainMaterialMapper;
+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.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
 import com.google.common.collect.ImmutableMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,9 +38,7 @@ import org.springframework.validation.annotation.Validated;
 import javax.annotation.Resource;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
@@ -59,6 +65,14 @@ public class IotMaintainServiceImpl implements IotMaintainService {
     private IotOutboundMapper iotOutboundMapper;
     @Autowired
     private IotFailureReportMapper iotFailureReportMapper;
+    @Resource
+    private DeptService deptService;
+    @Resource
+    private AdminUserApi adminUserApi;
+    @Resource
+    private DingtalkSendApi dingtalkSendApi;
+    @Resource
+    private NotifyMessageSendApi notifyMessageSendApi;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -95,7 +109,7 @@ public class IotMaintainServiceImpl implements IotMaintainService {
 
         List<IotMaintainMaterialSaveReqVO> maintainMaterials = updateReqVO.getMaintainMaterials();
         //删除工单物料
-        iotMaintainMaterialMapper.deleteByMap(ImmutableMap.of("maintainId", updateObj.getId()));
+        iotMaintainMaterialMapper.deleteByMap(ImmutableMap.of("maintain_id", updateObj.getId()));
         //插入工单物料
         List<IotMaintainMaterialDO> collect = maintainMaterials.stream().map(e -> {
             IotMaintainMaterialDO bean = BeanUtils.toBean(e, IotMaintainMaterialDO.class);
@@ -126,13 +140,12 @@ public class IotMaintainServiceImpl implements IotMaintainService {
                     if (CollUtil.isNotEmpty(stockDOS)) {
                         IotLockStockDO iotLockStockDO = stockDOS.get(0);
                         BigDecimal quantity = iotLockStockDO.getQuantity();
-                        BigDecimal subtract = quantity.subtract(BigDecimal.valueOf(e.getDepleteCount()));
+                        BigDecimal subtract = quantity.subtract(e.getDepleteCount());
                         if (subtract.compareTo(BigDecimal.ZERO) < 0){
                             throw new ServiceException(IOT_LOCK_STOCK_FUSHU);
                         }
                         iotLockStockDO.setQuantity(subtract);
                         iotLockStockMapper.updateById(iotLockStockDO);
-                        //todo 安全库存提醒?
                     }
                 }
                 //记录出库
@@ -159,13 +172,33 @@ public class IotMaintainServiceImpl implements IotMaintainService {
                 iotFailureReportMapper.updateById(iotFailureReportDO);
             }
         }
-        //todo 异步消息通知逻辑
         CompletableFuture.runAsync(()->{
-
+            sendMessage(BeanUtils.toBean(iotMaintain, IotMaintainDO.class));
         });
     }
 
 
+    private void sendMessage(IotMaintainDO iotMaintainDO) {
+        Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
+        DeptDO dept = deptService.getDept(loginUserDeptId);
+        DeptDO parentDept = deptService.getDept(dept.getParentId());
+        String templateCode = "maintain-report";
+        Map<String, Object> templateParams = new HashMap<>();
+        templateParams.put("name", iotMaintainDO.getDeviceName());
+        CompletableFuture.runAsync(() ->{
+            if (Objects.nonNull(parentDept.getLeaderUserId())){
+                notifyMessageSendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
+                        .setUserId(parentDept.getLeaderUserId()).setTemplateCode(templateCode).setTemplateParams(templateParams));
+                String msg = "【PMS】维修工单 - "+iotMaintainDO.getFailureName()+"已处理。"+"["+new Date()+"]";
+                AdminUserRespDTO user = adminUserApi.getUser(parentDept.getParentId());
+                if (Objects.nonNull(user)) {
+                    dingtalkSendApi.send(user.getMobile(), msg);
+                }
+            }
+
+        });
+    }
+
     @Override
     public void deleteIotMaintain(Long id) {
         // 校验存在