Переглянути джерело

Merge remote-tracking branch 'origin/mode-min-unit' into mode-min-unit

xiahan 9 місяців тому
батько
коміт
219ed6ac63
21 змінених файлів з 1355 додано та 61 видалено
  1. 74 22
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java
  2. 102 17
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationProcessEquServiceImpl.java
  3. 54 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/GanttServiceImpl.java
  4. 2 2
      cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml
  5. 9 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ScheduleGanttVo.java
  6. 16 4
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/config/EquForkliftRepairRecordListener.java
  7. 24 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquMaintenanceOrderDao.java
  8. 1 1
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquMaintenancePredictivePlanDao.java
  9. 65 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquMaintenanceReportDao.java
  10. 21 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquipmentDisposeDao.java
  11. 3 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquMaintenanceOrderService.java
  12. 12 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquMaintenanceReportService.java
  13. 5 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquipmentArchivesService.java
  14. 30 10
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquForkliftRepairRecordServiceImpl.java
  15. 53 4
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquMaintenanceOrderServiceImpl.java
  16. 73 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquMaintenanceReportServiceImpl.java
  17. 129 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquipmentArchivesServiceImpl.java
  18. 1 1
      cx-equipment/cx-equipment-common/src/main/resources/mybatis/business/EquMaintenancePredictivePlanDao.xml
  19. 369 0
      cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/domain/EquDisposalRequestDo.java
  20. 249 0
      cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/domain/EquMaintenanceReportDo.java
  21. 63 0
      cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/SendEmailController.java

+ 74 - 22
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

@@ -47,7 +47,6 @@ import java.util.stream.Collectors;
 import static com.rongwei.bscommon.sys.service.impl.ApsProductionOrderServiceImpl.ERROR_MSG;
 import static com.rongwei.bscommon.sys.utils.ApsUtils.addNewConflictsDesc;
 import static com.rongwei.bscommon.sys.utils.ApsUtils.removeConflictsDesc;
-import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.EQUIPMENT_RUN_TIME;
 import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.EXCEEDING_THE_PROMISED_DELIVERY_DEADLINE;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_N;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_Y;
@@ -2600,7 +2599,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
      *
      * @return
      */
-    public void updateBlankDeliveryDate(ApsBlankOrderDo apsBlankOrderDo, String id) {
+    public List<String> updateBlankDeliveryDate(ApsBlankOrderDo apsBlankOrderDo, String id) {
         if (apsBlankOrderDo == null) {
             apsBlankOrderDo = this.getById(id);
         }
@@ -2611,8 +2610,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         logger.debug("开始更新坯料计划:{}对应的交货期没", apsBlankOrderDo.getId());
         List<UpdateBlankDeliveryDateVo> blankDeliveryDate = this.getBaseMapper().getBlankDeliveryDate(apsBlankOrderDo.getId());
         logger.debug("获取当前坯料计划的相关的计划完工时间:{}", blankDeliveryDate);
+        List<String> aboutIds = removeOtherConflictdes(apsBlankOrderDo.getId(), blankDeliveryDate.stream().map(UpdateBlankDeliveryDateVo::getId).collect(Collectors.toList()));
         if (blankDeliveryDate.isEmpty()) {
-            return;
+            return aboutIds;
         }
         if (blankDeliveryDate.size() == 1) {
             blankDeliveryDate.add(blankDeliveryDate.get(0));
@@ -2693,8 +2693,46 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 apsProcessOperationProcessEquService.updateBatchById(equDos);
             }
         }
+        return aboutIds;
 
+    }
 
+    /**
+     * 根據坯料計劃ID 刪除工序作業明細的 超出承諾交貨期衝突
+     *
+     * @param blankId
+     * @param operationId
+     */
+    public List<String> removeOtherConflictdes(String blankId, List<String> operationId) {
+        if (StringUtils.isBlank(blankId)) {
+            return new ArrayList<>();
+        }
+        List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+                .eq(ApsProcessOperationProcessEquDo::getBlankid, blankId)
+                .notIn(operationId == null && operationId.size() > 0, ApsProcessOperationProcessEquDo::getId, operationId)
+                .like(ApsProcessOperationProcessEquDo::getConflictdes, EXCEEDING_THE_PROMISED_DELIVERY_DEADLINE));
+
+        List<ApsProcessOperationProcessEquDo> updates = new ArrayList<>();
+        ApsProcessOperationProcessEquDo updateDo;
+        for (ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo : list) {
+            updateDo = new ApsProcessOperationProcessEquDo();
+            apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                    "", EXCEEDING_THE_PROMISED_DELIVERY_DEADLINE, 2, null);
+
+            updateDo.setConflictdes(removeConflictsDesc(apsProcessOperationProcessEquDo.getConflictdes(), EXCEEDING_THE_PROMISED_DELIVERY_DEADLINE));
+            if (StringUtils.isBlank(updateDo.getConflictdes()) && StringUtils.isBlank(apsProcessOperationProcessEquDo.getSoftconflictdes())) {
+                updateDo.setHasconflict("n");
+            } else {
+                updateDo.setHasconflict("y");
+            }
+            updateDo.setId(apsProcessOperationProcessEquDo.getId());
+            updateDo.setModifydate(new Date());
+            updates.add(updateDo);
+        }
+        if (!updates.isEmpty()) {
+            apsProcessOperationProcessEquService.updateBatchById(updates);
+        }
+        return updates.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList());
     }
 
     public Date timeAddHour(Date date, int hour) {
@@ -3361,7 +3399,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
         //线下批次号
         List<String> offLineBatchNumberList = new LinkedList<>();
-        //线上批次号 卷重不同集合
+        //线上批次号 不匹配提示
         List<String> onLineBatchNumberWarnList = new LinkedList<>();
 
         /**
@@ -3426,26 +3464,38 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
             }
 
-            //查找该批次号物料=在制品的作业输出物料ID对应输出物料
-            //如果{该批次号物料的输入物料描述}与{坯料的输入物料描述}不相同,或者坯料类型不等于坯料计划的坯料类型
-            //错误提示:该批次号{批次号}物料:{该批次号物料的输入物料描述}不是该坯料计划所需的坯料{坯料的输入物料描述}
-            String s1 = apsWorkInProgressInventoryDo.getJoboutputmaterial();
-            String s2 = apsBlankOrderDo.getInputreportdescribe();
-            if (!s1.equals(s2)) {
-                return R.error("该批次号" + s + "物料:" + s1 + "不是该坯料计划所需的坯料" + s2 + "");
-            }
+//            //查找该批次号物料=在制品的作业输出物料ID对应输出物料
+//            //如果{该批次号物料的输入物料描述}与{坯料的输入物料描述}不相同,或者坯料类型不等于坯料计划的坯料类型
+//            //错误提示:该批次号{批次号}物料:{该批次号物料的输入物料描述}不是该坯料计划所需的坯料{坯料的输入物料描述}
+//            String s1 = apsWorkInProgressInventoryDo.getJoboutputmaterial();
+//            String s2 = apsBlankOrderDo.getInputreportdescribe();
+//            if (!s1.equals(s2)) {
+//                return R.error("该批次号" + s + "物料:" + s1 + "不是该坯料计划所需的坯料" + s2 + "");
+//            }
 
-            //如果在制品的坯料类型不等于坯料计划的坯料类型,
-            // 则错误提示:该批次号{批次号}物料:{在制品的作业输出物料}不是该坯料计划所需的坯料类型
-            if (!apsWorkInProgressInventoryDo.getBlanktype().equals(apsBlankOrderDo.getBlanktype())) {
-                return R.error("该批次号" + s + "物料:" + s1 + "不是该坯料计划所需的坯料类型");
+            /*
+            如果“{在制品的坯料类型} {在制品的作业输出物料} {在制品的计划输出卷重}吨”
+            与“{坯料计划的坯料类型} {坯料输入物料描述} {坯料的卷重}吨”不相同,
+            则提示确认:该批次号{批次号}物料:
+            “{在制品的坯料类型} {在制品的作业输出物料} {在制品的计划输出卷重}吨”与该坯料计划所需的坯料“{坯料计划的坯料类型} {坯料输入物料描述} {坯料的卷重}吨”不相同,确认领料吗?
+             */
+            String a = apsWorkInProgressInventoryDo.getBlanktype() + " " + apsWorkInProgressInventoryDo.getJoboutputmaterial() + " " + CXCommonUtils.removeExtraZerosAndDecimal(apsWorkInProgressInventoryDo.getPlansinglerollweight()) + "吨";
+            String b = apsBlankOrderDo.getBlanktype() + " " + apsBlankOrderDo.getInputreportdescribe() + " " + CXCommonUtils.removeExtraZerosAndDecimal(apsBlankOrderDo.getSinglerollweight()) + "吨";
+            if (!a.equals(b)) {
+                onLineBatchNumberWarnList.add("该批次号" + s + "物料:'" + a + "'与该坯料计划所需的坯料:'" + b + "'不相同,确认领料吗?");
             }
 
-            //如果在制品的计划输出卷重不等于坯料的卷重,
-            // 提示确认:批次号{批次号1,批次号2}物料卷重与坯料需求的卷重不同,确认领料吗?
-            if (!apsWorkInProgressInventoryDo.getPlansinglerollweight().equals(apsBlankOrderDo.getSinglerollweight())) {
-                onLineBatchNumberWarnList.add(s);
-            }
+//            //如果在制品的坯料类型不等于坯料计划的坯料类型,
+//            // 则错误提示:该批次号{批次号}物料:{在制品的作业输出物料}不是该坯料计划所需的坯料类型
+//            if (!apsWorkInProgressInventoryDo.getBlanktype().equals(apsBlankOrderDo.getBlanktype())) {
+//                return R.error("该批次号" + s + "物料:" + s1 + "不是该坯料计划所需的坯料类型");
+//            }
+//
+//            //如果在制品的计划输出卷重不等于坯料的卷重,
+//            // 提示确认:批次号{批次号1,批次号2}物料卷重与坯料需求的卷重不同,确认领料吗?
+//            if (!apsWorkInProgressInventoryDo.getPlansinglerollweight().equals(apsBlankOrderDo.getSinglerollweight())) {
+//                onLineBatchNumberWarnList.add(s);
+//            }
         }
 
         String res = "";
@@ -3453,7 +3503,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             res = "<b>" + String.join(",", offLineBatchNumberList) + "是线下批次号,确认领料吗?</b><br>";
         }
         if (ObjectUtil.isNotEmpty(onLineBatchNumberWarnList)) {
-            res = res + "<b>批次号" + String.join(",", onLineBatchNumberWarnList) + "物料卷重与坯料需求的卷重不同,确认领料吗?</b>";
+            for (String s : onLineBatchNumberWarnList) {
+                res = res + "<b>" + s + "</b>";
+            }
         }
 
         return R.ok(res);

+ 102 - 17
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationProcessEquServiceImpl.java

@@ -71,6 +71,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     private ApsConflictLogServiceImpl apsConflictLogService;
     @Autowired
     private HttpServletRequest httpServletRequest;
+    @Autowired
+    private ApsProcessOperationProcessEquService apsProcessOperationProcessEquService;
 
     /**
      * 更新工序的待加工批次号信息
@@ -474,7 +476,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             updateConflictVoList.forEach(data -> {
                 ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
                 affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
-                        data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay()));
+                        data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay(),returnAboutIds));
                 // 判断是否存在设备不可用
                 inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
                         apsProcessOperationProcessEquDo.getProcessdeviceid(),
@@ -482,12 +484,14 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                         apsProcessOperationProcessEquDo.getPlanenddate());
             });
         }
+        List<String> aboutIds= affectedIdList.stream().distinct().collect(Collectors.toList());
         blankIds.forEach(data -> {
             // 更新坯料交货期
-            apsBlankOrderService.updateBlankDeliveryDate(null, data);
+            aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, data));
         });
+
         // 重新获取甘特图数据并返回前段
-        return R.ok(ganttService.getListById(affectedIdList.stream().distinct().collect(Collectors.toList())));
+        return R.ok(ganttService.getListById(aboutIds));
     }
 
     /**
@@ -544,11 +548,13 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         List<UpdateConflictVo> updateConflictVos = new ArrayList<>();
         Set<String> blankIdSet = new HashSet<>();
         UpdateConflictVo vo;
+        List<String> returnAboutIds = new ArrayList<>();
         for (ChangeStartTimeVo changeStartTimeVo : changeStartTimeVos) {
             vo = new UpdateConflictVo();
             String id = changeStartTimeVo.getId();
             affectedIdList.add(id);
             affectedIdList.addAll(changeStartTimeVo.getReturnAboutIds());
+            returnAboutIds.addAll(changeStartTimeVo.getReturnAboutIds());
             ApsProcessOperationProcessEquDo processEquDo = this.getById(id);
             ApsProcessOperationDo operationDo = apsProcessOperationService.getById(processEquDo.getProcessid());
             if (operationDo == null) {
@@ -587,19 +593,26 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         updateConflictVos.forEach(data -> {
             ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
             affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
-                    data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay()));
+                    data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay(),returnAboutIds));
             // 判断是否存在设备不可用
             inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
                     apsProcessOperationProcessEquDo.getProcessdeviceid(),
                     apsProcessOperationProcessEquDo.getPlanstartdate(),
                     apsProcessOperationProcessEquDo.getPlanenddate());
         });
-        blankIdSet.forEach(blankId -> {
+//        blankIdSet.forEach(blankId -> {
+//            // 更新坯料交货期
+//            apsBlankOrderService.updateBlankDeliveryDate(null, blankId);
+//        });
+//        // 返回受影响的数据
+//        return R.ok(this.ganttService.getListById(affectedIdList.stream().distinct().collect(Collectors.toList())));
+        List<String> aboutIds= affectedIdList.stream().distinct().collect(Collectors.toList());
+        blankIdSet.forEach(data -> {
             // 更新坯料交货期
-            apsBlankOrderService.updateBlankDeliveryDate(null, blankId);
+            aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, data));
         });
         // 返回受影响的数据
-        return R.ok(this.ganttService.getListById(affectedIdList.stream().distinct().collect(Collectors.toList())));
+        return R.ok(ganttService.getListById(aboutIds));
     }
 
     /**
@@ -664,7 +677,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     jobDetailsVo.getPlanStartTime().getTime() - oldPlanstartdate.getTime()));
             // 增加受影响的工序作业信息
             affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo, oldPlanstartdate,
-                    oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway()));
+                    oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway(),null));
         }
 
         // 判断是否存在设备不可用
@@ -673,9 +686,13 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
 
         this.updateById(apsProcessOperationProcessEquDo);
         // 更新坯料交货期
-        apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
+//        apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
+//        affectedIdList.addAll(jobDetailsVo.getReturnAboutIds());
+//        return R.ok(this.ganttService.getListById(affectedIdList));
         affectedIdList.addAll(jobDetailsVo.getReturnAboutIds());
-        return R.ok(this.ganttService.getListById(affectedIdList));
+        List<String> aboutIds= affectedIdList.stream().distinct().collect(Collectors.toList());
+        aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid()));
+        return R.ok(ganttService.getListById(aboutIds));
     }
 
     /**
@@ -803,7 +820,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 // 增加受影响的工序作业信息
                 affectedIdList.addAll(checkProcessingTimeConflict(newDo, currentProcessEquDo.getPlanstartdate(),
                         currentProcessEquDo.getPlanenddate(), currentProcessEquDo.getProcessdeviceid(),
-                        currentProcessOperationDo.getProcessway()));
+                        currentProcessOperationDo.getProcessway(),null));
             } else {
                 /**************************拆分逻辑处理***********************************/
                 newDo.setId(SecurityUtil.getUUID());
@@ -836,7 +853,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 // 增加受影响的工序作业信息
                 affectedIdList.addAll(checkProcessingTimeConflict(newDo, newDo.getPlanstartdate(),
                         newDo.getPlanenddate(), newDo.getProcessdeviceid(),
-                        currentProcessOperationDo.getProcessway()));
+                        currentProcessOperationDo.getProcessway(),null));
                 this.save(newDo);
                 newDataList.add(newDo);
                 /**************************原数据逻辑处理***********************************/
@@ -876,7 +893,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 // 增加受影响的工序作业信息
                 affectedIdList.addAll(checkProcessingTimeConflict(oldDo,
                         currentProcessEquDo.getPlanstartdate(), currentProcessEquDo.getPlanenddate(),
-                        oldDo.getProcessdeviceid(), currentProcessOperationDo.getProcessway()));
+                        oldDo.getProcessdeviceid(), currentProcessOperationDo.getProcessway(),null));
             }
         });
         this.saveOrUpdateBatch(newDataList);
@@ -885,9 +902,10 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             inspectionEquipmentIsAvailable(newDo, newDo.getProcessdeviceid()
                     , newDo.getPlanstartdate(), newDo.getPlanenddate());
         });
+        List<String> aboutIds= affectedIdList.stream().distinct().collect(Collectors.toList());
         apsProcessOperationDos.forEach(data -> {
             // 更新坯料交货期
-            apsBlankOrderService.updateBlankDeliveryDate(null, data.getBlankid());
+            aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, data.getBlankid()));
         });
         // 将工序作业明细ID 加入到上一个工序作业信息的中
         Map<String, List<ApsProcessOperationProcessEquDo>> collect = newDataList.stream().collect(Collectors.groupingBy(ApsProcessOperationProcessEquDo::getPreviousprocessesids));
@@ -901,7 +919,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     .eq(ApsProcessOperationProcessEquDo::getId, k)
                     .set(ApsProcessOperationProcessEquDo::getNextprocessesids, strAppendListConvertStr(apsProcessOperationProcessEquDo.getNextprocessesids(), collect1)));
         });
-        return R.ok(this.ganttService.getListById(affectedIdList.stream().distinct().collect(Collectors.toList())));
+        return R.ok(this.ganttService.getListById(aboutIds));
     }
 
     public void updateBlank(String processOperationId) {
@@ -1103,7 +1121,6 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     apsConflictLogService.recordLog(info.getId(),
                             aboutId, removeConflictsDesc, 2, null);
                 }
-
             }
 
 //            else {
@@ -1114,6 +1131,48 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         this.updateBatchById(beforeUpdatingConflictId);
     }
 
+    /**
+     * 更新设备或者时间之后 更新冲突描述
+     *
+     * @param aboutProcessEquList 工序作业明细影响到的工序作业明细数据
+     * @param removeConflictsDesc      需要被删除的冲突描述
+     */
+    public void updateProcessEquAboutBeforeAddConflictsDesc(List<ApsProcessOperationProcessEquDo> aboutProcessEquList,
+                                                       String removeConflictsDesc, String processway,
+                                                       Date newPlanStartDate,
+                                                       Date newOldEndDate,
+                                                       String aboutId) {
+        if (aboutProcessEquList.isEmpty()) {
+            return;
+        }
+        //删除之前受影响的工序作业明细的‘与加工设备其他作业加工时间重叠’冲突
+        aboutProcessEquList.forEach(info -> {
+            if (StringUtils.isNotBlank(info.getConflictdes())&&info.getConflictdes().contains(removeConflictsDesc)){
+                if (PROCESS_WAY_MERGE.equals(processway)) {
+                    info.setConflictdes(removeConflictsDesc(info.getConflictdes(), removeConflictsDesc));
+                    info.setHasconflict(StringUtils.isBlank(info.getConflictdes()) &&
+                            StringUtils.isBlank(info.getSoftconflictdes()) ?
+                            LOCKMARK_N : LOCKMARK_Y);
+                    info.setModifydate(new Date());
+                    apsConflictLogService.recordLog(info.getId(),
+                            aboutId, removeConflictsDesc, 2, null);
+                } else {
+                    if (newPlanStartDate.compareTo(info.getPlanenddate()) > 0 ||
+                            newOldEndDate.compareTo(info.getPlanstartdate()) < 0) {
+                        info.setConflictdes(removeConflictsDesc(info.getConflictdes(), removeConflictsDesc));
+                        info.setHasconflict(StringUtils.isBlank(info.getConflictdes()) &&
+                                StringUtils.isBlank(info.getSoftconflictdes()) ?
+                                LOCKMARK_N : LOCKMARK_Y);
+                        info.setModifydate(new Date());
+                        apsConflictLogService.recordLog(info.getId(),
+                                aboutId, removeConflictsDesc, 2, null);
+                    }
+                }
+            }
+        });
+        this.updateBatchById(aboutProcessEquList);
+    }
+
 
     /**
      * 更新设备或者时间之后 更新冲突描述
@@ -1198,17 +1257,26 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
      */
     public List<String> checkProcessingTimeConflict(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo,
                                                     Date oldPlanstartdate, Date oldPlanenddate,
-                                                    String oldEquId, String currentProcessWay) {
+                                                    String oldEquId, String currentProcessWay,List<String> returnAboutIds) {
         // 受影响的工序作业Id
         List<String> affectedIdList = new ArrayList<>();
         // 获取更新之前的存在冲突的工序作业
         List<ApsProcessOperationProcessEquDo> beforeUpdatingConflictId = this.baseMapper.getTimeOverlapByEquId(oldEquId,
                 apsProcessOperationProcessEquDo.getId(), oldPlanstartdate, oldPlanenddate, currentProcessWay);
+        List<ApsProcessOperationProcessEquDo> aboutProcessEquList = new ArrayList<>();
+        if (returnAboutIds!= null&&!returnAboutIds.isEmpty()){
+            aboutProcessEquList = (List<ApsProcessOperationProcessEquDo>) apsProcessOperationProcessEquService.listByIds(returnAboutIds);
+        }
         if (!beforeUpdatingConflictId.isEmpty()) {
             affectedIdList.addAll(beforeUpdatingConflictId.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList()));
             updateProcessEquBeforeAddConflictsDesc(beforeUpdatingConflictId, EQ_TIME_CROSS, currentProcessWay,
                     apsProcessOperationProcessEquDo.getPlanstartdate(),
                     apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getId());
+            if (!aboutProcessEquList.isEmpty()){
+                updateProcessEquAboutBeforeAddConflictsDesc(aboutProcessEquList,EQ_TIME_CROSS, currentProcessWay,
+                        apsProcessOperationProcessEquDo.getPlanstartdate(),
+                        apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getId());
+            }
         }
 
         // 找到更新时间之后存在冲突的工序作业
@@ -1239,6 +1307,23 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     .set(ApsProcessOperationProcessEquDo::getHasconflict, apsProcessOperationProcessEquDo.getHasconflict())
                     .set(BaseDo::getModifydate, new Date())
             );
+            if (!aboutProcessEquList.isEmpty()){
+                aboutProcessEquList.forEach(e->{
+                    if (StringUtils.isNotBlank(e.getConflictdes())&&e.getConflictdes().contains(EQ_TIME_CROSS)){
+                        String afterConflictdes = removeConflictsDesc(e.getConflictdes(), EQ_TIME_CROSS);
+                        apsConflictLogService.recordLog(e.getId(),"", EQ_TIME_CROSS, 2, null);
+                        e.setConflictdes(afterConflictdes);
+                        e.setHasconflict(StringUtils.isBlank(e.getConflictdes()) &&
+                                StringUtils.isBlank(e.getSoftconflictdes()) ?
+                                LOCKMARK_N : LOCKMARK_Y);
+                        this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                                .eq(ApsProcessOperationProcessEquDo::getId, e.getId())
+                                .set(ApsProcessOperationProcessEquDo::getConflictdes, newConflictsDesc)
+                                .set(ApsProcessOperationProcessEquDo::getHasconflict, e.getHasconflict())
+                                .set(BaseDo::getModifydate, new Date()));
+                    }
+                });
+            }
         }
         return affectedIdList;
     }

+ 54 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/GanttServiceImpl.java

@@ -384,6 +384,60 @@ public class GanttServiceImpl implements GanttService {
                         data.setOutputnumber(number.split(DEFAULT_SPLIT)[1]);
                     }
                 });
+                Date actualStartDate = null;
+                Date actualFinishDate = null;
+                //查询实际开工时间不为空的列表
+                List<GanttVos> noNullActualDateList = ganttVos.stream()
+                        .filter(g -> g.getActualstartdate() != null)
+                        .collect(Collectors.toList());
+                if (!noNullActualDateList.isEmpty()){
+                    //取出最早实际开工时间
+                    Optional<GanttVos> minDate = noNullActualDateList.stream()
+                            .min(Comparator.comparing(GanttVos::getActualstartdate));
+                    if(minDate.get().getActualstartdate()!= null){
+                        actualStartDate = minDate.get().getActualstartdate();
+                    }
+                }
+                //查询实际完工时间为空的列表
+                List<GanttVos> nullActualFinishDateList = ganttVos.stream().filter(g -> g.getActualfinishdate() == null)
+                        .collect(Collectors.toList());
+                if (nullActualFinishDateList.isEmpty()){
+                    //取出最晚实际完工时间
+                    Optional<GanttVos> maxDate = ganttVos.stream()
+                            .max(Comparator.comparing(GanttVos::getActualfinishdate));
+                    if(maxDate.isPresent()&&maxDate.get().getActualfinishdate()!= null){
+                        actualFinishDate = maxDate.get().getActualfinishdate();
+                    }
+                }
+                String workstatus = "";
+                Map<String, Integer> keyValueMap = new HashMap<>(16);
+                // 向键值对数组中添加元素
+                keyValueMap.put("待开工", 30);
+                keyValueMap.put("加工中", 40);
+                keyValueMap.put("已完工", 50);
+                //查询出所有不为空的状态列表
+                List<GanttVos> filteredWorkStatus = ganttVos.stream()
+                        .filter(g -> g.getWorkstatus() != null && !g.getWorkstatus().isEmpty())
+                        .collect(Collectors.toList());
+                if (!filteredWorkStatus.isEmpty()){
+                    GanttVos minWorkStatus = (filteredWorkStatus.stream()
+                            .min(Comparator.comparingInt(p -> keyValueMap.get(p.getWorkstatus())))
+                            .orElse(null));
+                    //取出最早实际开工时间
+                    workstatus = minWorkStatus.getWorkstatus();
+                }
+                String finalWorkStatus = workstatus;
+                Date finalActualStartDate = actualStartDate;
+                Date finalActualFinishDate = actualFinishDate;
+                ganttVos.forEach(item -> {
+                    if ("20".equals(item.getProcessstatus())){
+                        item.setGanttprocessstatus(TO_BE_PUBLISHED);
+                    }else {
+                        item.setGanttprocessstatus(GANTT_PROCESS_STATUS_MAP.getOrDefault(finalWorkStatus, ""));
+                    }
+                    item.setActualstartdate(finalActualStartDate);
+                    item.setActualfinishdate(finalActualFinishDate);
+                });
 //                List<String> itemNames = new ArrayList<>();
                 // 按照工序作业明细ID 进行分组 并且获取 图列的 名称和描述
 //                LinkedHashMap<String, List<GanttVos>> collect = ganttVos.stream().collect(Collectors.groupingBy(GanttVos::getId, LinkedHashMap::new, Collectors.toList()));

+ 2 - 2
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -168,8 +168,8 @@
         a2.ID as processid,
         a2.PLANINPUT AS INMATERCONDITION,
         a2.PROCESSSTATUS,
-        a2.ACTUALSTARTDATE,
-        a2.ACTUALFINISHDATE,
+        a1.ACTUALSTARTDATE,
+        a1.ACTUALFINISHDATE,
         a2.PROCESSNAME,
         a2.LOCKMARK,
         a2.PROCESSWAY,

+ 9 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ScheduleGanttVo.java

@@ -135,4 +135,13 @@ public class ScheduleGanttVo {
      * 详细对象
      */
     private List<GanttVos> ganttVos;
+
+    /**
+     * 实际开工时间
+     */
+    private Date actualstartdate;
+    /**
+     * 实际完工时间
+     */
+    private Date actualfinishdate;
 }

+ 16 - 4
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/config/EquForkliftRepairRecordListener.java

@@ -3,17 +3,21 @@ package com.rongwei.bscommon.sys.config;
 import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
 import com.rongwei.bscommon.sys.excel.EquForkliftRepairRecordTemplate;
-import com.rongwei.bscommon.sys.excel.EquMaintenanceStandardTemplate;
 import com.rongwei.bsentity.domain.EquForkliftRepairRecordDo;
-import com.rongwei.bsentity.domain.EquMaintenanceStandardDo;
-import com.rongwei.bsentity.enums.MaintenanceTypeEnum;
 import com.rongwei.bsentity.enums.PlantEnum;
+import com.rongwei.rwadmincommon.system.domain.SysDictDo;
+import com.rongwei.rwadmincommon.system.domain.SysOrganizationDo;
+import com.rongwei.rwadmincommon.system.service.SysDictService;
+import com.rongwei.rwadmincommon.system.service.SysOrganizationService;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 import java.lang.reflect.Field;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author shangmi
@@ -29,11 +33,15 @@ public class EquForkliftRepairRecordListener extends AnalysisEventListener<EquFo
 
     private List<String> errorData = new ArrayList<>();
 
+
+
+
+
     @Override
     public void invoke(EquForkliftRepairRecordTemplate forkliftRepairRecordTemplate, AnalysisContext analysisContext) {
         try {
             log.info("解析到一条数据:{}", forkliftRepairRecordTemplate);
-            for (Field field : forkliftRepairRecordTemplate.getClass().getDeclaredFields()) {
+          for (Field field : forkliftRepairRecordTemplate.getClass().getDeclaredFields()) {
                 field.setAccessible(true);
                 String name = field.getName();
                 if (Objects.isNull(field.get(forkliftRepairRecordTemplate)) && Arrays.asList(NON_SET).contains(name)) {
@@ -67,6 +75,8 @@ public class EquForkliftRepairRecordListener extends AnalysisEventListener<EquFo
      * 数据转换
      *
      * @param
+     * @param
+     * @param orgMap
      * @return {@link EquForkliftRepairRecordDo}
      * @date 2023/12/8 10:14
      * @author shangmi
@@ -78,6 +88,8 @@ public class EquForkliftRepairRecordListener extends AnalysisEventListener<EquFo
         // SysUserVo currentUser = CommonUtils.getCurrentUser();
         EquForkliftRepairRecordDo equForkliftRepairRecordDo = new EquForkliftRepairRecordDo();
         BeanUtils.copyProperties(forkliftRepairRecordTemplate, equForkliftRepairRecordDo);
+
+
         equForkliftRepairRecordDo.setCreatedate(date)
                 .setModifydate(date)
                 .setId(SecurityUtil.getUUID())

+ 24 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquMaintenanceOrderDao.java

@@ -3,6 +3,7 @@ package com.rongwei.bscommon.sys.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.bsentity.domain.EquMaintenanceOrderDo;
 import com.rongwei.bsentity.dto.EquMaintenanceOrderSumDTO;
+import com.rongwei.rwadmincommon.system.domain.SysUserDo;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -10,6 +11,27 @@ import java.util.Date;
 import java.util.List;
 
 public interface EquMaintenanceOrderDao extends BaseMapper<EquMaintenanceOrderDo> {
+
+    @Select("SELECT\n" +
+            "  DISTINCT\n" +
+            "  u.NAME,\n" +
+            "\tu.EMAIL,\n" +
+            "\tr.NAME AS roleName\n" +
+            "FROM\n" +
+            "\tsys_user u\n" +
+            "LEFT JOIN sys_user_role ur ON u.ID = ur.USERID\n" +
+            "LEFT JOIN sys_role r ON ur.ROLEID = r.ID\n" +
+            "LEFT JOIN sys_user_org uo ON u.ID = uo.USERID\n" +
+            "LEFT JOIN sys_organization org ON uo.ORGID = org.ID\n" +
+            "WHERE \n" +
+            "u.DELETED = 0\n" +
+            "AND ORGID = #{workshopid}\n" +
+            "AND (r.NAME = '车间主任' OR r.NAME = '车间维修主管')\n" +
+            "GROUP BY\n" +
+            "  u.EMAIL")
+    List<SysUserDo> selectEmailList( @Param("workshopid") String workshopid);
+
+
     @Select("SELECT\n" +
             "  d.PLANT,d.DEVICETYPE,d.PROBLEMLOCATION,COUNT(d.ID) 'COUNT',\n" +
             "\tGROUP_CONCAT(d.ID  ) 'IDS' \n" +
@@ -54,4 +76,6 @@ public interface EquMaintenanceOrderDao extends BaseMapper<EquMaintenanceOrderDo
 //            "WHERE sr.NAME in('设备部部长','车间维修主管','设备部维修主管') \n")
     List<String> selectRoleList(@Param("roleCodes") List<String> roleCode);
 
+
+
 }

+ 1 - 1
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquMaintenancePredictivePlanDao.java

@@ -14,5 +14,5 @@ public interface EquMaintenancePredictivePlanDao extends BaseMapper<EquMaintenan
 
     List<EquMaintenancePredictivePlanVo> queryDateByids(@Param("ids") List<String> ids);
 
-    void getDetail(List<String> ids);
+
 }

+ 65 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquMaintenanceReportDao.java

@@ -0,0 +1,65 @@
+package com.rongwei.bscommon.sys.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwei.bsentity.domain.EquMaintenanceReportDo;
+import com.rongwei.rwadmincommon.system.domain.SysUserDo;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.Date;
+import java.util.List;
+
+public interface EquMaintenanceReportDao extends BaseMapper<EquMaintenanceReportDo> {
+
+    @Select("SELECT a.* FROM (\n" +
+            "SELECT DISTINCT\n" +
+            "\tu.NAME,\n" +
+            "\tu.EMAIL,\n" +
+            "\tr.NAME AS roleName \n" +
+            "FROM\n" +
+            "\tsys_user u\n" +
+            "    LEFT JOIN sys_user_role ur ON u.ID = ur.USERID AND ur.DELETED = 0  \n" +
+            "    LEFT JOIN sys_role r ON ur.ROLEID = r.ID AND r.DELETED = 0  \n" +
+            "    LEFT JOIN sys_user_org uo ON u.ID = uo.USERID AND uo.DELETED = 0  \n" +
+            "    LEFT JOIN sys_organization org ON uo.ORGID = org.ID  AND org.DELETED = 0  \n" +
+            "WHERE\n" +
+            "\tu.DELETED = 0 \n" +
+            "\tAND ORGID = #{workshopid}\n" +
+            "\tAND ( r.NAME = '车间主任' OR r.NAME = '车间维修主管') \n" +
+            "\tGROUP BY\n" +
+            "    u.EMAIL\n" +
+            "UNION\n" +
+            "SELECT DISTINCT\n" +
+            "    u.NAME,\n" +
+            "    u.EMAIL,\n" +
+            "    r.NAME AS roleName \n" +
+            "FROM\n" +
+            "    sys_user u \n" +
+            "    LEFT JOIN sys_user_role ur ON u.ID = ur.USERID AND ur.DELETED = 0  \n" +
+            "    LEFT JOIN sys_role r ON ur.ROLEID = r.ID AND r.DELETED = 0  \n" +
+            "    LEFT JOIN sys_user_org uo ON u.ID = uo.USERID AND uo.DELETED = 0  \n" +
+            "    LEFT JOIN sys_organization org ON uo.ORGID = org.ID  AND org.DELETED = 0  \n" +
+            "WHERE\n" +
+            "    u.DELETED = 0  \n" +
+            "    AND org.FULLPID LIKE CONCAT('%', (\n" +
+            "        SELECT \n" +
+            "            SUBSTRING_INDEX(\n" +
+            "                SUBSTRING_INDEX(\n" +
+            "                    (SELECT GROUP_CONCAT(FULLPID SEPARATOR ',') \n" +
+            "                     FROM sys_organization o \n" +
+            "                     WHERE o.ID = #{workshopid}), \n" +
+            "                    ',', 2), \n" +
+            "                ',', -1\n" +
+            "            )\n" +
+            "        ), '%')\n" +
+            "    AND r.NAME = '生产计划主任'\n" +
+            "\t\tGROUP BY\n" +
+            "    u.EMAIL\n" +
+            ") a\n" +
+            "GROUP BY\n" +
+            "    a.EMAIL\n")
+    List<SysUserDo> selectEmailList( @Param("workshopid") String workshopid);
+
+
+
+}

+ 21 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquipmentDisposeDao.java

@@ -0,0 +1,21 @@
+package com.rongwei.bscommon.sys.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwei.bsentity.domain.EquDisposalRequestDo;
+import com.rongwei.rwadmincommon.system.domain.SysUserDo;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+public interface EquipmentDisposeDao extends BaseMapper<EquDisposalRequestDo> {
+    @Select({
+            "<script>",
+            "SELECT `NAME`, EMAIL FROM sys_user WHERE DELETED = '0' AND id IN",
+            "<foreach item='item' collection='ids' open='(' separator=',' close=')'>",
+            "#{item}",
+            "</foreach>",
+            "</script>"
+    })
+    List<SysUserDo> selectEmailList(@Param("ids") String[] ids);
+}

+ 3 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquMaintenanceOrderService.java

@@ -3,8 +3,10 @@ package com.rongwei.bscommon.sys.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwei.bsentity.domain.EquMaintenanceOrderDo;
 import com.rongwei.bsentity.dto.EquMaintenanceOrderSumDTO;
+import com.rongwei.rwcommon.base.R;
 
 import java.util.List;
+import java.util.Map;
 
 public interface EquMaintenanceOrderService extends IService<EquMaintenanceOrderDo> {
 
@@ -39,4 +41,5 @@ public interface EquMaintenanceOrderService extends IService<EquMaintenanceOrder
     String generateDeviceRepeatedlyFailsExcel(List<EquMaintenanceOrderSumDTO> list, String noticeId);
 
 
+    R sendEmail(Map<String, Object> myObject);
 }

+ 12 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquMaintenanceReportService.java

@@ -0,0 +1,12 @@
+package com.rongwei.bscommon.sys.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwei.bsentity.domain.EquMaintenanceReportDo;
+import com.rongwei.rwcommon.base.R;
+
+import java.util.Map;
+
+public interface EquMaintenanceReportService extends IService<EquMaintenanceReportDo> {
+
+    R sendEmail(Map<String, Object> myObject);
+}

+ 5 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquipmentArchivesService.java

@@ -3,6 +3,9 @@ package com.rongwei.bscommon.sys.service;
 import com.rongwei.bsentity.dto.EquipmentDisposeDTO;
 import com.rongwei.rwcommon.base.R;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author shangmi
  * @title EquipmentArchivesService
@@ -21,4 +24,6 @@ public interface EquipmentArchivesService {
      */
 
     R updateEquipmentData(EquipmentDisposeDTO equipmentDisposeDTO);
+
+    R sendEmail(Map<String, Object> myObject);
 }

+ 30 - 10
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquForkliftRepairRecordServiceImpl.java

@@ -14,6 +14,10 @@ import com.rongwei.bscommon.sys.utils.DateUtils;
 import com.rongwei.bsentity.domain.EquForkliftRepairRecordDo;
 import com.rongwei.bsentity.enums.MaintenanceTypeEnum;
 import com.rongwei.bsentity.enums.PlantEnum;
+import com.rongwei.rwadmincommon.system.domain.SysDictDo;
+import com.rongwei.rwadmincommon.system.domain.SysOrganizationDo;
+import com.rongwei.rwadmincommon.system.service.SysDictService;
+import com.rongwei.rwadmincommon.system.service.SysOrganizationService;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommonentity.commonservers.vo.SysSerialVo;
@@ -41,6 +45,12 @@ public class EquForkliftRepairRecordServiceImpl extends ServiceImpl<EquForkliftR
     @Autowired
     EquForkliftRepairRecordDao equForkliftRepairRecordDao;
 
+    @Autowired
+    private SysDictService dictService;
+
+    @Autowired
+    private SysOrganizationService sysOrganizationService;
+
     @Override
     public R equForkliftRepairRecordService(MultipartFile multipartFile) throws IOException {
         Date date = new Date();
@@ -73,24 +83,34 @@ public class EquForkliftRepairRecordServiceImpl extends ServiceImpl<EquForkliftR
             return R.error(JSON.toJSONString(errorData));
         }
         SysUserVo currentUser = CommonUtils.getCurrentUser();
+
+        List<SysDictDo> repairPersonType = dictService.getByRedis("equ_cxwxbyr");
+        Map<String, String> dictMap = repairPersonType.stream().collect(Collectors.toMap(SysDictDo::getName, SysDictDo::getValue));
+
+        String rapairname ="";
+        String rapairid ="";
+        // 使用 StringBuilder 来构建新的字符串
+        StringBuilder newStr = new StringBuilder();
         // 生成流水号
         for (EquForkliftRepairRecordDo forkliftRepairRecord : newForkliftRepairRecord) {
-            SysSerialVo sysSerialVo = new SysSerialVo();
-            String plantSimp = PlantEnum.addrOf(forkliftRepairRecord.getTenantid());
-//            sysSerialVo.setModulecode("equ_maintenance_standard_aq_code_" + plantSimp);
-//            // sysSerialVo.setResetrule("date:yyyy");
-//            sysSerialVo.setRuleTemplateStr(plantSimp + "-BYBZ-@{serialNumber:#00000}");
-//            R serialNumberCode = rwAdminFeign.getSerialNumberCode(sysSerialVo);
-//            if ("200".equals(serialNumberCode.getCode())) {
-//                Object data = serialNumberCode.getData();
-//                forkliftRepairRecord.setStandardid(JSONObject.parseObject(JSONObject.toJSONString(data), Map.class).get("code").toString());
-//            }
+            rapairname = forkliftRepairRecord.getRapairname()==null?"":forkliftRepairRecord.getRapairname();
+            String[] parts = rapairname.split(",");
+            newStr = new StringBuilder();
+            // 遍历分割后的数组,并根据数据字典进行替换
+            for (String part : parts) {
+                String replacement = dictMap.getOrDefault(part, part); // 如果找不到对应的值,则使用原值
+                newStr.append(replacement).append(",");
+            }
+            // 移除最后一个多余的逗号,并转换为字符串
+             rapairid = newStr.length() > 0 ? newStr.substring(0, newStr.length() - 1) : "";
+
             forkliftRepairRecord.setTenantid(CXCommonUtils.getCurrentUserFactoryId(currentUser))
                     .setCreatedate(date)
                     .setModifydate(date)
                     .setCreateuserid(currentUser.getId())
                     .setCreateusername(currentUser.getName())
                     .setModifyusername(currentUser.getName())
+                    .setRapairid(rapairid)
                     .setModifyuserid(currentUser.getId());
         }
         equForkliftRepairRecordService.saveBatch(newForkliftRepairRecord, 200);

+ 53 - 4
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquMaintenanceOrderServiceImpl.java

@@ -2,13 +2,18 @@ package com.rongwei.bscommon.sys.service.impl;
 import cn.hutool.core.io.resource.ClassPathResource;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.EquMaintenanceOrderDao;
+import com.rongwei.bscommon.sys.dao.EquipmentDisposeDao;
 import com.rongwei.bscommon.sys.service.EquMaintenanceOrderService;
 import com.rongwei.bscommon.sys.utils.ExcelUtils;
 import com.rongwei.bsentity.domain.EquMaintenanceOrderDo;
 import com.rongwei.bsentity.dto.EquMaintenanceOrderSumDTO;
 import com.rongwei.bsentity.enums.PlantEnum;
+import com.rongwei.rwadmincommon.system.domain.SysUserDo;
 import com.rongwei.rwadmincommon.system.service.SysDictService;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.vo.MailDo;
 import com.rongwei.rwcommonentity.commonservers.domain.SysFileItemDo;
+import com.rongwei.safecommon.fegin.CXCommonFeginClient;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
@@ -17,10 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import java.io.InputStream;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD;
@@ -38,6 +40,8 @@ public class EquMaintenanceOrderServiceImpl extends ServiceImpl<EquMaintenanceOr
     @Autowired
     private SysDictService sysDictService;
 
+    @Autowired
+    private CXCommonFeginClient cxCommonFeginClient;
 
     /**
      * 根据故障发生时间自动查询每个工厂近3个月内 (以本月在往前倒推三个月至当前时间)所有 除去 无需维修、已关闭  且  维修对象分类 为 档案设备、工装 的 维修任务记录中,
@@ -143,6 +147,51 @@ public class EquMaintenanceOrderServiceImpl extends ServiceImpl<EquMaintenanceOr
         return "";
     }
 
+    @Override
+    public R sendEmail(Map<String, Object> myObject) {
+        String createusername = (String) myObject.get("CREATEUSERNAME");//申请人
+        String maintenancetime = (String) myObject.get("MAINTENANCETIME");//报修时间
+        String workshop = (String) myObject.get("WORKSHOP");//使用车间
+        String workshopid = (String) myObject.get("WORKSHOPID");//使用车间ID
+        String equipmentname = (String) myObject.get("EQUIPMENTNAME");//工装名称
+        String equipmentnumber = (String) myObject.get("EQUIPMENTNUMBER");//工装编号
+
+        List<SysUserDo> emais = equMaintenanceOrderDao.selectEmailList(workshopid);
+        StringBuilder sb = new StringBuilder();
+        for (SysUserDo user : emais) {
+            // 从 SysUserDo 对象中获取邮件地址,并添加到字符串构建器中
+            String emailAddress = user.getEmail();
+            sb.append(emailAddress).append(",");
+        }
+        // 移除最后一个逗号
+        if (sb.length() > 0) {
+            sb.deleteCharAt(sb.length() - 1);
+        }
+        String[] filteredEmailArray = Arrays.stream(sb.toString().split(","))
+                .map(String::trim) // 去除每个邮件地址的前后空白
+                .filter(email -> !email.isEmpty()) // 过滤掉空字符串
+                .toArray(String[]::new); // 收集为字符串数组
+
+        if (filteredEmailArray.length > 0) {
+            MailDo mailDo = new MailDo();
+            mailDo.setReceiveEmail(filteredEmailArray);
+            mailDo.setNeedTransReceive(false);
+            mailDo.setCcEmail(new String[]{});
+            mailDo.setSubject("维修申请流程审批任务提醒");
+            String content = "尊敬的各位领导," +
+                    "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
+                    createusername + "于 " + maintenancetime +" 对"+workshop+"的"+equipmentname+ "(" + equipmentnumber + ") 的工装进行了保修申请,请各位领导知悉,请及时联系维修工程进行维修" +
+                    "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
+                    "系统登录地址: http://192.168.100.77/#/passport/login";
+            mailDo.setContent(content);
+            // 发送邮件
+            R r = cxCommonFeginClient.sendHtmlMail(mailDo);
+        } else {
+            return R.error("汇报对象邮箱不能为空");
+        }
+        return R.ok();
+    }
+
     /**
      * 填充后3页工厂数据
      *

+ 73 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquMaintenanceReportServiceImpl.java

@@ -0,0 +1,73 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwei.bscommon.sys.dao.EquMaintenanceReportDao;
+import com.rongwei.bscommon.sys.service.EquMaintenanceReportService;
+import com.rongwei.bsentity.domain.EquMaintenanceReportDo;
+import com.rongwei.rwadmincommon.system.domain.SysUserDo;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.vo.MailDo;
+import com.rongwei.safecommon.fegin.CXCommonFeginClient;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Service
+@Slf4j
+public class EquMaintenanceReportServiceImpl extends ServiceImpl<EquMaintenanceReportDao, EquMaintenanceReportDo> implements EquMaintenanceReportService {
+
+    @Autowired
+    private CXCommonFeginClient cxCommonFeginClient;
+    @Autowired
+    private EquMaintenanceReportDao equMaintenanceReportDao;
+
+    @Override
+    public R sendEmail(Map<String, Object> myObject) {
+        String reportueser = (String) myObject.get("REPORTUESER");//上报人
+        String incidenttime = (String) myObject.get("INCIDENTTIME");//申报时间
+        String workshop = (String) myObject.get("WORKSHOP");//使用车间名称
+        String workshopid = (String) myObject.get("WORKSHOPID");//使用车间ID
+        String equipmentname = (String) myObject.get("EQUIPMENTNAME");//设备名称
+        String equipmentnumber = (String) myObject.get("EQUIPMENTNUMBER");//设备编号
+
+
+        List<SysUserDo> emais = equMaintenanceReportDao.selectEmailList(workshopid);
+        StringBuilder sb = new StringBuilder();
+        for (SysUserDo user : emais) {
+            // 从 SysUserDo 对象中获取邮件地址,并添加到字符串构建器中
+            String emailAddress = user.getEmail();
+            sb.append(emailAddress).append(",");
+        }
+        // 移除最后一个逗号
+        if (sb.length() > 0) {
+            sb.deleteCharAt(sb.length() - 1);
+        }
+        String[] filteredEmailArray = Arrays.stream(sb.toString().split(","))
+                .map(String::trim) // 去除每个邮件地址的前后空白
+                .filter(email -> !email.isEmpty()) // 过滤掉空字符串
+                .toArray(String[]::new); // 收集为字符串数组
+
+        if (filteredEmailArray.length > 0) {
+            MailDo mailDo = new MailDo();
+            mailDo.setReceiveEmail(filteredEmailArray);
+            mailDo.setNeedTransReceive(false);
+            mailDo.setCcEmail(new String[]{});
+            mailDo.setSubject("维修上报设备故障流程审批任务提醒");
+            String content = "尊敬的各位领导," +
+                    "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
+                    reportueser + "于 " + incidenttime +" 对"+workshop+"的"+equipmentname+ "(" + equipmentnumber + ") 的设备进行了设备故障上报登记,请各位领导知悉,请车间主管人员及时确认故障是否真实存在,同时请计划人员到设备管理平台子系统中的“维修上报设备故障”模块中对上报的设备故障进行安排时间维修,及时对设备故障进行解决修复,避免设备在生产时出现停机异常。" +
+                    "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
+                    "系统登录地址: http://192.168.100.77/#/passport/login";
+            mailDo.setContent(content);
+            // 发送邮件
+            R r = cxCommonFeginClient.sendHtmlMail(mailDo);
+        } else {
+            return R.error("汇报对象邮箱不能为空");
+        }
+        return R.ok();
+    }
+
+
+}

+ 129 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquipmentArchivesServiceImpl.java

@@ -1,14 +1,25 @@
 package com.rongwei.bscommon.sys.service.impl;
 
+import com.rongwei.bscommon.sys.dao.EquipmentDisposeDao;
 import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bscommon.sys.utils.ExceptionUtils;
 import com.rongwei.bsentity.domain.AspCheckItemsAreaDo;
+import com.rongwei.bsentity.domain.EquDisposalRequestDo;
 import com.rongwei.bsentity.dto.EquipmentDisposeDTO;
+import com.rongwei.rwadmincommon.system.domain.SysUserDo;
 import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.vo.MailDo;
+import com.rongwei.safecommon.fegin.CXCommonFeginClient;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author shangmi
@@ -41,6 +52,12 @@ public class EquipmentArchivesServiceImpl implements EquipmentArchivesService {
     @Autowired
     private EquipmentSendNotifyService sendNotifyService;
 
+    @Autowired
+    private EquipmentDisposeDao equipmentDisposeDao;
+
+    @Autowired
+    private CXCommonFeginClient cxCommonFeginClient;
+
     /**
      * 更新设备库
      *
@@ -87,4 +104,116 @@ public class EquipmentArchivesServiceImpl implements EquipmentArchivesService {
         }
         return R.ok();
     }
+
+    @Override
+    public R sendEmail(Map<String, Object> myObject) {
+        String type = (String) myObject.get("TYPE");//'1'为发起流程 or 退回重新发起流程、'2'流程中的节点
+        if ("1".equals(type)){
+            String id = (String) myObject.get("FORMID");
+            EquDisposalRequestDo equDisposalRequestDo = equipmentDisposeDao.selectById(id);
+            String mssmanagerid = equDisposalRequestDo.getMssmanagerid();//安全部部长id
+            String workshop = equDisposalRequestDo.getWorkshop();//使用部门名称、车间
+            String equipmentname = equDisposalRequestDo.getEquipmentName();//设备名称
+            String equipmentnumber = equDisposalRequestDo.getEquipmentNumber();//设备编号
+
+            //抄送人 id 数组处理
+            String[] strArray = mssmanagerid.split(",");
+            List<SysUserDo> emais = equipmentDisposeDao.selectEmailList(strArray);
+            StringBuilder sb = new StringBuilder();
+            for (SysUserDo user : emais) {
+                // 从 SysUserDo 对象中获取邮件地址,并添加到字符串构建器中
+                String emailAddress = user.getEmail();
+                sb.append(emailAddress).append(",");
+            }
+            // 移除最后一个逗号
+            if (sb.length() > 0) {
+                sb.deleteCharAt(sb.length() - 1);
+            }
+            String[] filteredEmailArray = Arrays.stream(sb.toString().split(","))
+                    .map(String::trim) // 去除每个邮件地址的前后空白
+                    .filter(email -> !email.isEmpty()) // 过滤掉空字符串
+                    .toArray(String[]::new); // 收集为字符串数组
+
+            if (filteredEmailArray.length > 0) {
+                MailDo mailDo = new MailDo();
+                mailDo.setReceiveEmail(filteredEmailArray);
+                mailDo.setNeedTransReceive(false);
+                mailDo.setCcEmail(new String[]{});
+                mailDo.setSubject("设备处置流程审批任务提醒");
+                String content = "尊敬的各位领导," +
+                        "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
+                        "您有一个" + workshop + "的 " + equipmentname + "(" + equipmentnumber + ") 的设备处置审批任务,请及时到创新智慧工厂平台中的个人工作台中进行任务审批,若是未找到对应审批任务,则为某个领导已审批完成。可在对应APP端或者PC端进行任务审批" +
+                        "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
+                        "系统登录地址: http://192.168.100.77/#/passport/login";
+                mailDo.setContent(content);
+                // 发送邮件
+                R r = cxCommonFeginClient.sendHtmlMail(mailDo);
+            } else {
+                return R.error("汇报对象邮箱不能为空");
+            }
+
+        }else if ("2".equals(type)){
+//            逻辑如下: 在流程的每个节点审批通过后 给下个环节的审批人员 发送 邮件提醒的功能
+//            提醒信息: 尊敬的各位领导,您有一个【车间】的【设备名称(设备编号)】的设备处置审批任务,请及时到创新智慧工厂平台中的个人工作台中进行任务审批,若是未找到对应审批任务,则为某个领导已审批完成。可在对应APP端或者PC端进行任务审批
+//            系统登录地址: 把内部的登录地址弄上
+//            需发送邮件的提醒人:取下个环节的对应审批人,然后去重, 之后给这些人员发送邮件,没有邮箱的就不发送
+//            注意:只发邮件,不生成提醒信息。
+            String taskname = (String) myObject.get("taskname");
+            String formId = (String) myObject.get("formId");
+            //根据 formId 在EquipmentDisposeDTO 中获取数据
+            EquDisposalRequestDo equDisposalRequestDo = equipmentDisposeDao.selectById(formId);
+            String workshop = equDisposalRequestDo.getWorkshop();//使用部门名称、车间
+            String equipmentname = equDisposalRequestDo.getEquipmentName();//设备名称
+            String equipmentnumber = equDisposalRequestDo.getEquipmentNumber();//设备编号
+
+            String recipient = "";
+            if ("安全部".equals(taskname)){
+                recipient = equDisposalRequestDo.getMtqmanagerid();
+            } else if ("技质部".equals(taskname)) {
+                recipient = equDisposalRequestDo.getEqumanagerid();
+            } else if ("设备部".equals(taskname)) {
+                recipient = equDisposalRequestDo.getWdmanagerid();
+            } else if ("仓储部".equals(taskname)) {
+                recipient = equDisposalRequestDo.getVicepresidentid();
+            } else if ("副总经理".equals(taskname)) {
+                recipient = equDisposalRequestDo.getGeneralmanagerid();
+            } else if ("总经理".equals(taskname)) {
+                recipient = equDisposalRequestDo.getFinanceofficeid();
+            }
+            String[] strArray = recipient.split(",");
+            List<SysUserDo> emais = equipmentDisposeDao.selectEmailList(strArray);
+            StringBuilder sb = new StringBuilder();
+            for (SysUserDo user : emais) {
+                // 从 SysUserDo 对象中获取邮件地址,并添加到字符串构建器中
+                String emailAddress = user.getEmail();
+                sb.append(emailAddress).append(",");
+            }
+            // 移除最后一个逗号
+            if (sb.length() > 0) {
+                sb.deleteCharAt(sb.length() - 1);
+            }
+            String[] filteredEmailArray = Arrays.stream(sb.toString().split(","))
+                    .map(String::trim) // 去除每个邮件地址的前后空白
+                    .filter(email -> !email.isEmpty()) // 过滤掉空字符串
+                    .toArray(String[]::new); // 收集为字符串数组
+            if (filteredEmailArray.length > 0) {
+                MailDo mailDo = new MailDo();
+                mailDo.setReceiveEmail(filteredEmailArray);
+                mailDo.setNeedTransReceive(false);
+                mailDo.setCcEmail(new String[]{});
+                mailDo.setSubject("设备处置流程审批任务提醒");
+                String content = "尊敬的各位领导," +
+                        "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
+                        "您有一个" + workshop + "的 " + equipmentname + "(" + equipmentnumber + ") 的设备处置审批任务,请及时到创新智慧工厂平台中的个人工作台中进行任务审批,若是未找到对应审批任务,则为某个领导已审批完成。可在对应APP端或者PC端进行任务审批" +
+                        "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
+                        "系统登录地址: http://192.168.100.77/#/passport/login";
+                mailDo.setContent(content);
+                // 发送邮件
+                R r = cxCommonFeginClient.sendHtmlMail(mailDo);
+            } else {
+                return R.error("汇报对象邮箱不能为空");
+            }
+        }
+        return R.ok();
+    }
 }

+ 1 - 1
cx-equipment/cx-equipment-common/src/main/resources/mybatis/business/EquMaintenancePredictivePlanDao.xml

@@ -18,7 +18,7 @@
         <where>
             a.DELETED ='0'
             and  DATEDIFF(DATE_ADD(a.LASTMAINTENANCEDATE, INTERVAL a.FREQUENCY DAY), CURDATE()) &lt; 30
-            and b.NEXTTASKID is null
+            and b.NEXTTASKID is null and a.ISOUTOFSERVICE='启用'
             <if test="ids != null and ids.size()>0">
                 AND a.ID in
                 <foreach collection="ids" item="id" open="(" close=")" separator=",">

+ 369 - 0
cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/domain/EquDisposalRequestDo.java

@@ -0,0 +1,369 @@
+package com.rongwei.bsentity.domain;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author  cyn
+ * @create 2024-07-12 09:24
+ */
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("equ_disposal_request")
+public class EquDisposalRequestDo {
+
+	/**
+	 * 主键ID
+	 */
+	private String id;
+
+	/**
+	 * 租户ID
+	 */
+	private String tenantId;
+
+	/**
+	 * 扩展json格式配置
+	 */
+	private String roption;
+
+	/**
+	 * 是否删除Y/N
+	 */
+	private String deleted;
+
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+	/**
+	 * 创建时间
+	 */
+	private Date createDate;
+
+	/**
+	 * 创建用户ID
+	 */
+	private String createUserId;
+
+	/**
+	 * 修改日期
+	 */
+	private Date modifyDate;
+
+	/**
+	 * 修改用户ID
+	 */
+	private String modifyUserId;
+
+	/**
+	 * 创建人
+	 */
+	private String createUserName;
+
+	/**
+	 * 修改人
+	 */
+	private String modifyUserName;
+
+	/**
+	 * 状态
+	 */
+	private String status;
+
+	/**
+	 * 流程ID
+	 */
+	private String processInstId;
+
+	/**
+	 * 设备处置申请单号
+	 */
+	private String disposalRequestNumber;
+
+	/**
+	 * 处置类型
+	 */
+	private String handlingType;
+
+	/**
+	 * 对象分类
+	 */
+	private String objectType;
+
+	/**
+	 * 设备名称
+	 */
+	private String equipmentName;
+
+	/**
+	 * 设备ID
+	 */
+	private String equipmentId;
+
+	/**
+	 * 设备编号
+	 */
+	private String equipmentNumber;
+
+	/**
+	 * 设备分类
+	 */
+	private String equipmentType;
+
+	/**
+	 * 设备位置
+	 */
+	private String area;
+
+	/**
+	 * 使用部门ID
+	 */
+	private String workshopId;
+
+	/**
+	 * 使用部门
+	 */
+	private String workshop;
+
+	/**
+	 * 规格型号
+	 */
+	private String specification;
+
+	/**
+	 * 设备启用时间
+	 */
+	private Date activeTime;
+
+	/**
+	 * 设备运行年限
+	 */
+	private Integer operatingLife;
+
+	/**
+	 * 处置原因
+	 */
+	private String reasonDisposal;
+
+	/**
+	 * 其他处置原因
+	 */
+	private String otherReasonDisposal;
+
+	/**
+	 * 移出工厂
+	 */
+	private String rolloutplantid;
+
+	/**
+	 * 移出部门车间ID
+	 */
+	private String rolloutdeptid;
+
+	/**
+	 * 移出部门车间
+	 */
+	private String rolloutdept;
+
+	/**
+	 * 转出位置
+	 */
+	private String rolloutlocation;
+
+	/**
+	 * 转入工厂
+	 */
+	private String rollinplantid;
+
+	/**
+	 * 转入部门车间ID
+	 */
+	private String rollindeptid;
+
+	/**
+	 * 转入部门车间
+	 */
+	private String rollindept;
+
+	/**
+	 * 转入位置
+	 */
+	private String rollinlocation;
+
+	/**
+	 * 随机技术文件
+	 */
+	private String technicalfile;
+
+	/**
+	 * 申请部门ID
+	 */
+	private String applicationdeptid;
+
+	/**
+	 * 申请部门
+	 */
+	private String applicationdept;
+
+	/**
+	 * 申请人ID
+	 */
+	private String proposerid;
+
+	/**
+	 * 申请人
+	 */
+	private String proposer;
+
+	/**
+	 * 申请时间
+	 */
+	private Date applicationtime;
+
+	/**
+	 * 安全部部长
+	 */
+	private String mssmanagerid;
+
+	/**
+	 * 安全部部长名称
+	 */
+	private String mssmanager;
+
+	/**
+	 * 技质部部长
+	 */
+	private String mtqmanagerid;
+
+	/**
+	 * 技质部部长名称
+	 */
+	private String mtomanager;
+
+	/**
+	 * 设备部部长
+	 */
+	private String equmanagerid;
+
+	/**
+	 * 设备部部长名称
+	 */
+	private String equmanager;
+
+	/**
+	 * 仓储部部长
+	 */
+	private String wdmanagerid;
+
+	/**
+	 * 仓储部部长名称
+	 */
+	private String wdmanager;
+
+	/**
+	 * 副总经理
+	 */
+	private String vicepresidentid;
+
+	/**
+	 * 副总经理名称
+	 */
+	private String vicepresident;
+
+	/**
+	 * 总经理
+	 */
+	private String generalmanagerid;
+
+	/**
+	 * 总经理名称
+	 */
+	private String generalmanager;
+
+	/**
+	 * 财务处部长
+	 */
+	private String financeofficeid;
+
+	/**
+	 * 财务处部长名称
+	 */
+	private String financeoffice;
+
+	/**
+	 * 安全部部长名称审批人
+	 */
+	private String mssmanageraudit;
+
+	/**
+	 * 技质部部长名称审批人
+	 */
+	private String mtomanageraudit;
+
+	/**
+	 * 设备部部长名称审批人
+	 */
+	private String equmanageraudit;
+
+	/**
+	 * 仓储部部长名称审批人
+	 */
+	private String wdmanageraudit;
+
+	/**
+	 * 副总经理名称审批人
+	 */
+	private String vicepresidentaudit;
+
+	/**
+	 * 财务处部长名称审批人
+	 */
+	private String financeofficeaudit;
+
+	/**
+	 * 安全部部长时间
+	 */
+	private Date mssmanagertime;
+
+	/**
+	 * 技质部部长时间
+	 */
+	private Date mtomanagertime;
+
+	/**
+	 * 设备部部长时间
+	 */
+	private Date equmanagertime;
+
+	/**
+	 * 仓储部部长时间
+	 */
+	private Date wdmanagertime;
+
+	/**
+	 * 副总经理时间
+	 */
+	private Date vicepresidenttime;
+
+	/**
+	 * 总经理时间
+	 */
+	private Date generalmanagertime;
+
+	/**
+	 * 财务处部长时间
+	 */
+	private Date financeofficetime;
+
+}

+ 249 - 0
cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/domain/EquMaintenanceReportDo.java

@@ -0,0 +1,249 @@
+package com.rongwei.bsentity.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("equ_maintenance_report")
+public class EquMaintenanceReportDo {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 工厂
+     */
+    private String tenantid;
+
+    /**
+     * 工厂名称
+     */
+    private String plant;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 是否删除
+     */
+    private String deleted;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    private Date createdate;
+
+    /**
+     * 创建用户ID
+     */
+    private String createuserid;
+
+    /**
+     * 修改日期
+     */
+    private Date modifydate;
+
+    /**
+     * 修改用户ID
+     */
+    private String modifyuserid;
+
+    /**
+     * 创建人名称
+     */
+    private String createusername;
+
+    /**
+     * 修改人名称
+     */
+    private String modifyusername;
+
+    /**
+     * 上报编号
+     */
+    private String jobnumber;
+
+    /**
+     * 故障来源
+     */
+    private String faultsource;
+
+    /**
+     * 故障分类
+     */
+    private String faultclassify;
+
+    /**
+     * 维修对象分类
+     */
+    private String maintenanceclassify;
+
+    /**
+     * 设备名称
+     */
+    private String equipmentname;
+
+    /**
+     * 设备ID
+     */
+    private String equipmentid;
+
+    /**
+     * 设备编号
+     */
+    private String equipmentnumber;
+
+    /**
+     * 规格型号
+     */
+    private String specification;
+
+    /**
+     * 区域
+     */
+    private String area;
+
+    /**
+     * 问题发生部位
+     */
+    private String problemlocation;
+
+    /**
+     * 关联维修工单ID
+     */
+    private String relationmaintenanceorderid;
+
+    /**
+     * 维修紧急情况
+     */
+    private String repairurgency;
+
+    /**
+     * 问题上报时间
+     */
+    private Date incidenttime;
+
+    /**
+     * 是否需要停机
+     */
+    private String ishalt;
+
+    /**
+     * 停机时间
+     */
+    private Date halttime;
+
+    /**
+     * 预计维修时长
+     */
+    private BigDecimal repairusingtime;
+
+    /**
+     * 上报状态
+     */
+    private String reportstatus;
+
+    /**
+     * 使用车间ID
+     */
+    private String workshopid;
+
+    /**
+     * 使用车间
+     */
+    private String workshop;
+
+    /**
+     * 工序主管/车间主任ID
+     */
+    private String gxzgid;
+
+    /**
+     * 工序主管/车间主任
+     */
+    private String gxzg;
+
+    /**
+     * 上报人ID
+     */
+    private String reportueserid;
+
+    /**
+     * 上报人
+     */
+    private String reportueser;
+
+    /**
+     * 设备问题
+     */
+    private String faultcondition;
+
+    /**
+     * 故障图
+     */
+    private String equipmentfault;
+
+    /**
+     * 申请部门
+     */
+    private String applicationdept;
+
+    /**
+     * 申请部门ID
+     */
+    private String applicationdeptid;
+
+    /**
+     * 故障发生原因
+     */
+    private String causefailure;
+
+    /**
+     * 计划开始维修时间
+     */
+    private Date planstarttime;
+
+    /**
+     * 计划完成维修时间
+     */
+    private Date planendtime;
+
+    /**
+     * 维修主管ID
+     */
+    private String servicepersionid;
+
+    /**
+     * 维修主管
+     */
+    private String serviceperson;
+
+    /**
+     * 维修工程师ID
+     */
+    private String maintenanceengineerid;
+
+    /**
+     * 维修工程师NAME
+     */
+    private String maintenanceengineername;
+
+
+
+
+}

+ 63 - 0
cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/SendEmailController.java

@@ -0,0 +1,63 @@
+package com.rongwei.bsserver.sys.controller;
+
+import com.rongwei.bscommon.sys.service.EquMaintenanceOrderService;
+import com.rongwei.bscommon.sys.service.EquMaintenanceReportService;
+import com.rongwei.bscommon.sys.service.EquipmentArchivesService;
+import com.rongwei.rwcommon.base.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("sendEmail")
+@Slf4j
+public class SendEmailController {
+
+
+    @Autowired
+    private EquipmentArchivesService equipmentArchivesService;
+
+    @Autowired
+    private EquMaintenanceOrderService equMaintenanceOrderService;
+
+    @Autowired
+    private EquMaintenanceReportService equMaintenanceReportService;
+
+
+    /**
+     * 设备处置流程邮件提醒
+     * @return
+     */
+    @PostMapping("/EquipmentDisposalEmail")
+    public R deleteValidate(@RequestBody Map<String,Object> myObject){
+            R r = equipmentArchivesService.sendEmail(myObject);
+            return r.ok();
+    }
+
+
+    /**
+     * 维修申请流程邮件提醒
+     * @return
+     */
+    @PostMapping("/EquMaintenanceOrderEmail")
+    public R equMaintenanceOrderEmail(@RequestBody Map<String,Object> myObject){
+        R r = equMaintenanceOrderService.sendEmail(myObject);
+        return r.ok();
+    }
+
+    /**
+     * 维修上报设备故障流程邮件提醒
+     * @return
+     */
+    @PostMapping("/EquMaintenanceReportEmail")
+    public R equMaintenanceReportEmail(@RequestBody Map<String,Object> myObject){
+        R r = equMaintenanceReportService.sendEmail(myObject);
+        return r.ok();
+    }
+}