Browse Source

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

xiahan 1 year ago
parent
commit
d847a4d317
31 changed files with 703 additions and 224 deletions
  1. 7 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOperationBackupDao.java
  2. 8 2
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOperationProcessEquDao.java
  3. 1 1
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProductionOrderDao.java
  4. 9 4
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsReportRecordsDao.java
  5. 1 1
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsBlankOrderService.java
  6. 2 2
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsProcessOperationService.java
  7. 2 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsReportRecordsService.java
  8. 65 16
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java
  9. 106 64
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationServiceImpl.java
  10. 12 10
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportOutputServiceImpl.java
  11. 203 75
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportRecordsServiceImpl.java
  12. 43 32
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsServiceImpl.java
  13. 1 1
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/utils/CodeGeneration.java
  14. 12 0
      cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationBackupDao.xml
  15. 10 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProductionOrderDo.java
  16. 5 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsReportRecordsDo.java
  17. 6 1
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsScheduleConfigDo.java
  18. 16 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CheckMergeProcessResopnse.java
  19. 18 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CheckScheduleReq.java
  20. 20 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CheckScheduleResponse.java
  21. 25 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CheckScheduleVo.java
  22. 6 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ProductionScheduleVo.java
  23. 16 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ResetProcessOperationVo.java
  24. 4 3
      cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java
  25. 4 5
      cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProcessOperationController.java
  26. 9 0
      cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsReportRecordController.java
  27. 9 0
      cx-question/cx-question-common/src/main/java/com/rongwei/bscommon/sys/dao/SrmIssuesListDao.java
  28. 3 0
      cx-question/cx-question-common/src/main/java/com/rongwei/bscommon/sys/service/SrmIssuesListService.java
  29. 57 7
      cx-question/cx-question-common/src/main/java/com/rongwei/bscommon/sys/service/impl/SrmIssuesListServiceImpl.java
  30. 15 0
      cx-question/cx-question-entity/src/main/java/dto/DeparterAndWorkShoperVo.java
  31. 8 0
      cx-question/cx-question-server/src/main/java/com/rongwei/controller/QuestionController.java

+ 7 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOperationBackupDao.java

@@ -2,7 +2,9 @@ package com.rongwei.bscommon.sys.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.bsentity.domain.ApsProcessOperationBackupDo;
+import com.rongwei.bsentity.vo.CheckScheduleVo;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
 
@@ -18,6 +20,11 @@ public interface ApsProcessOperationBackupDao extends BaseMapper<ApsProcessOpera
 
     void processOperationCopy(@Param("userId") String userId,
                               @Param("userName") String userName);
+
+    @Select("select count(ID) as count,BACKUPUSERID as backUpUserId,BACKUPUSER as backUpUserName from aps_process_operation_backup where DELETED = 0 AND BLANKID in (select ID from aps_blank_order where DELETED ='0' and  PRODUCTIONORDERID = #{orderId} ) GROUP BY BACKUPUSERID,BACKUPUSER limit 1")
+    CheckScheduleVo selectBackByOrderId(@Param("orderId") String orderId);
+
+    CheckScheduleVo selectBackByBlankIdList(@Param("blankIdList") List<String> blankIdList);
 }
 
 

+ 8 - 2
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOperationProcessEquDao.java

@@ -63,8 +63,8 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
     @Update("update aps_process_operation_process_equ set STARTINGROLL = STARTINGROLL - 1,WAITREPORTID = null,DOINGBATCHNUMBER = '' where ID = #{processequid}")
     void updateByCancelRecord(@Param("processequid") String processequid);
 
-    @Update("update asp_check_items set WAITREPORTID = REPLACE(REPLACE(REPLACE(WAITREPORTID,'${recordId},',''),',${recordId}',''),'${recordId}','') where ID = #{deviceId}")
-    void updateEquByCancelRecord(@Param("recordId") String recordId,@Param("deviceId") String deviceId);
+//    @Update("update asp_check_items set WAITREPORTID = REPLACE(REPLACE(REPLACE(WAITREPORTID,'${recordId},',''),',${recordId}',''),'${recordId}','') where ID = #{deviceId}")
+//    void updateEquByCancelRecord(@Param("recordId") String recordId,@Param("deviceId") String deviceId);
 
     List<CommonUpdateProductionStatusReq> selectNeedUpdate(@Param("productIdList") List<String> productIdList);
 
@@ -84,6 +84,12 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
 
     List<ApsProcessOperationProcessEquDo> getConflictId(@Param("equId") String equId,@Param("id") String id,
                                @Param("startTime")Date startTime,@Param("endTime") Date endTime);
+
+    @Select("select * from aps_process_operation_process_equ where DELETED = 0 AND PROCESSDEVICEID = #{processdeviceid} AND ID != #{apsProcessOperationProcessEquDoId} AND (WAITREPORTID IS NOT NULL AND WAITREPORTID != '')")
+    List<ApsProcessOperationProcessEquDo> selectOtherDeviceList(@Param("processdeviceid") String processdeviceid, @Param("apsProcessOperationProcessEquDoId") String apsProcessOperationProcessEquDoId);
+
+    @Update("update sys_serial_number set CURVALUE = CURVALUE - ${needCancelNumber} where MODULECODE = #{moduleCode}")
+    void updateSerialNumber(@Param("moduleCode") String moduleCode, @Param("needCancelNumber") int needCancelNumber);
 }
 
 

+ 1 - 1
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProductionOrderDao.java

@@ -33,7 +33,7 @@ public interface ApsProductionOrderDao extends BaseMapper<ApsProductionOrderDo>
 
     @Select("select o.ID,o.ORDERNO,o.CREATEUSERID,o.CREATEUSERNAME,u.EMAIL as MODIFYUSERNAME from aps_production_order o\n" +
             "left join sys_user u on o.CREATEUSERID=u.ID and u.DELETED='0'\n" +
-            "where o.DELETED='0' and IFNULL(o.ORDERNO,'')!='' and o.AUDITSTATUS!='已发布计划' and o.AUDITSTATUS!='已完工关闭'\n" +
+            "where o.DELETED='0' and IFNULL(o.ORDERNO,'')!='' and o.AUDITSTATUS!='已发布计划' and o.AUDITSTATUS!='已完工关闭' and o.ORDERNO='DD20240518205'\n" +
             "\tand ((IFNULL(o.CHANGEDATE,'')='' and TIMESTAMPDIFF(HOUR,o.ORDERDATE,NOW())>48) or (IFNULL(o.CHANGEDATE,'')!='' and TIMESTAMPDIFF(HOUR,o.CHANGEDATE,NOW())>48))")
     List<ApsProductionOrderDo> getOrderOuttimeAudit();
 

+ 9 - 4
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsReportRecordsDao.java

@@ -3,6 +3,7 @@ package com.rongwei.bscommon.sys.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.bsentity.domain.ApsCheckParameterDo;
 import com.rongwei.bsentity.domain.ApsParameterDo;
+import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
 import com.rongwei.bsentity.domain.ApsReportRecordsDo;
 import com.rongwei.bsentity.vo.OrganizationCodeAndDeviceCodeVo;
 import org.apache.ibatis.annotations.Delete;
@@ -10,6 +11,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -23,11 +25,11 @@ public interface ApsReportRecordsDao extends BaseMapper<ApsReportRecordsDo> {
     @Update("update asp_check_items set WAITREPORTID = #{id} where ID = #{processdeviceid}")
     void updateDeviceWaitReportId(@Param("id") String id, @Param("processdeviceid") String processdeviceid);
 
-    @Update("update aps_process_operation_process_equ set BACHMATERIALPROCESS = REPLACE(REPLACE(REPLACE(BACHMATERIALPROCESS,'${inputBatchNumber},',''),',${inputBatchNumber}',''),'${inputBatchNumber}','') where PROCESSID = #{id}")
-    void updateBatchMaterialProcess(@Param("inputBatchNumber") String inputBatchNumber, @Param("id") String id);
+//    @Update("update aps_process_operation_process_equ set BACHMATERIALPROCESS = REPLACE(REPLACE(REPLACE(BACHMATERIALPROCESS,'${inputBatchNumber},',''),',${inputBatchNumber}',''),'${inputBatchNumber}','') where PROCESSID = #{id}")
+//    void updateBatchMaterialProcess(@Param("inputBatchNumber") String inputBatchNumber, @Param("id") String id);
 
-    @Update("update aps_process_operation_process_equ set BACHMATERIALPROCESS = REPLACE(REPLACE(REPLACE(BACHMATERIALPROCESS,'${inputBatchNumber},',''),',${inputBatchNumber}',''),'${inputBatchNumber}','') where PROCESSID in (${processIds})")
-    void updateBatchMaterialProcessBatch(@Param("inputBatchNumber") String inputBatchNumber, @Param("processIds") String processIds);
+//    @Update("update aps_process_operation_process_equ set BACHMATERIALPROCESS = REPLACE(REPLACE(REPLACE(BACHMATERIALPROCESS,'${inputBatchNumber},',''),',${inputBatchNumber}',''),'${inputBatchNumber}','') where PROCESSID in (${processIds})")
+//    void updateBatchMaterialProcessBatch(@Param("inputBatchNumber") String inputBatchNumber, @Param("processIds") String processIds);
 
     @Select("select ap.ID AS 'id',ap.PARAMETER AS 'parameter' from aps_production_processes app LEFT JOIN aps_parameter ap ON app.ID = ap.MAINID AND ap.DELETED = 0 where app.PRODUCTPROCESSNAME = #{process}")
     List<ApsParameterDo> selectApsParameterByProcess(@Param("process") String process);
@@ -52,6 +54,9 @@ public interface ApsReportRecordsDao extends BaseMapper<ApsReportRecordsDo> {
 
     @Update("update aps_process_operation_process_equ set BACHMATERIALPROCESS = REPLACE(REPLACE(REPLACE(BACHMATERIALPROCESS,'${inputBatchNumber},',''),',${inputBatchNumber}',''),'${inputBatchNumber}','') where DELETED = 0 AND PREVIOUSPROCESSESIDS = #{previousprocessesids}")
     void updateAllProcessEquBatchNumber(@Param("inputBatchNumber") String inputBatchNumber, @Param("previousprocessesids") String previousprocessesids);
+
+    @Select("select * from aps_process_operation_process_equ where DELETED = 0 AND ID != #{id} AND PROCESSDEVICEID = #{processdeviceid} AND PLANSTARTDATE = #{planstartdate} AND (WAITREPORTID is null or WAITREPORTID = '') AND CLOSESTATUS = '未完工'")
+    List<ApsProcessOperationProcessEquDo> selectOtherMergeProcessEqu(@Param("id") String id, @Param("processdeviceid") String processdeviceid, @Param("planstartdate") Date planstartdate);
 }
 
 

+ 1 - 1
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsBlankOrderService.java

@@ -51,6 +51,6 @@ public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
     R checkAndUpdateBlankAndOutput(ApsProductionTechnicalRequirementDo req);
     void updateBlankSplicingColumn(String blankId);
 
-    R checkSchedule(List<String> blankIdList);
+    R checkSchedule(CheckScheduleReq req);
 
 }

+ 2 - 2
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsProcessOperationService.java

@@ -2,7 +2,7 @@ package com.rongwei.bscommon.sys.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwei.bsentity.domain.ApsProcessOperationDo;
-import com.rongwei.bsentity.domain.ApsProcessOperationOutMaterDo;
+import com.rongwei.bsentity.vo.ResetProcessOperationVo;
 import com.rongwei.rwcommon.base.R;
 
 import java.util.List;
@@ -37,7 +37,7 @@ public interface ApsProcessOperationService extends IService<ApsProcessOperation
     /*
     更新后面所有工序信息
      */
-    R resetProcessOperation(List<ApsProcessOperationOutMaterDo> apsProcessOperationOutMaterDoList);
+    R resetProcessOperation(ResetProcessOperationVo params);
 
     R updateBorrowProcess(Map<String, Object> params);
 

+ 2 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsReportRecordsService.java

@@ -18,4 +18,6 @@ public interface ApsReportRecordsService extends IService<ApsReportRecordsDo> {
     R startReport(StartRePortReq req);
 
     R saveReport(SaveReportReq req);
+
+    R checkMergeProcess(ApsReportRecordsDo req);
 }

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

@@ -609,30 +609,47 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             // 回写订单排程交货期
             Map<String, Date> orderDeliveryTime = new HashMap<>();
             // 坯料计划ID集合
+            List<String> blankKeys = new ArrayList<>();
             List<ApsBlankOrderDo> blankIds = new ArrayList<>();
             for (ProductionProcesses process : lastProcess) {
                 List<ProduceOrder> produceOrder = process.getProduceOrder();
                 if (produceOrder != null && produceOrder.size() > 0) {
                     for (ProduceOrder order : produceOrder) {
                         Date endDate = Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant());
-                        ApsBlankOrderDo blankOrder = this.getById(order.getId());
-                        ApsBlankOrderDo updateBlank = new ApsBlankOrderDo();
-                        updateBlank.setId(order.getId());
-                        updateBlank.setSchedulingstatus(TO_BE_PUBLISHED);
-                        updateBlank.setScheduledateend(endDate);
-                        updateBlank.setPromisedateend(endDate);
-                        blankIds.add(updateBlank);
-                        if (orderDeliveryTime.containsKey(blankOrder.getProductionorderid())) {
-                            // 对比取最大值
-                            if (endDate.compareTo(orderDeliveryTime.get(blankOrder.getProductionorderid())) > 0) {
+                        List<ApsBlankOrderDo> hasblanks = blankIds.stream().filter(v -> v.getId().equals(order.getId())).collect(Collectors.toList());
+                        if(hasblanks != null && hasblanks.size()>0){
+                            ApsBlankOrderDo blankOrderDo = hasblanks.get(0);
+                            if(blankOrderDo.getScheduledatestart().compareTo(endDate)>0){
+                                blankOrderDo.setScheduledatestart(endDate);
+                            }
+                            if(blankOrderDo.getScheduledateend().compareTo(endDate)<0){
+                                blankOrderDo.setScheduledateend(endDate);
+                            }
+                        }else{
+                            ApsBlankOrderDo blankOrder = this.getById(order.getId());
+                            ApsBlankOrderDo updateBlank = new ApsBlankOrderDo();
+                            updateBlank.setId(order.getId());
+                            updateBlank.setSchedulingstatus(TO_BE_PUBLISHED);
+                            updateBlank.setScheduledatestart(endDate);
+                            updateBlank.setScheduledateend(endDate);
+                            updateBlank.setPromisedateend(endDate);
+                            // 自动加锁坯料计划
+                            updateBlank.setLockmark("y");
+                            blankIds.add(updateBlank);
+                            blankKeys.add(updateBlank.getId());
+                            if (orderDeliveryTime.containsKey(blankOrder.getProductionorderid())) {
+                                // 对比取最大值
+                                if (endDate.compareTo(orderDeliveryTime.get(blankOrder.getProductionorderid())) > 0) {
+                                    orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
+                                }
+                            } else {
                                 orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
                             }
-                        } else {
-                            orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
                         }
                     }
                 }
             }
+
             // 更新订单的排程交货期、排程状态
             if (orderDeliveryTime.size() > 0) {
                 orderDeliveryTime.forEach((k, v) -> {
@@ -652,6 +669,11 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             if (blankIds != null && blankIds.size() > 0) {
                 this.updateBatchById(blankIds);
             }
+
+            // 自动加锁坯料计划下的工序作业
+            apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>().in(ApsProcessOperationDo::getBlankid,blankKeys).set(ApsProcessOperationDo::getLockmark,"y"));
+            // 自动加锁坯料计划下的排程作业明细
+            apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid,blankKeys).set(ApsProcessOperationProcessEquDo::getLockmark,"y"));
         }
 
         backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses());
@@ -2314,13 +2336,40 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     }
 
     @Override
-    public R checkSchedule(List<String> blankIdList) {
+    public R checkSchedule(CheckScheduleReq req) {
         //是否正在排程
         ApsUtils.checkScheduling(null);
+        CheckScheduleVo checkScheduleVo = null;
+        //根据订单ID查询
+        if (ObjectUtil.isNotEmpty(req.getOrderId())) {
+            checkScheduleVo = apsProcessOperationBackupDao.selectBackByOrderId(req.getOrderId());
+        }
+        if (ObjectUtil.isNotEmpty(req.getBlankIdList())) {
+            checkScheduleVo = apsProcessOperationBackupDao.selectBackByBlankIdList(req.getBlankIdList());
+        }
+        CheckScheduleResponse checkScheduleResponse = new CheckScheduleResponse();
+        if (ObjectUtil.isEmpty(checkScheduleVo)) {
+            checkScheduleResponse.setNeedWarning(true);
+            checkScheduleResponse.setWarningMessage("修改坯料计划后需要重新排程,确认修改吗?");
+            return R.ok(checkScheduleResponse);
+        }
+        //获取当前用户
+        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
 
-        //判断当前坯料计划是否存在排程备份
-
+        if (ObjectUtil.isNotEmpty(checkScheduleVo.getCount()) && checkScheduleVo.getCount().equals(0)) {
+            checkScheduleResponse.setNeedWarning(true);
+            checkScheduleResponse.setWarningMessage("修改坯料计划后需要重新排程,确认修改吗?");
+            return R.ok(checkScheduleResponse);
+        }
+        if (ObjectUtil.isNotEmpty(checkScheduleVo.getBackUpUserId()) && checkScheduleVo.getBackUpUserId().equals(currentUser.getId())) {
+            checkScheduleResponse.setNeedWarning(true);
+            checkScheduleResponse.setWarningMessage("该操作会导致您的排程结果备份不可恢复,确认继续吗?");
+            return R.ok(checkScheduleResponse);
+        } else {
+            checkScheduleResponse.setNeedWarning(true);
+            checkScheduleResponse.setWarningMessage(checkScheduleVo.getBackUpUserName() + "正在排程,该操作会导致其排程结果备份不可恢复,确认继续吗?");
+            return R.ok(checkScheduleResponse);
+        }
 
-        return null;
     }
 }

File diff suppressed because it is too large
+ 106 - 64
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationServiceImpl.java


+ 12 - 10
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportOutputServiceImpl.java

@@ -71,7 +71,7 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
                         vo.setRuleTemplateStr(req.getMark() + req.getYearCode() + req.getMonthCode() + req.getEquipmentCode() + req.getCodeRule());
                         vo.setResetrule("date:yyyyMM");
                         vo.setIfautomaticreset("y");
-                        vo.setInitValue(0L);
+                        vo.setInitValue(1L);
                         Map<String, Object> codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
                         String code = codeData.get("code").toString();
 
@@ -86,16 +86,18 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
                         apsReportOutputDo.setWidth(apsProcessOperationOutMaterDo.getProwidth());
                         apsReportOutputDo.setLength(apsProcessOperationOutMaterDo.getProlength());
                         apsReportOutputDo.setWeight(apsProcessOperationOutMaterDo.getSinglerollweight());
-//                        apsReportOutputDo.setInsepctionlevel(B);
-//                        apsReportOutputDo.setQualified("是");
+                        apsReportOutputDo.setInsepctionlevel(B);
+                        apsReportOutputDo.setQualified("是");
                         resList.add(apsReportOutputDo);
                     }
                 }
             }
             if (req.getBlankType().equals("热轧")) {
+                int j = 0;
                 for (ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo : list) {
                     int outval = apsProcessOperationOutMaterDo.getOutval();
                     for (int i = 1; i <= outval; i++) {
+                        j++;
                         //插入记录物料子表
                         ApsReportOutputDo apsReportOutputDo = new ApsReportOutputDo();
                         apsReportOutputDo.setId(SecurityUtil.getUUID());
@@ -104,7 +106,7 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
                         apsReportOutputDo.setOutputmaterial(apsProcessOperationOutMaterDo.getOutputmaterial());
                         apsReportOutputDo.setLevel(req.getLevel());
                         //生成批次号
-                        String code = req.getMark() + req.getYearCode() + req.getMonthCode() + req.getEquipmentCode() + req.getHeatNumber() + i;
+                        String code = req.getMark() + req.getYearCode() + req.getMonthCode() + req.getEquipmentCode() + req.getHeatNumber() + j;
                         apsReportOutputDo.setOutputnumber(code);
                         JSONObject json = new JSONObject();
                         json.put("batchNumber", code);
@@ -115,8 +117,8 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
                         apsReportOutputDo.setWidth(apsProcessOperationOutMaterDo.getProwidth());
                         apsReportOutputDo.setLength(apsProcessOperationOutMaterDo.getProlength());
                         apsReportOutputDo.setWeight(apsProcessOperationOutMaterDo.getSinglerollweight());
-//                        apsReportOutputDo.setInsepctionlevel(B);
-//                        apsReportOutputDo.setQualified("是");
+                        apsReportOutputDo.setInsepctionlevel(B);
+                        apsReportOutputDo.setQualified("是");
                         resList.add(apsReportOutputDo);
                     }
                 }
@@ -137,8 +139,8 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
                 apsReportOutputDo.setWidth(list.get(0).getProwidth());
                 apsReportOutputDo.setLength(list.get(0).getProlength());
                 apsReportOutputDo.setWeight(list.get(0).getSinglerollweight());
-//                apsReportOutputDo.setInsepctionlevel(B);
-//                apsReportOutputDo.setQualified("是");
+                apsReportOutputDo.setInsepctionlevel(B);
+                apsReportOutputDo.setQualified("是");
                 JSONObject json = new JSONObject();
                 json.put("batchNumber", req.getInputBatchNumber());
                 //生成二维码
@@ -185,8 +187,8 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
                         apsReportOutputDo.setWidth(apsProcessOperationOutMaterDo.getProwidth());
                         apsReportOutputDo.setLength(apsProcessOperationOutMaterDo.getProlength());
                         apsReportOutputDo.setWeight(apsProcessOperationOutMaterDo.getSinglerollweight());
-//                        apsReportOutputDo.setInsepctionlevel(B);
-//                        apsReportOutputDo.setQualified("是");
+                        apsReportOutputDo.setInsepctionlevel(B);
+                        apsReportOutputDo.setQualified("是");
                         resList.add(apsReportOutputDo);
                     }
                 }

+ 203 - 75
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportRecordsServiceImpl.java

@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -121,8 +122,8 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         //查询作业明细详情
         ApsProcessOperationProcessEquDo equDo = apsProcessOperationProcessEquDao.selectById(processequid);
 
-        //更新设备的待报工记录ID
-        apsProcessOperationProcessEquDao.updateEquByCancelRecord(recordId, equDo.getProcessdeviceid());
+//        //更新设备的待报工记录ID
+//        apsProcessOperationProcessEquDao.updateEquByCancelRecord(recordId, equDo.getProcessdeviceid());
 
         //作业明细的作业状态
         /**
@@ -174,6 +175,15 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
 
         apsProcessOperationProcessEquDao.updateById(apsProcessOperationProcessEquDo);
 
+        //如果没有输入批次号,取消开工需要还原
+        if (ObjectUtil.isEmpty(recordsDo.getBatchnumber())) {
+            //如果开工时间是当前月,需要取消流水号
+            if (DateUtil.month(recordsDo.getStartworktime()) == DateUtil.month(DateUtil.date())) {
+                //轧机/熔炉 对应炉号 流水号配置表中的值-1, 如果是铸轧,需要减去 输出物料的单卷数合计
+                this.cancelNumber(equDo);
+            }
+        }
+
         //更新其余信息
         CommonUpdateProductionStatusReq commonUpdateProductionStatusReq = new CommonUpdateProductionStatusReq();
         commonUpdateProductionStatusReq.setProcessOperationEquId(equDo.getId());
@@ -182,6 +192,29 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         return R.ok();
     }
 
+    private void cancelNumber(ApsProcessOperationProcessEquDo equDo) {
+        //炉号-1
+        //加工设备ID
+        String processdeviceid = equDo.getProcessdeviceid();
+        //在流水表中的 标识
+        String moduleCode = "aps_report_output_heat_" + processdeviceid;
+        apsProcessOperationProcessEquDao.updateSerialNumber(moduleCode, 1);
+
+        //查询坯料计划
+        ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(equDo.getBlankid());
+        if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getBlanktype()) && apsBlankOrderDo.getBlanktype().equals("铸轧")) {
+            //查询 工序作业明细对应的 输出物料
+            List<ApsProcessOperationOutMaterDo> list = apsProcessOperationOutMaterService.list(new QueryWrapper<ApsProcessOperationOutMaterDo>().lambda().eq(ApsProcessOperationOutMaterDo::getMainid, equDo.getProcessid()));
+            //合计需要减的值
+            int needCancelValue = 0;
+            for (ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo : list) {
+                needCancelValue += apsProcessOperationOutMaterDo.getOutval();
+            }
+            apsProcessOperationProcessEquDao.updateSerialNumber("aps_report_output_" + processdeviceid, needCancelValue);
+        }
+
+    }
+
     @Override
     @Transactional
     public R startReport(StartRePortReq req) {
@@ -196,26 +229,57 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         //查询订单的详情
         ApsProductionOrderDo apsProductionOrderDo = apsProductionOrderService.getById(apsBlankOrderDo.getProductionorderid());
 
-        //根据设备ID查询对应车间代号和设备代号
-        OrganizationCodeAndDeviceCodeVo organizationCodeAndDeviceCodeVo = this.baseMapper.selectOrganizationCodeAndDeviceCode(apsProcessOperationProcessEquDo.getProcessdeviceid());
-        if (ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo) || ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo.getDeviceCode()) || ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo.getOrganizationCode())) {
-            return R.error("未找到对应的车间代号和设备代号");
-        }
-        //设备的待加工ID
-        String waitReportId = organizationCodeAndDeviceCodeVo.getWaitReportId();
-        //如果工序作业加工设备已有其他作业状态为已开工,错误提示:该设备当前加工中的作业还未报工,不能开工新的作业
-        if (ObjectUtil.isNotEmpty(waitReportId)) {
-            //查询当前报工的工序作业明细详情
-            ApsReportRecordsDo apsReportRecordsDo = this.getById(waitReportId);
-            String processequid = apsReportRecordsDo.getProcessequid();
-            ApsProcessOperationProcessEquDo doingProcessEqu = apsProcessOperationProcessEquService.getById(processequid);
-            //计划开工时间不相等,表示不是合并工序
-            if (doingProcessEqu.getPlanstartdate().compareTo(apsProcessOperationProcessEquDo.getPlanstartdate()) != 0) {
+        if (ObjectUtil.isEmpty(req.getInputBatchNumber())) {
+            //根据设备ID查询对应车间代号和设备代号
+            OrganizationCodeAndDeviceCodeVo organizationCodeAndDeviceCodeVo = this.baseMapper.selectOrganizationCodeAndDeviceCode(apsProcessOperationProcessEquDo.getProcessdeviceid());
+            if (ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo) || ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo.getDeviceCode()) || ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo.getOrganizationCode())) {
+                return R.error("未找到对应的车间代号和设备代号");
+            }
+        }
+        /**
+         * 如果工序作业明细加工设备已有其他作业明细正在加工(待报工记录ID不为空),
+         * 并且(不是排程合并作业,或者与工序作业明细不是同一排程合并作业),
+         * 则错误提示:该设备当前加工中的作业还未报工,不能开工新的作业
+         */
+        //当前工序作业明细的加工设备ID
+        String processdeviceid = apsProcessOperationProcessEquDo.getProcessdeviceid();
+        //当前工序作业明细的ID
+        String apsProcessOperationProcessEquDoId = apsProcessOperationProcessEquDo.getId();
+        //查询当前工序作业的作业明细的 加工设备 对应的其他工序作业的作业明细 并且待报工记录ID不为空
+        List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquDao.selectOtherDeviceList(processdeviceid, apsProcessOperationProcessEquDoId);
+//        List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquService.list(
+//                new QueryWrapper<ApsProcessOperationProcessEquDo>().lambda()
+//                        .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, processdeviceid)//当前工序作业的作业明细的 加工设备
+//                        .ne(ApsProcessOperationProcessEquDo::getId, apsProcessOperationProcessEquDoId)//对应的其他工序作业的作业明细
+//                        .isNotNull(ApsProcessOperationProcessEquDo::getWaitreportid)//待报工记录ID不为空
+//        );
+        //存在已使用,判断是否是合并作业 (计划开工时间相同)
+        if (ObjectUtil.isNotEmpty(list)) {
+            //已开工的作业明细的计划开工时间
+            Date planstartdate = list.get(0).getPlanstartdate();
+            //开工时间不用
+            if (planstartdate.compareTo(apsProcessOperationProcessEquDo.getPlanstartdate()) != 0) {
                 return R.error("该设备当前加工中的作业还未报工,不能开工新的作业");
             }
         }
 
 
+//        //设备的待加工ID
+//        String waitReportId = organizationCodeAndDeviceCodeVo.getWaitReportId();
+//        //如果工序作业加工设备已有其他作业状态为已开工,错误提示:该设备当前加工中的作业还未报工,不能开工新的作业
+//        if (ObjectUtil.isNotEmpty(waitReportId)) {
+//            String oldWaitReportId = waitReportId.split(",")[0];
+//            //查询当前报工的工序作业明细详情
+//            ApsReportRecordsDo apsReportRecordsDo = this.getById(oldWaitReportId);
+//            String processequid = apsReportRecordsDo.getProcessequid();
+//            ApsProcessOperationProcessEquDo doingProcessEqu = apsProcessOperationProcessEquService.getById(processequid);
+//            //计划开工时间不相等,表示不是合并工序
+//            if (doingProcessEqu.getPlanstartdate().compareTo(apsProcessOperationProcessEquDo.getPlanstartdate()) != 0) {
+//                return R.error("该设备当前加工中的作业还未报工,不能开工新的作业");
+//            }
+//        }
+
+
         //获取当前用户相关信息
         SysUserVo currentUser = CXCommonUtils.getCurrentUser();
         String tenantId = currentUser.getOrganizationDoList().get(0).getFullpid().split(",")[1];
@@ -260,9 +324,9 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         apsReportRecordsDo.setCheckstatus("待检验");
         //设备参数
         apsReportRecordsDo.setDeviceparm(equparames);
+        //注意事项
+        apsReportRecordsDo.setAttention(apsProcessOperationDo.getRemark());
 
-        //保存主表
-        this.save(apsReportRecordsDo);
 
         //=================更新工序作业明细的报工ID、已开工卷数============
         //将报工记录ID存入工序作业的设备子表中
@@ -293,12 +357,12 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         //===============更新工序作业==================
         this.baseMapper.updateProcessActualStartDate(apsProcessOperationDo.getId());
 
-        //=============更新设备的报工记录ID=============
-        String newWaitReportId = "";
-        if (ObjectUtil.isNotEmpty(waitReportId)) {
-            newWaitReportId = waitReportId + "," + apsReportRecordsDo.getId();
-        }
-        this.baseMapper.updateDeviceWaitReportId(newWaitReportId, apsProcessOperationProcessEquDo.getProcessdeviceid());
+//        //=============更新设备的报工记录ID=============
+//        String newWaitReportId = "";
+//        if (ObjectUtil.isNotEmpty(waitReportId)) {
+//            newWaitReportId = waitReportId + "," + apsReportRecordsDo.getId();
+//        }
+//        this.baseMapper.updateDeviceWaitReportId(newWaitReportId, apsProcessOperationProcessEquDo.getProcessdeviceid());
 
         //==========输入物料有批次号==============
         if (ObjectUtil.isNotEmpty(req.getInputBatchNumber())) {
@@ -324,17 +388,55 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         }
 
         //==========输出物料子表信息============
-        InsertMyReportOutputReq req2 = new InsertMyReportOutputReq();
-        req2.setProcessId(apsProcessOperationDo.getId());
-        req2.setIfBlankProcess(apsProcessOperationDo.getIfblankprocess());
-        req2.setBlankType(apsBlankOrderDo.getBlanktype());
-        req2.setMainId(apsReportRecordsDo.getId());
-        req2.setLevel(apsProcessOperationDo.getLevel());
-        R r = apsReportOutputService.insertMyReportOutputWithOutBatchNumber(req2);
+//        InsertMyReportOutputReq req2 = new InsertMyReportOutputReq();
+//        req2.setProcessId(apsProcessOperationDo.getId());
+//        req2.setIfBlankProcess(apsProcessOperationDo.getIfblankprocess());
+//        req2.setBlankType(apsBlankOrderDo.getBlanktype());
+//        req2.setMainId(apsReportRecordsDo.getId());
+//        req2.setLevel(apsProcessOperationDo.getLevel());
+//        R r = apsReportOutputService.insertMyReportOutputWithOutBatchNumber(req2);
+//        if (!r.getCode().equals("200")) {
+//            return R.error(r.getMsg());
+//        }
+        //============保存(报工)时,生成炉号和批次号=============
+        //获取设备/炉 的炉号(每月、每个设备/炉 更新)
+        String heatNumber;//初始化炉号
+        //调用通用接口生成炉号
+        SysSerialVo vo = new SysSerialVo();
+        vo.setModulecode("aps_report_output_heat_" + apsProcessOperationProcessEquDo.getProcessdeviceid());
+        vo.setRuleTemplateStr("@{serialNumber:#000}");
+        vo.setResetrule("date:yyyyMM");
+        vo.setIfautomaticreset("y");
+        vo.setInitValue(1L);
+        Map<String, Object> codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
+        heatNumber = codeData.get("code").toString();
+
+        apsReportRecordsDo.setHeatnumber(heatNumber);
+        //保存主表
+        this.save(apsReportRecordsDo);
+
+        OrganizationCodeAndDeviceCodeVo organizationCodeAndDeviceCodeVo = this.baseMapper.selectOrganizationCodeAndDeviceCode(apsProcessOperationProcessEquDo.getProcessdeviceid());
+
+        InsertMyReportOutputReq insertMyReportOutputReq = new InsertMyReportOutputReq();
+        insertMyReportOutputReq.setMainId(apsReportRecordsDo.getId());
+        insertMyReportOutputReq.setProcessId(apsProcessOperationDo.getId());
+        insertMyReportOutputReq.setIfBlankProcess(apsProcessOperationDo.getIfblankprocess());
+        insertMyReportOutputReq.setDeviceId(apsProcessOperationProcessEquDo.getProcessdeviceid());
+        insertMyReportOutputReq.setMark(organizationCodeAndDeviceCodeVo.getOrganizationCode());
+        insertMyReportOutputReq.setYearCode((DateUtil.year(DateUtil.date()) % 100) + "");
+        insertMyReportOutputReq.setMonthCode(SaveConstans.MONTH_CODE_LIST.get(DateUtil.month(DateUtil.date())));
+        insertMyReportOutputReq.setEquipmentCode(organizationCodeAndDeviceCodeVo.getDeviceCode());
+        insertMyReportOutputReq.setHeatNumber(heatNumber);
+        insertMyReportOutputReq.setInputBatchNumber(apsReportRecordsDo.getBatchnumber());
+        insertMyReportOutputReq.setBlankType(apsBlankOrderDo.getBlanktype());
+        insertMyReportOutputReq.setLevel(apsProcessOperationDo.getLevel());
+
+        R r = apsReportOutputService.insertMyReportOutput(insertMyReportOutputReq);
         if (!r.getCode().equals("200")) {
-            return R.error(r.getMsg());
+            throw new CustomException(r.getMsg());
         }
 
+
         //=============加工参数子表信息、检查项目子表信息================
         if (ObjectUtil.isNotEmpty(apsProcessOperationDo.getProcess())) {
             //根据工序查询其工序的加工参数
@@ -448,7 +550,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         req3.setProcessOperationEquId(apsProcessOperationProcessEquDo.getId());
         R r2 = apsProcessOperationProcessEquService.updateProductionStatus(req3);
         if (!r2.getCode().equals("200")) {
-            return R.error(r2.getMsg());
+            throw new CustomException(r2.getMsg());
         }
 
         return R.ok(apsReportRecordsDo);
@@ -466,6 +568,12 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         //报工坯料成分
         List<ApsReportBlankCompentDo> apsReportBlankCompentDoList = req.getApsReportBlankCompentDoList();
 
+        for (ApsReportOutputDo apsReportOutputDo : apsReportOutputDoList) {
+            if (ObjectUtil.isEmpty(apsReportOutputDo.getInsepctionlevel())) {
+                return R.error("检验等级不能为空");
+            }
+        }
+
         //没有新增,只会更新
         apsReportRecordsDo.setCheckstatus("待检验");
 
@@ -533,23 +641,23 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         //==============更新工序作业信息==============
         this.baseMapper.updateProcessReportRoll(apsProcessOperationDo.getId());
 
-        //=============更新设备的报工记录ID===========
-        apsProcessOperationProcessEquDao.updateEquByCancelRecord(apsReportRecordsDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
-
-        //============保存(报工)时,生成炉号和批次号=============
-        //获取设备/炉 的炉号(每月、每个设备/炉 更新)
-        String heatNumber;//初始化炉号
-        //调用通用接口生成炉号
-        SysSerialVo vo = new SysSerialVo();
-        vo.setModulecode("aps_report_output_heat_" + apsProcessOperationProcessEquDo.getProcessdeviceid());
-        vo.setRuleTemplateStr("@{serialNumber:#000}");
-        vo.setResetrule("date:yyyyMM");
-        vo.setIfautomaticreset("y");
-        vo.setInitValue(0L);
-        Map<String, Object> codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
-        heatNumber = codeData.get("code").toString();
-
-        apsReportRecordsDo.setHeatnumber(heatNumber);
+//        //=============更新设备的报工记录ID===========
+//        apsProcessOperationProcessEquDao.updateEquByCancelRecord(apsReportRecordsDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
+
+//        //============保存(报工)时,生成炉号和批次号=============
+//        //获取设备/炉 的炉号(每月、每个设备/炉 更新)
+//        String heatNumber;//初始化炉号
+//        //调用通用接口生成炉号
+//        SysSerialVo vo = new SysSerialVo();
+//        vo.setModulecode("aps_report_output_heat_" + apsProcessOperationProcessEquDo.getProcessdeviceid());
+//        vo.setRuleTemplateStr("@{serialNumber:#000}");
+//        vo.setResetrule("date:yyyyMM");
+//        vo.setIfautomaticreset("y");
+//        vo.setInitValue(1L);
+//        Map<String, Object> codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
+//        heatNumber = codeData.get("code").toString();
+//
+//        apsReportRecordsDo.setHeatnumber(heatNumber);
         //报工状态
         apsReportRecordsDo.setReportworkstatus("已报工");
         //如过报工时间为空,填入当前时间
@@ -559,31 +667,31 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
 
         this.updateById(apsReportRecordsDo);
 
-        //物理删除原来的报工记录输出物料
-        this.baseMapper.deleteOutputmaterialbyMainId(apsReportRecordsDo.getId());
-
+//        //物理删除原来的报工记录输出物料
+//        this.baseMapper.deleteOutputmaterialbyMainId(apsReportRecordsDo.getId());
+//
         OrganizationCodeAndDeviceCodeVo organizationCodeAndDeviceCodeVo = this.baseMapper.selectOrganizationCodeAndDeviceCode(apsProcessOperationProcessEquDo.getProcessdeviceid());
-        if (ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo)) {
-            return R.error("未找到对应的车间代号和设备代号");
-        }
-        InsertMyReportOutputReq insertMyReportOutputReq = new InsertMyReportOutputReq();
-        insertMyReportOutputReq.setMainId(apsReportRecordsDo.getId());
-        insertMyReportOutputReq.setProcessId(apsProcessOperationDo.getId());
-        insertMyReportOutputReq.setIfBlankProcess(apsProcessOperationDo.getIfblankprocess());
-        insertMyReportOutputReq.setDeviceId(apsProcessOperationProcessEquDo.getProcessdeviceid());
-        insertMyReportOutputReq.setMark(organizationCodeAndDeviceCodeVo.getOrganizationCode());
-        insertMyReportOutputReq.setYearCode((DateUtil.year(DateUtil.date()) % 100) + "");
-        insertMyReportOutputReq.setMonthCode(SaveConstans.MONTH_CODE_LIST.get(DateUtil.month(DateUtil.date())));
-        insertMyReportOutputReq.setEquipmentCode(organizationCodeAndDeviceCodeVo.getDeviceCode());
-        insertMyReportOutputReq.setHeatNumber(heatNumber);
-        insertMyReportOutputReq.setInputBatchNumber(apsReportRecordsDo.getBatchnumber());
-        insertMyReportOutputReq.setBlankType(apsBlankOrderDo.getBlanktype());
-        insertMyReportOutputReq.setLevel(apsProcessOperationDo.getLevel());
-
-        R r = apsReportOutputService.insertMyReportOutput(insertMyReportOutputReq);
-        if (!r.getCode().equals("200")) {
-            return R.error(r.getMsg());
-        }
+//        if (ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo)) {
+//            return R.error("未找到对应的车间代号和设备代号");
+//        }
+//        InsertMyReportOutputReq insertMyReportOutputReq = new InsertMyReportOutputReq();
+//        insertMyReportOutputReq.setMainId(apsReportRecordsDo.getId());
+//        insertMyReportOutputReq.setProcessId(apsProcessOperationDo.getId());
+//        insertMyReportOutputReq.setIfBlankProcess(apsProcessOperationDo.getIfblankprocess());
+//        insertMyReportOutputReq.setDeviceId(apsProcessOperationProcessEquDo.getProcessdeviceid());
+//        insertMyReportOutputReq.setMark(organizationCodeAndDeviceCodeVo.getOrganizationCode());
+//        insertMyReportOutputReq.setYearCode((DateUtil.year(DateUtil.date()) % 100) + "");
+//        insertMyReportOutputReq.setMonthCode(SaveConstans.MONTH_CODE_LIST.get(DateUtil.month(DateUtil.date())));
+//        insertMyReportOutputReq.setEquipmentCode(organizationCodeAndDeviceCodeVo.getDeviceCode());
+//        insertMyReportOutputReq.setHeatNumber(heatNumber);
+//        insertMyReportOutputReq.setInputBatchNumber(apsReportRecordsDo.getBatchnumber());
+//        insertMyReportOutputReq.setBlankType(apsBlankOrderDo.getBlanktype());
+//        insertMyReportOutputReq.setLevel(apsProcessOperationDo.getLevel());
+//
+//        R r = apsReportOutputService.insertMyReportOutput(insertMyReportOutputReq);
+//        if (!r.getCode().equals("200")) {
+//            return R.error(r.getMsg());
+//        }
 
         //查询新的输出物料
         List<ApsReportOutputDo> newOutputDos = apsReportOutputService.list(new QueryWrapper<ApsReportOutputDo>().lambda().eq(ApsReportOutputDo::getMainid, apsReportRecordsDo.getId()));
@@ -748,6 +856,26 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         }
     }
 
+    @Override
+    public R checkMergeProcess(ApsReportRecordsDo req) {
+        //作业明细的ID
+        String processequid = req.getProcessequid();
+        //当前报工的作业明细的详情
+        ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(processequid);
+        //查询其他 与当前作业明细计划开工时间相同,并且未开工(待报工记录ID为空)的作业明细
+        List<ApsProcessOperationProcessEquDo> list = this.baseMapper.selectOtherMergeProcessEqu(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid(), apsProcessOperationProcessEquDo.getPlanstartdate());
+        CheckMergeProcessResopnse res = new CheckMergeProcessResopnse();
+        if (list.size() > 0) {
+            //查询当前工序作业明细的工序详情
+            ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(req.getProcessoperationid());
+            res.setNeedWarning(true);
+            res.setWarningMessage("该合并作业" + apsProcessOperationDo.getProcess() + "还有其他作业需要一起开工,请及时开工");
+            return R.ok(res);
+        }
+
+        return R.ok(res);
+    }
+
 }
 
 

+ 43 - 32
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsServiceImpl.java

@@ -100,20 +100,23 @@ public class ApsServiceImpl implements ApsService {
                 if (fbNotLock != null && fbNotLock.size() > 0) {
                     apsBlankOrders.addAll(fbNotLock);
                 }
-
-                // 模型转换
-//                ProductionScheduleVo productionScheduleVo = apsBlankOrderService.apsPlanModelSet(apsBlankOrders);
-                ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(apsBlankOrders);
-                JSONConfig jsonConfig = JSONConfig.create();
-                jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
-                System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
-                logger.info("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
-                // APS平台排程接口调用
-                ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
-                if (!"200".equals(productionScheduleRetVo.getCode())) {
-                    throw new CustomException(productionScheduleRetVo.getMsg());
-                }
-                apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrders);
+                // 按订单分批排程
+                Map<String, List<ApsBlankOrderVo>> groupedItems = apsBlankOrders.stream()
+                        .collect(Collectors.groupingBy(ApsBlankOrderVo::getProductionorderid));
+                groupedItems.forEach((k,v)->{
+                    // 模型转换
+                    ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v);
+                    JSONConfig jsonConfig = JSONConfig.create();
+                    jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
+                    System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
+                    logger.info("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
+                    // APS平台排程接口调用
+                    ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
+                    if (!"200".equals(productionScheduleRetVo.getCode())) {
+                        throw new CustomException(productionScheduleRetVo.getMsg());
+                    }
+                    apsBlankOrderService.apsAfter(productionScheduleRetVo,v);
+                });
             } catch (Exception e) {
                 e.printStackTrace();
                 throw e;
@@ -144,6 +147,7 @@ public class ApsServiceImpl implements ApsService {
             apsScheduleConfig = apsConfigs.get(0);
             productionScheduleVo.setLooseness(apsScheduleConfig.getLooseness());
             productionScheduleVo.setPlanSeconds(apsScheduleConfig.getScheduleruntime());
+            productionScheduleVo.setPcspeed(apsScheduleConfig.getPcspeed());
             Map<String, Integer> roamTime = new HashMap<>();
             Integer workshopin = apsScheduleConfig.getWorkshopin();
             Integer workshopcross = apsScheduleConfig.getWorkshopcross();
@@ -239,7 +243,7 @@ public class ApsServiceImpl implements ApsService {
         if (StringUtils.isNotBlank(operationDo.getCanchoosedeviceid())) {
             String[] sbIds = operationDo.getCanchoosedeviceid().split(",");
             for (String equIds : sbIds) {
-                if(equIds.equals("0001be252874536843730b100052")){
+                if(equIds.equals("0001be252874536843730b100064")){
                     System.out.println(equIds);
                 }
                 AspCheckItemsDo checkItemsD = eqMaps.get(equIds);
@@ -278,22 +282,26 @@ public class ApsServiceImpl implements ApsService {
                                 .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate)
                         );
                         if (lastpros != null && lastpros.size() > 0) {
+                            boolean hasLast = true;
                             ApsProcessOperationProcessEquDo lastpro = lastpros.get(0);
                             if(processEqus != null && processEqus.size()>0){
                                 List<ApsProcessOperationProcessEquDo> hasLasts = processEqus.stream().filter(v -> v.getId().equals(lastpro.getId())).collect(Collectors.toList());
-                                if(hasLasts == null || hasLasts.size() == 0){
-                                    ApsProcessOperationDo lastop = apsProcessOperationService.getById(lastpro.getProcessid());
-                                    // 输出物料
-                                    List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
-                                            .eq(ApsProcessOperationOutMaterDo::getMainid, lastpro.getProcessid()));
-                                    equipment.setLastProcessType(lastop.getProcess());
-                                    equipment.setLastProcessEndTime(lastpro.getPlanenddate());
-                                    equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
-                                    // 合金+输入物料+宽度+厚度+输出物料厚度
-                                    equipment.setLastSeriesProduceMark(lastop.getMetal() + "^_^" + lastop.getProducttype() + "^_^" + lastop.getProwidth() + "^_^" + lastop.getThickness() + "^_^" + outMaterDos.get(0).getThickness());
-                                    equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
+                                if(hasLasts != null || hasLasts.size() > 0){
+                                    hasLast = false;
                                 }
                             }
+                            if(hasLast){
+                                ApsProcessOperationDo lastop = apsProcessOperationService.getById(lastpro.getProcessid());
+                                // 输出物料
+                                List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
+                                        .eq(ApsProcessOperationOutMaterDo::getMainid, lastpro.getProcessid()));
+                                equipment.setLastProcessType(lastop.getProcess());
+                                equipment.setLastProcessEndTime(lastpro.getPlanenddate());
+                                equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
+                                // 合金+输入物料+宽度+厚度+输出物料厚度
+                                equipment.setLastSeriesProduceMark(lastop.getMetal() + "^_^" + lastop.getProducttype() + "^_^" + lastop.getProwidth() + "^_^" + lastop.getThickness() + "^_^" + outMaterDos.get(0).getThickness());
+                                equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
+                            }
                         }
                         // 查询相关工序作业
                         Set<String> processIds = new HashSet<>();
@@ -306,7 +314,9 @@ public class ApsServiceImpl implements ApsService {
                                 processOperationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
                                         .in(ApsProcessOperationDo::getId, processIds));
                             }
-
+                            //
+                            List<ApsProcessOperationOutMaterDo> outMaterDosAll = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
+                                    .in(ApsProcessOperationOutMaterDo::getMainid, processIds));
                             List<EquipmentRunTime> equipmentRunTimes = new ArrayList<>();
                             for (ApsProcessOperationProcessEquDo equs : processEqus) {
                                 EquipmentRunTime er = new EquipmentRunTime();
@@ -319,13 +329,14 @@ public class ApsServiceImpl implements ApsService {
                                     if (pos != null && pos.size() > 0) {
                                         ApsProcessOperationDo processesDo = pos.get(0);
                                         // 输出物料
-                                        List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
-                                                .eq(ApsProcessOperationOutMaterDo::getMainid, processesDo.getId()));
+//                                        List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
+//                                                .eq(ApsProcessOperationOutMaterDo::getMainid, processesDo.getId()));
+                                        List<ApsProcessOperationOutMaterDo> outMaterDos = outMaterDosAll.stream().filter(v->v.getMainid().equals(processesDo.getId())).collect(Collectors.toList());
                                         er.setProcessType(processesDo.getProcess());
                                         // 合金+输入物料+宽度+厚度
-                                        er.setSeriesProduceMark(operationDo.getMetal() + "^_^" + operationDo.getProducttype() + "^_^" + operationDo.getProwidth() + "^_^" + operationDo.getThickness() + "^_^" + outMaterDos.get(0).getThickness());
-                                        er.setVolumeMetal(operationDo.getMetal());
-                                        er.setVolumeMetalstate(operationDo.getMetalstate());
+                                        er.setSeriesProduceMark(processesDo.getMetal() + "^_^" + processesDo.getProducttype() + "^_^" + processesDo.getProwidth() + "^_^" + processesDo.getThickness() + "^_^" + outMaterDos.get(0).getThickness());
+                                        er.setVolumeMetal(processesDo.getMetal());
+                                        er.setVolumeMetalstate(processesDo.getMetalstate());
                                         er.setPrepressworkmin(processesDo.getPrepressworkmin() == null ? null : processesDo.getPrepressworkmin().intValue());
                                         er.setCutfinishmin(processesDo.getCutfinishmin() == null ? null : processesDo.getCutfinishmin().intValue());
                                         // 单卷宽度、重量数据赋值

+ 1 - 1
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/utils/CodeGeneration.java

@@ -83,7 +83,7 @@ public class CodeGeneration {
         strategy.setSuperEntityClass(BaseDo.class);
         strategy.setRestControllerStyle(true);
         // 设置要映射的表名(重要,需要修改的地方)
-        strategy.setInclude("aps_process_operation_process_equ");
+        strategy.setInclude("aps_schedule_config");
         strategy.setNaming(NamingStrategy.underline_to_camel); // 自动转换表名的驼峰命名法
         strategy.setColumnNaming(NamingStrategy.no_change); // 自动转换列名的驼峰命名法
         strategy.setEntityLombokModel(true); // 是否使用lombox

+ 12 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationBackupDao.xml

@@ -194,6 +194,18 @@
                 </if>
             </where>
     </delete>
+    <select id="selectBackByBlankIdList" resultType="com.rongwei.bsentity.vo.CheckScheduleVo">
+        select count(ID) as count,
+            BACKUPUSERID as backUpUserId,
+            BACKUPUSER as backUpUserName
+        from aps_process_operation_backup
+        where DELETED = 0
+            AND BLANKID in
+            <foreach collection="blankIdList" item="item" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        GROUP BY BACKUPUSERID,BACKUPUSER limit 1
+    </select>
     <insert id="processOperationCopy">
         INSERT INTO aps_process_operation_backup (<include refid="Base_Column_List"/>)
         SELECT

+ 10 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProductionOrderDo.java

@@ -617,6 +617,16 @@ public class ApsProductionOrderDo extends BaseDo implements Serializable {
      */
     private String processstatustext;
 
+    /**
+     * 内部客户ID
+     */
+    private String internalcustomerid;
+
+    /**
+     * 内部客户名称
+     */
+    private String internalcustomername;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 }

+ 5 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsReportRecordsDo.java

@@ -123,6 +123,11 @@ public class ApsReportRecordsDo extends BaseDo implements Serializable {
      */
     private String deviceparm;
 
+    /**
+     * 注意事项
+     */
+    private String attention;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 }

+ 6 - 1
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsScheduleConfigDo.java

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author fpy
- * @since 2024-05-28
+ * @since 2024-07-11
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -137,6 +137,11 @@ public class ApsScheduleConfigDo extends BaseDo {
      */
     @TableField("STANDINGTIME")
     private Integer standingtime;
+    /**
+     * 排程速度
+     */
+    @TableField("PCSPEED")
+    private Integer pcspeed;
 
 
 }

+ 16 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CheckMergeProcessResopnse.java

@@ -0,0 +1,16 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2024/7/17
+ */
+@Data
+public class CheckMergeProcessResopnse {
+    //是否需要提醒
+    private Boolean needWarning = false;
+
+    //提醒内容
+    private String warningMessage;
+}

+ 18 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CheckScheduleReq.java

@@ -0,0 +1,18 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author :sc
+ * @since :2024/7/9
+ */
+@Data
+public class CheckScheduleReq {
+    //坯料计划ID集合
+    private List<String> blankIdList;
+
+    //订单ID
+    private String orderId;
+}

+ 20 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CheckScheduleResponse.java

@@ -0,0 +1,20 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2024/7/10
+ */
+@Data
+public class CheckScheduleResponse {
+    /**
+     * 是否需要弱提示
+     */
+    private Boolean needWarning = false;
+
+    /**
+     * 提示内容
+     */
+    private String warningMessage;
+}

+ 25 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CheckScheduleVo.java

@@ -0,0 +1,25 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2024/7/9
+ */
+@Data
+public class CheckScheduleVo {
+    /**
+     * 备份的数量
+     */
+    private Integer count;
+
+    /**
+     * 备份人ID
+     */
+    private String backUpUserId;
+
+    /**
+     * 备份人名称
+     */
+    private String backUpUserName;
+}

+ 6 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ProductionScheduleVo.java

@@ -1,6 +1,7 @@
 package com.rongwei.bsentity.vo;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
@@ -67,4 +68,9 @@ public class ProductionScheduleVo {
      */
     private BigDecimal looseness;
 
+    /**
+     * 排程速度
+     */
+    private Integer pcspeed;
+
 }

+ 16 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ResetProcessOperationVo.java

@@ -0,0 +1,16 @@
+package com.rongwei.bsentity.vo;
+
+import com.rongwei.bsentity.domain.ApsProcessOperationOutMaterDo;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResetProcessOperationVo {
+    //坯料计划ID
+    private String blankid;
+    //工艺路线D
+    private String craftrouteid;
+    //修改得作业输出
+    private List<ApsProcessOperationOutMaterDo> outmeterinfo;
+}

+ 4 - 3
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java

@@ -6,6 +6,7 @@ import com.rongwei.bsentity.domain.ApsBlankOrderDo;
 import com.rongwei.bsentity.domain.ApsProductionTechnicalRequirementDo;
 import com.rongwei.bsentity.vo.ApsPlanVo;
 import com.rongwei.bsentity.vo.CheckAndSaveOrUpdateBlankReq;
+import com.rongwei.bsentity.vo.CheckScheduleReq;
 import com.rongwei.bsentity.vo.OrderLockVo;
 import com.rongwei.rwcommon.base.R;
 import lombok.extern.slf4j.Slf4j;
@@ -172,9 +173,9 @@ public class ApsBlankOrderController {
      * 根据坯料计划ID查询排程相关提醒
      */
     @PostMapping("/checkSchedule")
-    public R checkSchedule(@RequestBody List<String> blankIdList) {
-        log.info("checkSchedule 检查排程相关提醒,入参为:{}", blankIdList);
-        return apsBlankOrderService.checkSchedule(blankIdList);
+    public R checkSchedule(@RequestBody CheckScheduleReq req) {
+        log.info("checkSchedule 检查排程相关提醒,入参为:{}", req);
+        return apsBlankOrderService.checkSchedule(req);
     }
 }
 

+ 4 - 5
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProcessOperationController.java

@@ -2,7 +2,7 @@ package com.rongwei.bsserver.controller;
 
 
 import com.rongwei.bscommon.sys.service.ApsProcessOperationService;
-import com.rongwei.bsentity.domain.ApsProcessOperationOutMaterDo;
+import com.rongwei.bsentity.vo.ResetProcessOperationVo;
 import com.rongwei.rwcommon.base.R;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -95,11 +95,10 @@ public class ApsProcessOperationController {
     更新后面所有工序信息
      */
     @PostMapping("/resetProcessOperation")
-    public R resetProcessOperation(@RequestBody List<ApsProcessOperationOutMaterDo> apsProcessOperationOutMaterDoList) {
+    public R resetProcessOperation(@RequestBody ResetProcessOperationVo params) {
         try {
-            log.info("更新后面所有工序信息;参数为:{}", apsProcessOperationOutMaterDoList);
-            apsProcessOperationService.resetProcessOperation(apsProcessOperationOutMaterDoList);
-            return R.ok();
+            log.info("更新后面所有工序信息;参数为:{}", params.toString());
+            return apsProcessOperationService.resetProcessOperation(params);
         } catch (Exception e) {
             e.printStackTrace();
             log.info("更新后面所有工序信息异常:" + e.getMessage());

+ 9 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsReportRecordController.java

@@ -2,6 +2,7 @@ package com.rongwei.bsserver.controller;
 
 
 import com.rongwei.bscommon.sys.service.ApsReportRecordsService;
+import com.rongwei.bsentity.domain.ApsReportRecordsDo;
 import com.rongwei.bsentity.vo.SaveReportReq;
 import com.rongwei.bsentity.vo.StartRePortReq;
 import com.rongwei.rwcommon.base.R;
@@ -60,5 +61,13 @@ public class ApsReportRecordController {
     public R saveReport(@RequestBody SaveReportReq req){
         return apsReportRecordsService.saveReport(req);
     }
+
+    /**
+     * 开工之后,查询是否存在未开工的合并工序
+     */
+    @PostMapping("/checkMergeProcess")
+    public R checkMergeProcess(@RequestBody ApsReportRecordsDo req){
+        return apsReportRecordsService.checkMergeProcess(req);
+    }
 }
 

File diff suppressed because it is too large
+ 9 - 0
cx-question/cx-question-common/src/main/java/com/rongwei/bscommon/sys/dao/SrmIssuesListDao.java


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

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwei.bsentity.domin.SrmIssuesListDo;
+import com.rongwei.rwcommon.base.R;
 
 import java.io.IOException;
 import java.util.List;
@@ -21,4 +22,6 @@ public interface SrmIssuesListService extends IService<SrmIssuesListDo> {
     List<SrmIssuesListDo> getListByMesId(List<String> mesIds);
 
     void productionOverdue();
+
+    R getUsersDepartBmzAndCjzr();
 }

+ 57 - 7
cx-question/cx-question-common/src/main/java/com/rongwei/bscommon/sys/service/impl/SrmIssuesListServiceImpl.java

@@ -1,16 +1,22 @@
 package com.rongwei.bscommon.sys.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.SrmIssuesListDao;
 import com.rongwei.bscommon.sys.service.SrmIssuesListService;
 import com.rongwei.bsentity.domin.SrmIssuesListDo;
 import com.rongwei.commonservice.service.SysConfigService;
+import com.rongwei.rwadmincommon.system.domain.SysOrganizationDo;
+import com.rongwei.rwadmincommon.system.service.SysOrganizationService;
+import com.rongwei.rwadmincommon.system.vo.SysOrganizationVo;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommonentity.commonservers.domain.SysFileItemDo;
 import com.rongwei.rwcommonentity.commonservers.vo.SysNotifyAnnounceVo;
 import com.rongwei.safecommon.utils.CXCommonUtils;
+import dto.DeparterAndWorkShoperVo;
 import dto.SysNoticeVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -20,6 +26,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.Arrays;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -38,15 +45,17 @@ public class SrmIssuesListServiceImpl extends ServiceImpl<SrmIssuesListDao, SrmI
     private SysConfigService sysConfigService;
     @Autowired
     private SrmIssuesListDao srmIssuesListDao;
+    @Autowired
+    private SysOrganizationService sysOrganizationService;
 
     @Override
     public void saveFishBoneImg(SrmIssuesListDo srmIssuesListDo) throws IOException {
-        if(srmIssuesListDo.getCauseanalysisimg() != null){
+        if (srmIssuesListDo.getCauseanalysisimg() != null) {
             String imgUrl = this.base64ImgSave(srmIssuesListDo.getCauseanalysisimg());
             srmIssuesListDo.setCauseanalysisimg(imgUrl.split("@_@")[0]);
             srmIssuesListDo.setCauseanalysisimgurl(imgUrl.split("@_@")[1]);
         }
-        if(srmIssuesListDo.getUndetectedanalysisimg() != null){
+        if (srmIssuesListDo.getUndetectedanalysisimg() != null) {
             String imgUrl = this.base64ImgSave(srmIssuesListDo.getUndetectedanalysisimg());
             srmIssuesListDo.setUndetectedanalysisimg(imgUrl.split("@_@")[0]);
             srmIssuesListDo.setUndetectedanalysisimgurl(imgUrl.split("@_@")[1]);
@@ -56,7 +65,7 @@ public class SrmIssuesListServiceImpl extends ServiceImpl<SrmIssuesListDao, SrmI
 
     private String base64ImgSave(String imgContent) throws IOException {
         // 替换到头部标识信息
-        imgContent = imgContent.replace("data:image/png;base64,","");
+        imgContent = imgContent.replace("data:image/png;base64,", "");
         // 获取存储文件路径
         String fileRootPath = sysConfigService.getContentByConfigCode("fileRootPath");
         String fileName = SecurityUtil.getUUID() + ".png";
@@ -83,7 +92,7 @@ public class SrmIssuesListServiceImpl extends ServiceImpl<SrmIssuesListDao, SrmI
         sysFileItemDo.setFilefolderid("83968772af5042f4b09168e1ee74eac8");
         sysFileItemDo.setRelationid("83968772af5042f4b09168e1ee74eac8");
         sysFileItemDo.setFullpath(imgPath);
-        sysFileItemDo.setUrlpath("/files/mindImg/"+fileName);
+        sysFileItemDo.setUrlpath("/files/mindImg/" + fileName);
         sysFileItemDo.setExtends1("files");
         sysFileItemDo.setDeleted("0");
         sysFileItemDo.setCreatedate(DateUtil.date());
@@ -102,10 +111,11 @@ public class SrmIssuesListServiceImpl extends ServiceImpl<SrmIssuesListDao, SrmI
 
     /**
      * 获取问题列表
+     *
      * @param mesIds
      * @return
      */
-    public List<SrmIssuesListDo> getListByMesId(List<String> mesIds){
+    public List<SrmIssuesListDo> getListByMesId(List<String> mesIds) {
         return srmIssuesListDao.getListByMesId(mesIds);
     }
 
@@ -114,7 +124,7 @@ public class SrmIssuesListServiceImpl extends ServiceImpl<SrmIssuesListDao, SrmI
         //查询需要推送和修改的消息
         List<SysNoticeVo> list = this.baseMapper.selectNoticeByProduct();
         //没有消息,直接结束
-        if (list.size() <= 0){
+        if (list.size() <= 0) {
             return;
         }
         //有消息将消息的NOTIFYTYPE改为production_overdue
@@ -125,8 +135,48 @@ public class SrmIssuesListServiceImpl extends ServiceImpl<SrmIssuesListDao, SrmI
             String title = sysNoticeVo.getNotifytitle();
             String content = sysNoticeVo.getNotifycontent();
             List<String> userIdList = Arrays.asList(sysNoticeVo.getRecipientIds().split(","));
-            CXCommonUtils.pushApp(title,content,userIdList);
+            CXCommonUtils.pushApp(title, content, userIdList);
+        }
+
+    }
+
+    @Override
+    public R getUsersDepartBmzAndCjzr() {
+        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+        //获取当前用户的部门信息
+        SysOrganizationVo sysOrganizationVo = currentUser.getOrganizationDoList().get(0);
+        //==========开始溯源=============
+        //最终的车间ID
+        String endOrgId = "";
+        //如果当前用户的部门本身为 chejian 等级,溯源结果为当前车间
+        if (ObjectUtil.isNotEmpty(sysOrganizationVo.getOrgtype()) && sysOrganizationVo.getOrgtype().equals("chejian")) {
+            endOrgId = sysOrganizationVo.getId();
+        } else if (sysOrganizationVo.getPid().equals("-1")) {
+            endOrgId = "";
+        } else {
+            //迭代 溯源 chejian 部门
+            endOrgId = selectChejian(sysOrganizationVo.getPid());
+        }
+        List<DeparterAndWorkShoperVo> res = new LinkedList<>();
+        //查询对应部门 以及子部门 的 部门长和车间主任
+        if (ObjectUtil.isNotEmpty(endOrgId)) {
+            res = this.baseMapper.selectDeparterAndWorkShoper(endOrgId);
         }
 
+        return R.ok(res);
+    }
+
+    String selectChejian(String startDepartId) {
+        if (ObjectUtil.isEmpty(startDepartId)) {
+            return "";
+        }
+        SysOrganizationDo sysOrganizationDo = sysOrganizationService.getById(startDepartId);
+        if (ObjectUtil.isNotEmpty(sysOrganizationDo.getOrgtype()) && sysOrganizationDo.getOrgtype().equals("chejian")) {
+            return sysOrganizationDo.getId();
+        } else if (sysOrganizationDo.getPid().equals("-1")) {
+            return "";
+        } else {
+            return selectChejian(sysOrganizationDo.getPid());
+        }
     }
 }

+ 15 - 0
cx-question/cx-question-entity/src/main/java/dto/DeparterAndWorkShoperVo.java

@@ -0,0 +1,15 @@
+package dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author :sc
+ * @since :2024/7/16
+ */
+@Data
+public class DeparterAndWorkShoperVo {
+    private String id;
+    private String name;
+}

+ 8 - 0
cx-question/cx-question-server/src/main/java/com/rongwei/controller/QuestionController.java

@@ -77,4 +77,12 @@ public class QuestionController {
         srmIssuesListService.productionOverdue();
         return R.ok();
     }
+
+    /**
+     * 查询当前用户所属部门的  向前追溯或本部门 的部门类型为 车间 的部门,查询此部门下的部门长和车间主任
+     */
+    @PostMapping("/getUsersDepartBmzAndCjzr")
+    public R getUsersDepartBmzAndCjzr(){
+        return srmIssuesListService.getUsersDepartBmzAndCjzr();
+    }
 }