Ver código fonte

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

fangpy 8 meses atrás
pai
commit
a56a776edc

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

@@ -27,6 +27,8 @@ public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
 
     R orderLock(OrderLockVo orderLockVo) throws Exception;
 
+    R processDetailLock(OrderLockVo orderLockVo) throws Exception;
+
     void apsReScheduling() throws Exception;
 
     void apsScheduling(ApsPlanVo apsPlanVo) throws Exception;

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

@@ -480,6 +480,67 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         return lock(apsProcessOperationDos);
     }
 
+    /**
+     * 排程明细锁定、解锁
+     * @param orderLockVo
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public R processDetailLock(OrderLockVo orderLockVo) {
+        ApsUtils.checkScheduling(null);
+        String lockMark = orderLockVo.getLockMark();
+        if (StringUtils.isBlank(lockMark)) {
+            log.error("锁定状态必填");
+            return R.error("锁定状态必填");
+        }
+        // 作业明细锁定
+        if(orderLockVo.getId() != null && orderLockVo.getId().size()>0){
+            apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                    .in(ApsProcessOperationProcessEquDo::getId, orderLockVo.getId())
+                    .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, lockMark));
+            // 查询作业明细的所属作业ID
+            List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = (List<ApsProcessOperationProcessEquDo>)apsProcessOperationProcessEquService.listByIds(orderLockVo.getId());
+            //  所有作业ID
+            List<String> proids = apsProcessOperationProcessEquDos.stream().map(ApsProcessOperationProcessEquDo::getProcessid).collect(Collectors.toList());
+            proids = proids.stream().distinct().collect(Collectors.toList());
+            // 查询存在未锁定作业明细的作业ID
+            List<ApsProcessOperationProcessEquDo> popes = apsProcessOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getProcessid, proids)
+                    .eq(ApsProcessOperationProcessEquDo::getLockmarkdetail, LOCKMARK_N));
+            List<String> notlockdetailproids = popes.stream().map(ApsProcessOperationProcessEquDo::getProcessid).collect(Collectors.toList()).stream().distinct().collect(Collectors.toList());
+            String retMsg = "";
+            // 锁定
+            if(LOCKMARK_Y.equals(lockMark)){
+                List<String> yproids = null;
+                if(notlockdetailproids != null && notlockdetailproids.size()>0){
+                    // 没有未锁定作业明细的作业ID
+                    yproids = proids.stream().filter(v -> !notlockdetailproids.contains(v)).collect(Collectors.toList());
+                }else{
+                    yproids = proids;
+                }
+                if(yproids != null && yproids.size()>0){
+                    // 所有作业明细都是锁定状态则锁定作业
+                    apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
+                            .in(ApsProcessOperationDo::getId, yproids)
+                            .set(ApsProcessOperationDo::getLockmark, LOCKMARK_Y));
+                }
+                retMsg = "锁定成功";
+            }
+            // 解锁
+            else if (LOCKMARK_N.equals(lockMark)) {
+                if(notlockdetailproids != null && notlockdetailproids.size()>0){
+                    // 存在作业明细是未锁定状态则解锁作业
+                    apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
+                            .in(ApsProcessOperationDo::getId, notlockdetailproids)
+                            .set(ApsProcessOperationDo::getLockmark, LOCKMARK_N));
+                }
+                retMsg = "解锁成功";
+            }
+            return R.ok("200", retMsg, orderLockVo.getId());
+        }
+        return R.ok("200", "没有需要操作的数据", orderLockVo.getId());
+    }
+
     /**
      * 解锁 锁定标识  n
      *
@@ -513,6 +574,11 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
                 .in(ApsProcessOperationDo::getId, processIds)
                 .set(ApsProcessOperationDo::getLockmark, LOCKMARK_N));
+        // 作业明细解锁
+        apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                .in(ApsProcessOperationProcessEquDo::getProcessid, processIds)
+                .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, LOCKMARK_N));
+
         // 判断当前工序作业是否存在加工中或已完工的数据
         boolean b = unlockProcessInfo.stream().anyMatch(info -> COMPLETED.equals(info.getProcessstatus()) || PROCESSING.equals(info.getProcessstatus()));
         if (b) {
@@ -541,6 +607,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
                 .in(ApsProcessOperationDo::getId, unlockedIds)
                 .set(ApsProcessOperationDo::getLockmark, LOCKMARK_Y));
+        // 作业明细锁定
+        apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                .in(ApsProcessOperationProcessEquDo::getProcessid, unlockedIds)
+                .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, LOCKMARK_Y));
         return R.ok("200", "锁定成功", unlockedIds);
     }
 
@@ -666,6 +736,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     apsProcessOperationProcessEqu.setPreviousprocessesids(CollUtil.join(process.getPreviousProcessesIds(), ","));
                     apsProcessOperationProcessEqu.setNextprocessesids(CollUtil.join(process.getNextProcessesIds(), ","));
                     apsProcessOperationProcessEqu.setLockmark("y");
+                    apsProcessOperationProcessEqu.setLockmarkdetail("y");
                     if (hasEqu != null) {
                         apsProcessOperationProcessEqu.setClosestatus(hasEqu.getClosestatus());
                         apsProcessOperationProcessEqu.setPlanprocessrall(hasEqu.getPlanprocessrall());

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

@@ -728,8 +728,11 @@ public class ApsServiceImpl implements ApsService {
                     // 工序作业相关数据初始化
                     productionProcessesInit(operationDo,produceOrder,processesList,operationProductionProcesses,apsBlankOrderVo,productionScheduleVo,proEqus);
                 }
-                // 前后关联关系初始化
-                processesRelationInit(rootOperationDo,operationProductionProcesses,operationMaps,apsBlankOrderVo);
+                // 第一次排程需要建立关联关系
+                if(!"Y".equals(apsBlankOrderVo.getIfcp())){
+                    // 前后关联关系初始化
+                    processesRelationInit(rootOperationDo,operationProductionProcesses,operationMaps,apsBlankOrderVo);
+                }
 
                 blankProcessIds.put(apsBlankOrderVo.getId(), processIdss);
             }
@@ -1109,6 +1112,14 @@ public class ApsServiceImpl implements ApsService {
                     processes.setId(processDetail.getId());
                     processes.setIfLock(true);
                     processes.setEquipmentId(processDetail.getProcessdeviceid());
+                    // 锁定作业的关联关系设置
+                    if(StrUtil.isNotBlank(processDetail.getPreviousprocessesids())){
+                        processes.setPreviousProcessesIds(new ArrayList<>(Arrays.asList(processDetail.getPreviousprocessesids().split(","))));
+                    }
+                    if(StrUtil.isNotBlank(processDetail.getNextprocessesids())){
+                        processes.setNextProcessesIds(new ArrayList<>(Arrays.asList(processDetail.getNextprocessesids().split(","))));
+                    }
+
                     List<String> opeqs = new ArrayList<>();
                     opeqs.add(processDetail.getProcessdeviceid());
                     processes.setOptionalEquipments(opeqs);
@@ -1158,7 +1169,25 @@ public class ApsServiceImpl implements ApsService {
                         // 已排程的作业明细数据保持ID不变
                         if(processEquDos != null && i<processEquDos.size()){
                             processes.setId(processEquDos.get(i).getId());
+                            // 锁定作业的关联关系设置
+                            if(StrUtil.isNotBlank(processEquDos.get(i).getPreviousprocessesids())){
+                                processes.setPreviousProcessesIds(new ArrayList<>(Arrays.asList(processEquDos.get(i).getPreviousprocessesids().split(","))));
+                            }
+                            if(StrUtil.isNotBlank(processEquDos.get(i).getNextprocessesids())){
+                                processes.setNextProcessesIds(new ArrayList<>(Arrays.asList(processEquDos.get(i).getNextprocessesids().split(","))));
+                            }
+                            if("Y".equals(processEquDos.get(i).getLockmarkdetail())){
+                                processes.setIfLock(true);
+                                processes.setEquipmentId(processEquDos.get(i).getProcessdeviceid());
+                                List<String> opeqs = new ArrayList<>();
+                                opeqs.add(processEquDos.get(i).getProcessdeviceid());
+                                processes.setOptionalEquipments(opeqs);
+                                processes.setDelay(0);
+                                processes.setStartTime(processEquDos.get(i).getPlanstartdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                                processes.setEndTime(processEquDos.get(i).getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                            }
                         }
+
                         if(apsBlankOrderVo.getPlanhavematerialdate() != null){
                             // 全局配置
                             ApsOverallConfig apsOverallConfig = new ApsOverallConfig();
@@ -1205,6 +1234,23 @@ public class ApsServiceImpl implements ApsService {
                         // 已排程的作业明细数据保持ID不变
                         if(processEquDos != null && i<processEquDos.size()){
                             processes.setId(processEquDos.get(i).getId());
+                            // 锁定作业的关联关系设置
+                            if(StrUtil.isNotBlank(processEquDos.get(i).getPreviousprocessesids())){
+                                processes.setPreviousProcessesIds(new ArrayList<>(Arrays.asList(processEquDos.get(i).getPreviousprocessesids().split(","))));
+                            }
+                            if(StrUtil.isNotBlank(processEquDos.get(i).getNextprocessesids())){
+                                processes.setNextProcessesIds(new ArrayList<>(Arrays.asList(processEquDos.get(i).getNextprocessesids().split(","))));
+                            }
+                            if("Y".equals(processEquDos.get(i).getLockmarkdetail())){
+                                processes.setIfLock(true);
+                                processes.setEquipmentId(processEquDos.get(i).getProcessdeviceid());
+                                List<String> opeqs = new ArrayList<>();
+                                opeqs.add(processEquDos.get(i).getProcessdeviceid());
+                                processes.setOptionalEquipments(opeqs);
+                                processes.setDelay(0);
+                                processes.setStartTime(processEquDos.get(i).getPlanstartdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                                processes.setEndTime(processEquDos.get(i).getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                            }
                         }
                         if(apsBlankOrderVo.getPlanhavematerialdate() != null){
                             // 全局配置
@@ -1240,6 +1286,23 @@ public class ApsServiceImpl implements ApsService {
                         // 已排程的作业明细数据保持ID不变
                         if(processEquDos != null && i<processEquDos.size()){
                             processes.setId(processEquDos.get(i).getId());
+                            // 锁定作业的关联关系设置
+                            if(StrUtil.isNotBlank(processEquDos.get(i).getPreviousprocessesids())){
+                                processes.setPreviousProcessesIds(new ArrayList<>(Arrays.asList(processEquDos.get(i).getPreviousprocessesids().split(","))));
+                            }
+                            if(StrUtil.isNotBlank(processEquDos.get(i).getNextprocessesids())){
+                                processes.setNextProcessesIds(new ArrayList<>(Arrays.asList(processEquDos.get(i).getNextprocessesids().split(","))));
+                            }
+                            if("Y".equals(processEquDos.get(i).getLockmarkdetail())){
+                                processes.setIfLock(true);
+                                processes.setEquipmentId(processEquDos.get(i).getProcessdeviceid());
+                                List<String> opeqs = new ArrayList<>();
+                                opeqs.add(processEquDos.get(i).getProcessdeviceid());
+                                processes.setOptionalEquipments(opeqs);
+                                processes.setDelay(0);
+                                processes.setStartTime(processEquDos.get(i).getPlanstartdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                                processes.setEndTime(processEquDos.get(i).getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                            }
                         }
                         if(apsBlankOrderVo.getPlanhavematerialdate() != null){
                             // 全局配置

+ 6 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProcessOperationProcessEquDo.java

@@ -219,4 +219,10 @@ public class ApsProcessOperationProcessEquDo extends BaseDo {
      */
     @TableField("LEAVEWAITWORKROLL")
     private Integer leavewaitworkroll;
+    /**
+     * 是否锁定明细 y:锁定,n:未锁定
+     * 批量排程时需要使用
+     */
+    @TableField("LOCKMARKDETAIL")
+    private String lockmarkdetail;
 }

+ 11 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java

@@ -68,6 +68,17 @@ public class ApsBlankOrderController {
         return apsBlankOrderService.orderLock(orderLockVo);
     }
 
+    /**
+     * 坯料计划锁定解锁
+     *
+     * @param
+     * @return
+     */
+    @PostMapping("/processDetailLock")
+    public R processDetailLock(@RequestBody OrderLockVo orderLockVo) throws Exception {
+        return apsBlankOrderService.processDetailLock(orderLockVo);
+    }
+
     /**
      * 订单排程取消
      *