소스 검색

冷轧重排

fangpy 6 달 전
부모
커밋
d7def65847

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

@@ -51,7 +51,9 @@ public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
     R removeBlankOrder(ApsBlankOrderDo req);
     void removeBlankOrderAndChild(ApsBlankOrderDo req);
 
-    void apsAfter(ProductionScheduleRetVo productionScheduleRetVo,List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser);
+    void apsAfter(ProductionScheduleRetVo productionScheduleRetVo,List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,ApsTypeVo apsType);
+
+    void ddApsAfter(ProductionScheduleRetVo productionScheduleRetVo,List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,ApsTypeVo apsType);
 
     R checkAndUpdateBlankAndOutput(ApsProductionTechnicalRequirementDo req);
     void updateBlankSplicingColumn(String blankId);

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

@@ -745,7 +745,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void apsAfter(ProductionScheduleRetVo productionScheduleRetVo, List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser) {
+    public void apsAfter(ProductionScheduleRetVo productionScheduleRetVo, List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser,ApsTypeVo apsType) {
         // 先删除所有作业的明细
         List<String> blankids = CollUtil.distinct(productionScheduleRetVo.getProcesses().stream().map(v -> v.getProduceOrder().get(0).getId()).collect(Collectors.toList()));
 //        List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
@@ -975,6 +975,164 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses(), currentUser);
     }
 
+    /**
+     * 排程结果操作
+     *
+     * @param productionScheduleRetVo
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void ddApsAfter(ProductionScheduleRetVo productionScheduleRetVo, List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser,ApsTypeVo apsType) {
+        // 先删除所有作业的明细
+        List<String> blankids = CollUtil.distinct(productionScheduleRetVo.getProcesses().stream().map(v -> v.getProduceOrder().get(0).getId()).collect(Collectors.toList()));
+        // 查询坯料计划所有已存在的作业明细
+        List<ApsProcessOperationProcessEquDo> equDos = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+                .in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
+        // 物理删除作业明细
+        String idStrs = CollUtil.join(blankids, "','");
+        idStrs = "'" + idStrs + "'";
+//        apsBlankOrderDao.deleteBlankDetail(idStrs);
+//        logger.info("作业明细删除结束..: " + blankids);
+        // 排程结果保存
+        List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = new ArrayList<>();
+        // 最后节点集合
+        List<ProductionProcesses> lastProcess = new ArrayList<>();
+        if (productionScheduleRetVo.getProcesses() != null && productionScheduleRetVo.getProcesses().size() > 0) {
+            for (ProductionProcesses process : productionScheduleRetVo.getProcesses()) {
+                ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
+                apsProcessOperationProcessEqu.setId(process.getId());
+                apsProcessOperationProcessEqu.setProcessdeviceid(process.getEquipment().getId());
+                apsProcessOperationProcessEqu.setProcessdevice(process.getEquipment().getEquipmentName());
+                apsProcessOperationProcessEqu.setProcessworkshopid(process.getEquipment().getWorkshopid());
+                apsProcessOperationProcessEqu.setProcessworkshop(process.getEquipment().getWorkshopname());
+                apsProcessOperationProcessEqu.setTenantid(process.getEquipment().getFactoryid());
+                apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
+                apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
+                if ("小卷成退".equals(process.getProcessType()) || "小卷包装".equals(process.getProcessType())) {
+                    apsProcessOperationProcessEqu.setPlanprocessrall(process.getMinThPcNum());
+                } else {
+                    apsProcessOperationProcessEqu.setPlanprocessrall(process.getOpeProducePcNum());
+                }
+                apsProcessOperationProcessEqu.setHasconflict(process.getHasConflict());
+                apsProcessOperationProcessEqu.setConflictdes(process.getConflictDes());
+                apsProcessOperationProcessEqu.setSoftconflictdes(process.getSoftconflictdes());
+                apsProcessOperationProcessEqu.setLockmark("y");
+                apsProcessOperationProcessEqu.setLockmarkdetail("y");
+                if (process.getOptionalEquipmentZg() != null && process.getOptionalEquipmentZg().size() > 0) {
+                    apsProcessOperationProcessEqu.setRollerid(process.getOptionalEquipmentZg().get(process.getEquipment().getId()));
+                }
+                apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
+
+                // 是否为最后一个节点
+                if (process.getNextProcessesIds() == null || process.getNextProcessesIds().size() == 0) {
+                    lastProcess.add(process);
+                }
+            }
+        }
+        if (apsProcessOperationProcessEquDos != null && apsProcessOperationProcessEquDos.size() > 0) {
+            // 再保存新数据
+            processOperationProcessEquService.updateBatchById(apsProcessOperationProcessEquDos);
+            logger.info("作业明细保存结束..: " + blankids);
+            // 回写订单排程交货期
+            Map<String, Date> orderDeliveryTime = new HashMap<>();
+            // 查询所有坯料计划信息
+            List<ApsBlankOrderDo> apsBlankOrderDos = (List<ApsBlankOrderDo>) apsBlankOrderService.listByIds(blankids);
+            // 坯料计划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) {
+                        // 坯料计划信息
+                        List<ApsBlankOrderDo> orders = apsBlankOrderDos.stream().filter(v -> v.getId().equals(order.getId())).collect(Collectors.toList());
+                        ApsBlankOrderDo nowOrder = null;
+                        if (orders != null && orders.size() > 0) {
+                            nowOrder = orders.get(0);
+                        }
+
+                        Date endDate = Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant());
+                        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 (nowOrder != null && nowOrder.getPromisedatestart() == null) {
+                                    blankOrderDo.setPromisedatestart(DateUtil.offsetDay(endDate, 2));
+                                }
+                            }
+                            if (blankOrderDo.getScheduledateend().compareTo(endDate) < 0) {
+                                blankOrderDo.setScheduledateend(endDate);
+                                if (nowOrder != null && nowOrder.getPromisedateend() == null) {
+                                    blankOrderDo.setPromisedateend(DateUtil.offsetDay(endDate, 2));
+                                }
+                            }
+                        } else {
+                            ApsBlankOrderDo blankOrder = this.getById(order.getId());
+                            ApsBlankOrderDo updateBlank = new ApsBlankOrderDo();
+                            updateBlank.setId(order.getId());
+                            if (StringUtils.isBlank(nowOrder.getSchedulingstatus()) || nowOrder.getSchedulingstatus().equals(TO_BE_SCHEDULED)) {
+                                updateBlank.setSchedulingstatus(TO_BE_PUBLISHED);
+                            }
+                            updateBlank.setScheduledatestart(endDate);
+                            updateBlank.setScheduledateend(endDate);
+                            if (nowOrder != null && nowOrder.getPromisedatestart() == null) {
+                                updateBlank.setPromisedatestart(DateUtil.offsetDay(endDate, 2));
+                            }
+                            if (nowOrder != null && nowOrder.getPromisedateend() == null) {
+                                updateBlank.setPromisedateend(DateUtil.offsetDay(endDate, 2));
+                            }
+                            // 自动加锁坯料计划
+                            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);
+                            }
+                        }
+                    }
+                }
+            }
+
+            // 更新订单的排程交货期、排程状态
+            if (orderDeliveryTime.size() > 0) {
+                orderDeliveryTime.forEach((k, v) -> {
+                    ApsProductionOrderDo productionOrderDo = apsProductionOrderService.getById(k);
+                    ApsProductionOrderDo apsProductionOrderDo = new ApsProductionOrderDo();
+                    apsProductionOrderDo.setId(k);
+                    apsProductionOrderDo.setScheduledeliverydate(v);
+                    if (productionOrderDo.getDeliverytime() != null && productionOrderDo.getDeliverytime() > 0 && v != null) {
+                        apsProductionOrderDo.setScheduledeliverydate(DateUtil.offsetHour(v, productionOrderDo.getDeliverytime()));
+                    }
+                    // 排程状态更新为待发布
+//                    apsProductionOrderDo.setSchedulstatus(SCHEDULSTATUS_TORELEASE);
+                    apsProductionOrderService.updateById(apsProductionOrderDo);
+                });
+            }
+            // 坯料计划状态更新
+            /*if (blankIds != null && blankIds.size() > 0) {
+                this.updateBatchById(blankIds);
+            }*/
+
+            //更新生产状态为“待发布”(20)
+            /*List<ApsBlankOrderVo> toupstatus = apsBlankOrders.stream().filter(v ->
+                            blankids.contains(v.getId()) && (StringUtils.isBlank(v.getIfcp()) || "N".equals(v.getIfcp())))
+                    .collect(Collectors.toList());
+            updateProductStatusByOrderIds(toupstatus);*/
+            // 自动加锁坯料计划下的工序作业
+            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"));
+        }
+        logger.info("作业加锁结束..: " + blankids);
+//        backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses(), currentUser);
+    }
+
     /**
      * 工序作业备份
      *

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

@@ -322,7 +322,7 @@ public class ApsServiceImpl implements ApsService {
                     // 获取坯料计划
                     List<ApsBlankOrderVo> apsBlankOrderss = new ArrayList<>();
                     apsBlankOrderss.add(bo);
-                    apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrderss,currentUser);
+                    apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrderss,currentUser,null);
                 }
             }catch (Exception e) {
                 e.printStackTrace();
@@ -733,7 +733,12 @@ public class ApsServiceImpl implements ApsService {
                 // 获取坯料计划
                 /*List<ApsBlankOrderVo> apsBlankOrderss = new ArrayList<>();
                 apsBlankOrderss.add(bo);*/
-                apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrders,currentUser);
+                if("dd".equals(apsType.getScheduleType())){
+                    apsBlankOrderService.ddApsAfter(productionScheduleRetVo,apsBlankOrders,currentUser,apsType);
+                }else{
+                    apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrders,currentUser,apsType);
+                }
+
                 if(StrUtil.isNotBlank(productionScheduleRetVo.getMsg())){
                     // 排程异常后恢复历史排程结果为锁定状态
                     List<String> blankids = CollUtil.distinct(productionScheduleRetVo.getProcesses().stream().map(v -> v.getProduceOrder().get(0).getId()).collect(Collectors.toList()));