Quellcode durchsuchen

排程约束优化

fangpy vor 1 Jahr
Ursprung
Commit
6f541e36f5

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

@@ -6,6 +6,7 @@ import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
 import com.rongwei.bsentity.domain.AspCheckItemsDo;
 import com.rongwei.bsentity.vo.ApsBlankOrderVo;
 import com.rongwei.bsentity.vo.BlankIdAndProcessStatusVo;
+import com.rongwei.bsentity.vo.WashingMetal;
 import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -43,8 +44,12 @@ public interface ApsBlankOrderDao extends BaseMapper<ApsBlankOrderDo> {
             "where b.PRODUCTIONSTATUS='20' and (a.LOCKMARK='n' or a.LOCKMARK is null) and a.DELETED='0' and b.DELETED='0' and b.TENANTID = #{tenantId}")
     List<ApsBlankOrderVo> getNotLockOrders(@Param("tenantId") String tenantId);
 
-    @Select("select DISTINCT a.*,c.DELIVERYDATE,c.DELIVERYTIME from aps_blank_order a LEFT JOIN aps_process_operation b on a.ID=b.BLANKID LEFT JOIN aps_production_order c on a.PRODUCTIONORDERID=c.ID\n" +
-            "where a.DELETED='0' and b.DELETED='0' and c.DELETED='0' and (b.LOCKMARK='n' OR b.LOCKMARK is null) and c.TENANTID = #{tenantId} and a.ID not in (${hasIds}) and a.SCHEDULINGSTATUS != '10'")
+    @Select("<script>select DISTINCT a.*,c.DELIVERYDATE,c.DELIVERYTIME from aps_blank_order a LEFT JOIN aps_process_operation b on a.ID=b.BLANKID LEFT JOIN aps_production_order c on a.PRODUCTIONORDERID=c.ID\n" +
+            "where a.DELETED='0' and b.DELETED='0' and c.DELETED='0' and (b.LOCKMARK='n' OR b.LOCKMARK is null) " +
+            "and c.TENANTID = #{tenantId}  and a.SCHEDULINGSTATUS != '10' " +
+            "<if test='hasIds != null and hasIds != &apos;&apos;'> " +
+            "    and a.ID not in (${hasIds})" +
+            "</if></script>")
     List<ApsBlankOrderVo> getOrdersHasNotLockProcess(@Param("hasIds") String hasIds,@Param("tenantId") String tenantId);
 
     @Select("select * FROM (\n" +
@@ -100,4 +105,7 @@ public interface ApsBlankOrderDao extends BaseMapper<ApsBlankOrderDo> {
 
     @Delete("delete from aps_process_operation_process_equ_backup where BLANKID = #{id}")
     void deleteProcessEquBackupByBlankId(@Param("id") String id);
+
+    @Select("select ALLOYNAMES AS processmetals,NEXTALLOYNAMES AS nextprocessmetals from aps_alloy_close where DELETED='0'")
+    List<WashingMetal> getWashingMetalConfig();
 }

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

@@ -431,7 +431,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         SysUserVo currentUser = CXCommonUtils.getCurrentUser();
         String tenantId = currentUser.getOrganizationDoList().get(0).getFullpid().split(",")[1];
 
-        List<ApsBlankOrderVo> notLockOrders = apsBlankOrderDao.getNotLockOrders(tenantId);
+//        List<ApsBlankOrderVo> notLockOrders = apsBlankOrderDao.getNotLockOrders(tenantId);
+        List<ApsBlankOrderVo> notLockOrders = new ArrayList<>();
         blankOrderAps(notLockOrders);
         //更新生产状态为“待发布”(20)
         updateProductStatusByOrderIds(notLockOrders);
@@ -566,12 +567,18 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             processOperationProcessEquService.saveBatch(apsProcessOperationProcessEquDos);
             // 回写订单排程交货期
             Map<String, Date> orderDeliveryTime = new HashMap<>();
+            // 坯料计划ID集合
+            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);
+                        blankIds.add(updateBlank);
                         if (orderDeliveryTime.containsKey(blankOrder.getProductionorderid())) {
                             // 对比取最大值
                             if (endDate.compareTo(orderDeliveryTime.get(blankOrder.getProductionorderid())) > 0) {
@@ -598,7 +605,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     apsProductionOrderService.updateById(apsProductionOrderDo);
                 });
             }
-
+            // 坯料计划状态更新
+            if(blankIds != null && blankIds.size()>0){
+                this.updateBatchById(blankIds);
+            }
         }
 
         backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses());
@@ -676,6 +686,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         } else {
             throw new CustomException("排程参数缺失");
         }
+        // 洗炉合金配置数据设置
+        List<WashingMetal> washingMetalConfig = apsBlankOrderDao.getWashingMetalConfig();
+        productionScheduleVo.setClosealloynames(washingMetalConfig);
 
         // 所有设备
         List<AspCheckItemsDo> eqs = aspCheckItemsService.list(new LambdaQueryWrapper<>());

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

@@ -58,9 +58,13 @@ public class ApsServiceImpl implements ApsService {
                 // 加锁最大1小时
                 rLock.lock(1, TimeUnit.HOURS);
                 // 合并待发布未锁定的订单一起排程
-                List<String> hasIds = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
-                String idStrs = CollUtil.join(hasIds, "','");
-                idStrs = "'" + idStrs + "'";
+                String idStrs = null;
+                if(apsBlankOrders != null && apsBlankOrders.size()>0){
+                    List<String> hasIds = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
+                    idStrs = CollUtil.join(hasIds, "','");
+                    idStrs = "'" + idStrs + "'";
+                }
+
                 // 查询存在未锁定的作业坯料计划
 //            List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getFbNotLock(idStrs,tenantId);
                 List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getOrdersHasNotLockProcess(idStrs,tenantId);

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

@@ -48,6 +48,11 @@ public class ProductionScheduleVo {
 
     private Map<String,List<String>> blankProcessIds;
 
+    /**
+     * 洗炉合金
+     */
+    private List<WashingMetal> closealloynames;
+
     /**
      * 洗炉时间(小时)
      */

+ 15 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/WashingMetal.java

@@ -0,0 +1,15 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+/**
+ * 洗炉合金配置表
+ */
+@Data
+public class WashingMetal {
+
+    // 当前作业合金
+    private String processmetals;
+    // 下道作业合金
+    private String nextprocessmetals;
+}