소스 검색

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

xiahan 1 년 전
부모
커밋
39be43d0fa
15개의 변경된 파일730개의 추가작업 그리고 76개의 파일을 삭제
  1. 16 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsFurnaceInstallationDao.java
  2. 16 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsMergeFurnaceDao.java
  3. 16 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsFurnaceInstallationService.java
  4. 16 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsMergeFurnaceService.java
  5. 5 2
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java
  6. 20 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsFurnaceInstallationServiceImpl.java
  7. 20 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsMergeFurnaceServiceImpl.java
  8. 404 71
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsServiceImpl.java
  9. 3 3
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/utils/CodeGeneration.java
  10. 92 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsFurnaceInstallationDo.java
  11. 61 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsMergeFurnaceDo.java
  12. 12 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ApsOverallConfig.java
  13. 27 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CommonVo.java
  14. 10 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ProductionProcesses.java
  15. 12 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ProductionScheduleVo.java

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

@@ -0,0 +1,16 @@
+package com.rongwei.bscommon.sys.dao;
+
+import com.rongwei.bsentity.domain.ApsFurnaceInstallationDo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 小卷成退合并装炉分组 Mapper 接口
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-07-27
+ */
+public interface ApsFurnaceInstallationDao extends BaseMapper<ApsFurnaceInstallationDo> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.rongwei.bscommon.sys.dao;
+
+import com.rongwei.bsentity.domain.ApsMergeFurnaceDo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 小卷成退合并装炉兼容 Mapper 接口
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-07-27
+ */
+public interface ApsMergeFurnaceDao extends BaseMapper<ApsMergeFurnaceDo> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.rongwei.bscommon.sys.service;
+
+import com.rongwei.bsentity.domain.ApsFurnaceInstallationDo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 小卷成退合并装炉分组 服务类
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-07-27
+ */
+public interface ApsFurnaceInstallationService extends IService<ApsFurnaceInstallationDo> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.rongwei.bscommon.sys.service;
+
+import com.rongwei.bsentity.domain.ApsMergeFurnaceDo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 小卷成退合并装炉兼容 服务类
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-07-27
+ */
+public interface ApsMergeFurnaceService extends IService<ApsMergeFurnaceDo> {
+
+}

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

@@ -572,7 +572,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     public void apsAfter(ProductionScheduleRetVo productionScheduleRetVo, List<ApsBlankOrderVo> apsBlankOrders) {
         // 先删除所有作业的明细
         List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
-        processOperationProcessEquService.remove(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
+        processOperationProcessEquService.remove(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                .in(ApsProcessOperationProcessEquDo::getBlankid, blankids).eq(ApsProcessOperationProcessEquDo::getLockmark,"n"));
+        logger.info("作业明细删除结束..: " + blankids);
         // 排程结果保存
         List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = new ArrayList<>();
         // 最后节点集合
@@ -647,6 +649,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         if (apsProcessOperationProcessEquDos != null && apsProcessOperationProcessEquDos.size() > 0) {
             // 再保存新数据
             processOperationProcessEquService.saveBatch(apsProcessOperationProcessEquDos);
+            logger.info("作业明细保存结束..: " + blankids);
             // 回写订单排程交货期
             Map<String, Date> orderDeliveryTime = new HashMap<>();
             // 坯料计划ID集合
@@ -718,7 +721,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             // 自动加锁坯料计划下的排程作业明细
             apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankKeys).set(ApsProcessOperationProcessEquDo::getLockmark, "y"));
         }
-
+        logger.info("作业加锁结束..: " + blankids);
         backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses());
     }
 

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

@@ -0,0 +1,20 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import com.rongwei.bsentity.domain.ApsFurnaceInstallationDo;
+import com.rongwei.bscommon.sys.dao.ApsFurnaceInstallationDao;
+import com.rongwei.bscommon.sys.service.ApsFurnaceInstallationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 小卷成退合并装炉分组 服务实现类
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-07-27
+ */
+@Service
+public class ApsFurnaceInstallationServiceImpl extends ServiceImpl<ApsFurnaceInstallationDao, ApsFurnaceInstallationDo> implements ApsFurnaceInstallationService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import com.rongwei.bsentity.domain.ApsMergeFurnaceDo;
+import com.rongwei.bscommon.sys.dao.ApsMergeFurnaceDao;
+import com.rongwei.bscommon.sys.service.ApsMergeFurnaceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 小卷成退合并装炉兼容 服务实现类
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-07-27
+ */
+@Service
+public class ApsMergeFurnaceServiceImpl extends ServiceImpl<ApsMergeFurnaceDao, ApsMergeFurnaceDo> implements ApsMergeFurnaceService {
+
+}

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

@@ -8,6 +8,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONConfig;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.rongwei.bscommon.sys.dao.ApsBlankOrderDao;
 import com.rongwei.bscommon.sys.fegin.RwApsServer;
 import com.rongwei.bscommon.sys.service.*;
@@ -21,6 +22,7 @@ import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.safecommon.utils.CXCommonUtils;
 import com.rongwei.safecommon.utils.SaveConstans;
+import org.apache.commons.math3.stat.descriptive.summary.Product;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
@@ -33,6 +35,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -65,6 +68,10 @@ public class ApsServiceImpl implements ApsService {
     private ApsEquipmentCalendarService apsEquipmentCalendarService;
     @Autowired
     private ApsProcessOperationOutMaterService apsProcessOperationOutMaterService;
+    @Autowired
+    private ApsFurnaceInstallationService apsFurnaceInstallationService;
+    @Autowired
+    private ApsMergeFurnaceService apsMergeFurnaceService;
 
     @Override
 //    @Async("customThreadPool")
@@ -166,25 +173,39 @@ public class ApsServiceImpl implements ApsService {
                     }
                     return a;
                 });
+                // 排程前解锁所有待排程订单
+                List<String> blankOrderIds = new ArrayList<>();
+                apsBlankOrders.forEach((bo)->{
+                    blankOrderIds.add(bo.getId());
+                });
+                processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark,"n")
+                        .in(ApsProcessOperationProcessEquDo::getBlankid,blankOrderIds));
                 // 排程
                 List<ProductionScheduleVo> productionScheduleVos = new ArrayList<>();
                 Map<String,List<ApsBlankOrderVo>> dataMap = new HashMap<>();
-                // 自动排序
-                List<List<ApsBlankOrderVo>> apsOrders = new ArrayList<>();
-                for (ApsBlankOrderVo apsBlankOrder : apsBlankOrders) {
+                Map<String,ApsBlankOrderVo> dataMapOrder = new HashMap<>();
 
+                // 所有设备
+                List<AspCheckItemsDo> eqs = aspCheckItemsService.list(new LambdaQueryWrapper<>());
+                Map<String, AspCheckItemsDo> eqMaps = new HashMap<>();
+                for (AspCheckItemsDo eq : eqs) {
+                    eqMaps.put(eq.getId(), eq);
                 }
                 apsBlankOrders.forEach((bo)->{
                     List<ApsBlankOrderVo> v = new ArrayList<>();
                     v.add(bo);
+                    dataMapOrder.put(bo.getId(),bo);
                     // 模型转换
                     ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v);
                     productionScheduleVos.add(productionScheduleVo);
                     dataMap.put(productionScheduleVo.getProductionScheduleId(),v);
                 });
                 if(productionScheduleVos != null && productionScheduleVos.size()>0){
+                    JSONConfig jsonConfig = JSONConfig.create();
+                    jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
+                    List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
                     // 提前退火排程
-                    ProductionScheduleVo productionScheduleThVo = new ProductionScheduleVo();
+                    /*ProductionScheduleVo productionScheduleThVo = new ProductionScheduleVo();
                     productionScheduleThVo.setProductionScheduleId("提前退火排程-"+SecurityUtil.getUUID());
                     productionScheduleThVo.setApsPlanStartDate(productionScheduleVos.get(0).getApsPlanStartDate());
                     productionScheduleThVo.setPlanSeconds(productionScheduleVos.get(0).getPlanSeconds());
@@ -195,37 +216,188 @@ public class ApsServiceImpl implements ApsService {
                     productionScheduleThVo.setLooseness(productionScheduleVos.get(0).getLooseness());
                     productionScheduleThVo.setPcspeed(productionScheduleVos.get(0).getPcspeed());
                     List<ProductionProcesses> pros = new ArrayList<>();
-                    List<Equipment> equipmentList = new ArrayList<>();
+                    List<String> thBlankIds = new ArrayList<>();
                     Map<String,List<String>> blankProcessIds = new HashMap<>();
                     List<WashingMetal> closealloynames = new ArrayList<>();
                     for (ProductionScheduleVo productionScheduleVo : productionScheduleVos) {
                         pros.addAll(productionScheduleVo.getProcesses());
-                        for (Equipment equipment : productionScheduleVo.getEquipmentList()) {
-                            List<Equipment> ess = equipmentList.stream().filter(v -> v.getBsEquipmentId().equals(equipment.getBsEquipmentId())).collect(Collectors.toList());
-                            if(ess == null || ess.size() == 0){
-                                equipmentList.add(equipment);
+                        for (ProductionProcesses pross : productionScheduleVo.getProcesses()) {
+                            for (ProduceOrder produceOrder : pross.getProduceOrder()) {
+                                thBlankIds.add(produceOrder.getId());
                             }
                         }
                         blankProcessIds.putAll(productionScheduleVo.getBlankProcessIds());
                         closealloynames.addAll(productionScheduleVo.getClosealloynames());
                     }
                     productionScheduleThVo.setProcesses(pros);
-                    productionScheduleThVo.setEquipmentList(equipmentList);
                     productionScheduleThVo.setBlankProcessIds(blankProcessIds);
                     productionScheduleThVo.setClosealloynames(closealloynames);
+                    // 退火设备列表
+                    thBlankIds = thBlankIds.stream().distinct().collect(Collectors.toList());
+                    // 排程计划设备集合
+                    List<Equipment> equipmentList = new ArrayList<>();
+                    List<ApsProcessOperationDo> operationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
+                            .in(ApsProcessOperationDo::getBlankid, thBlankIds));
+                    for (ApsProcessOperationDo operationDo : operationDos) {
+                        List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList,eqMaps,thBlankIds,null,productionScheduleThVo,apsConfigs.get(0));
+                    }
+                    productionScheduleThVo.setEquipmentList(equipmentList);
+
                     // 退火排程
-                    JSONConfig jsonConfig = JSONConfig.create();
-                    jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
                     System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleThVo, jsonConfig));
                     logger.info("排程数据:" + JSONUtil.toJsonStr(productionScheduleThVo, jsonConfig));
                     // APS平台排程接口调用
                     ProductionScheduleRetVo productionScheduleRetThVo = rwApsServer.productionThSchedule(productionScheduleThVo);
                     if (!"200".equals(productionScheduleRetThVo.getCode())) {
                         throw new CustomException(productionScheduleRetThVo.getMsg());
-                    }
+                    }*/
 
-                    // 全部排程
+                    // 全部排程,每4个一组
+                    Map<String,ProductionProcesses> allProcesses = new HashMap<>();
+                    List<ProductionProcesses> rootProcesses = new ArrayList<>();
                     for (ProductionScheduleVo productionScheduleVo : productionScheduleVos) {
+                        for (ProductionProcesses process : productionScheduleVo.getProcesses()) {
+                            allProcesses.put(process.getId(),process);
+                            if(process.getPreviousProcessesIds() == null || process.getPreviousProcessesIds().size() == 0){
+                                rootProcesses.add(process);
+                            }
+                        }
+                    }
+                    // 坯料计划排序
+                    Collections.sort(rootProcesses,(v1,v2)->{
+                        // 合金
+                        String alloy1 = v1.getVolumeMetal();
+                        String alloy2 = v2.getVolumeMetal();
+                        // 合金状态
+                        String alloystatus1 = v1.getVolumeMetalstate();
+                        String alloystatus2 = v2.getVolumeMetalstate();
+                        // 产品类型
+                        String producttype1 = v1.getProducttype();
+                        String producttype2 = v2.getProducttype();
+                        // 宽度
+                        BigDecimal prowidth1 = v1.getVolumeWidth();
+                        BigDecimal prowidth2 = v2.getVolumeWidth();
+                        // 厚度
+                        BigDecimal thickness1 = v1.getVolumeThickness();
+                        BigDecimal thickness2 = v2.getVolumeThickness();
+                        // 重量
+                        BigDecimal singlerollweight1 = v1.getSinglerollweight();
+                        BigDecimal singlerollweight2 = v2.getSinglerollweight();
+
+                        int a = 0;
+                        // 宽度
+                        if(prowidth1.compareTo(prowidth2) == 0){
+                            // 合金
+                            if(alloy1.compareTo(alloy2) == 0){
+                                // 产品类型
+                                if(producttype1 == null || producttype2 == null || producttype1.compareTo(producttype2) == 0){
+                                    // 厚度
+                                    if(thickness1.compareTo(thickness2) == 0){
+                                        // 合金状态
+                                        if(alloystatus1 == null || alloystatus2 == null || alloystatus1.compareTo(alloystatus2) == 0){
+                                            // 重量
+                                            if(singlerollweight1.compareTo(singlerollweight2) == 0){
+                                                a = 0;
+                                            }else if(singlerollweight1.compareTo(singlerollweight2) > 0){
+                                                a = -1;
+                                            }else{
+                                                a = 1;
+                                            }
+                                        }else{
+                                            a = alloystatus1.compareTo(alloystatus2);
+                                        }
+                                    }else{
+                                        if(thickness1.compareTo(thickness2) > 0){
+                                            a = -1;
+                                        }else{
+                                            a = 1;
+                                        }
+                                    }
+                                }else{
+                                    a = producttype1.compareTo(producttype2);
+                                }
+                            }else{
+                                a = alloy1.compareTo(alloy2);
+                            }
+                        }else{
+                            if(prowidth1.compareTo(prowidth2) > 0){
+                                a = -1;
+                            }else{
+                                a = 1;
+                            }
+                        }
+                        return a;
+                    });
+                    List<List<ProductionProcesses>> chunks = new ArrayList<>();
+                    int listSize = rootProcesses.size();
+                    for (int i = 0; i < listSize; i += 4) {
+                        chunks.add(rootProcesses.subList(i, Math.min(i + 4, listSize)));
+                    }
+
+                    // 全部排程,每4个一组
+                    for (List<ProductionProcesses> rootpros : chunks) {
+                        ProductionScheduleVo productionScheduleVo = productionScheduleVoInit();
+                        // 工序作业ID
+                        Set<String> opId = new LinkedHashSet<>();
+                        Set<String> orderIds = new LinkedHashSet<>();
+                        List<ProductionProcesses> pssall = new ArrayList<>();
+                        for (ProductionProcesses processes : rootpros) {
+                            pssall.add(processes);
+                            for (String s : processes.getBsProcessesId()) {
+                                opId.add(s);
+                            }
+                            for (ProduceOrder produceOrder : processes.getProduceOrder()) {
+                                orderIds.add(produceOrder.getId());
+                            }
+                            getAllNextPross(processes,allProcesses,pssall,opId);
+                        }
+                        // 退火工序锁定
+                        /*if(productionScheduleRetThVo.getProcesses() != null && productionScheduleRetThVo.getProcesses().size()>0){
+                            for (ProductionProcesses process : pssall) {
+                                for (ProductionProcesses productionScheduleRetThVoProcess : productionScheduleRetThVo.getProcesses()) {
+                                    if(productionScheduleRetThVoProcess.getId().equals(process.getId())){
+                                        process.setEquipmentId(productionScheduleRetThVoProcess.getEquipmentId());
+                                        List<String> opeqs = new ArrayList<>();
+                                        opeqs.add(productionScheduleRetThVoProcess.getEquipmentId());
+                                        process.setOptionalEquipments(opeqs);
+                                        process.setDelay(0);
+                                        process.setStartTime(productionScheduleRetThVoProcess.getStartTime());
+                                        process.setEndTime(productionScheduleRetThVoProcess.getEndTime());
+                                        process.setIfLock(true);
+                                    }
+                                }
+                            }
+                        }*/
+                        // 排程计划设备集合
+                        List<Equipment> equipmentList1 = new ArrayList<>();
+                        List<ApsProcessOperationDo> operationDos1 = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
+                                .in(ApsProcessOperationDo::getId, opId));
+                        for (ApsProcessOperationDo operationDo : operationDos1) {
+                            List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList1,eqMaps,null,opId,productionScheduleVo,apsConfigs.get(0));
+                        }
+                        productionScheduleVo.setEquipmentList(equipmentList1);
+                        productionScheduleVo.setProcesses(pssall);
+
+                        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());
+                        }
+                        // 获取坯料计划
+                        List<ApsBlankOrderVo> apsBlankOrderss = new ArrayList<>();
+                        for (String orderId : orderIds) {
+                            ApsBlankOrderVo apsBlankOrderVo = dataMapOrder.get(orderId);
+                            if(apsBlankOrderVo != null){
+                                apsBlankOrderss.add(apsBlankOrderVo);
+                            }
+                        }
+
+                        apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrderss);
+                    }
+
+                    /*for (ProductionScheduleVo productionScheduleVo : productionScheduleVos) {
                         // 退火工序锁定
                         if(productionScheduleRetThVo.getProcesses() != null && productionScheduleRetThVo.getProcesses().size()>0){
                             for (ProductionProcesses process : productionScheduleVo.getProcesses()) {
@@ -243,6 +415,22 @@ public class ApsServiceImpl implements ApsService {
                                 }
                             }
                         }
+                        // 设备列表赋值
+                        List<String> blankIds = new ArrayList<>();
+                        for (ProductionProcesses pross : productionScheduleVo.getProcesses()) {
+                            for (ProduceOrder produceOrder : pross.getProduceOrder()) {
+                                blankIds.add(produceOrder.getId());
+                            }
+                        }
+                        blankIds = blankIds.stream().distinct().collect(Collectors.toList());
+                        // 排程计划设备集合
+                        List<Equipment> equipmentList1 = new ArrayList<>();
+                        List<ApsProcessOperationDo> operationDos1 = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
+                                .in(ApsProcessOperationDo::getBlankid, blankIds));
+                        for (ApsProcessOperationDo operationDo : operationDos1) {
+                            List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList1,eqMaps,blankIds,null,productionScheduleVo,apsConfigs.get(0));
+                        }
+                        productionScheduleVo.setEquipmentList(equipmentList1);
 
                         System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
                         logger.info("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
@@ -252,7 +440,7 @@ public class ApsServiceImpl implements ApsService {
                             throw new CustomException(productionScheduleRetVo.getMsg());
                         }
                         apsBlankOrderService.apsAfter(productionScheduleRetVo,dataMap.get(productionScheduleVo.getProductionScheduleId()));
-                    }
+                    }*/
                 }
             } catch (Exception e) {
                 e.printStackTrace();
@@ -265,16 +453,22 @@ public class ApsServiceImpl implements ApsService {
         }
     }
 
-    /**
-     * 原始订单表数据转换APS平台模型数据
-     *
-     * @param apsBlankOrders
-     * @return
-     */
-    @Override
-    public ProductionScheduleVo apsProductionScheduleInit(List<ApsBlankOrderVo> apsBlankOrders) {
-        // 待排程坯料计划ID集合
-        List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
+    private void getAllNextPross(ProductionProcesses rootProcesses,Map<String,ProductionProcesses> allProcesses,List<ProductionProcesses> pss,Set<String> opId){
+        if(rootProcesses.getNextProcessesIds() != null && rootProcesses.getNextProcessesIds().size()>0){
+            for (String nextProcessesId : rootProcesses.getNextProcessesIds()) {
+                ProductionProcesses processes = allProcesses.get(nextProcessesId);
+                if(processes != null){
+                    pss.add(processes);
+                    for (String s : processes.getBsProcessesId()) {
+                        opId.add(s);
+                    }
+                    getAllNextPross(processes,allProcesses,pss,opId);
+                }
+            }
+        }
+    }
+
+    private ProductionScheduleVo productionScheduleVoInit(){
         ProductionScheduleVo productionScheduleVo = new ProductionScheduleVo();
         productionScheduleVo.setProductionScheduleId("批量排程-"+SecurityUtil.getUUID());
         List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
@@ -309,15 +503,26 @@ public class ApsServiceImpl implements ApsService {
         // 洗炉合金配置数据设置
         List<WashingMetal> washingMetalConfig = apsBlankOrderDao.getWashingMetalConfig();
         productionScheduleVo.setClosealloynames(washingMetalConfig);
+        // 小卷退火合并
+        List<ApsFurnaceInstallationDo> furnaceInstallationDos = apsFurnaceInstallationService.list();
+        productionScheduleVo.setFurnaceInstallations(furnaceInstallationDos);
+        // 小卷退火兼容
+        List<ApsMergeFurnaceDo> mergeFurnaceDos = apsMergeFurnaceService.list();
+        productionScheduleVo.setMergeFurnaces(mergeFurnaceDos);
+        return productionScheduleVo;
+    }
 
-        // 所有设备
-        List<AspCheckItemsDo> eqs = aspCheckItemsService.list(new LambdaQueryWrapper<>());
-        Map<String, AspCheckItemsDo> eqMaps = new HashMap<>();
-        for (AspCheckItemsDo eq : eqs) {
-            eqMaps.put(eq.getId(), eq);
-        }
-        // 排程计划设备集合
-        List<Equipment> equipmentList = new ArrayList<>();
+    /**
+     * 原始订单表数据转换APS平台模型数据
+     *
+     * @param apsBlankOrders
+     * @return
+     */
+    @Override
+    public ProductionScheduleVo apsProductionScheduleInit(List<ApsBlankOrderVo> apsBlankOrders) {
+        // 待排程坯料计划ID集合
+        List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
+        ProductionScheduleVo productionScheduleVo = productionScheduleVoInit();
         // 排程计划工序任务集合
         List<ProductionProcesses> processesList = new ArrayList<>();
         // 坯料计划ID和所属工序作业ID对应关系
@@ -356,9 +561,9 @@ public class ApsServiceImpl implements ApsService {
                     }
                     operationMaps.put(operationDo.getId(),operationDo);
                     // 设备列表初始化
-                    List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList,eqMaps,blankids,productionScheduleVo,apsScheduleConfig);
+//                    List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList,eqMaps,blankids,productionScheduleVo,apsScheduleConfig);
                     // 工序作业相关数据初始化
-                    productionProcessesInit(operationDo,produceOrder,optionalEquipments,processesList,operationProductionProcesses,apsBlankOrderVo,productionScheduleVo);
+                    productionProcessesInit(operationDo,produceOrder,processesList,operationProductionProcesses,apsBlankOrderVo,productionScheduleVo);
                 }
                 // 前后关联关系初始化
                 processesRelationInit(rootOperationDo,operationProductionProcesses,operationMaps,apsBlankOrderVo);
@@ -368,13 +573,13 @@ public class ApsServiceImpl implements ApsService {
         }
         // 合并生产工序
         productionScheduleVo.setProcesses(processesList);
-        productionScheduleVo.setEquipmentList(equipmentList);
+//        productionScheduleVo.setEquipmentList(equipmentList);
         productionScheduleVo.setBlankProcessIds(blankProcessIds);
         return productionScheduleVo;
     }
 
     private List<String> equipmentListInit(ApsProcessOperationDo operationDo,List<Equipment> equipmentList,Map<String, AspCheckItemsDo> eqMaps
-            ,List<String> blankids,ProductionScheduleVo productionScheduleVo,ApsScheduleConfigDo apsScheduleConfig){
+            ,List<String> blankids,Set<String> opId,ProductionScheduleVo productionScheduleVo,ApsScheduleConfigDo apsScheduleConfig){
         // 设备列表
         List<String> optionalEquipments = new ArrayList<>();
         if (StringUtils.isNotBlank(operationDo.getCanchoosedeviceid())) {
@@ -405,19 +610,45 @@ public class ApsServiceImpl implements ApsService {
                         ep.setFurnace(apsScheduleConfig.getFurnace());
                         equipment.setEquipmentParameter(ep);
                         // 查询设备锁定的已排程的时间段
-                        List<ApsProcessOperationProcessEquDo> processEqus = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
-                                .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
-                                .notIn(ApsProcessOperationProcessEquDo::getBlankid, blankids)
-                                .ge(ApsProcessOperationProcessEquDo::getPlanenddate, productionScheduleVo.getApsPlanStartDate())
-                                .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate)
-                        );
+                        List<ApsProcessOperationProcessEquDo> processEqus = null;
+                        if(blankids != null && blankids.size()>0){
+                            processEqus = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+                                    .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
+                                    .eq(ApsProcessOperationProcessEquDo::getLockmark, "y")
+//                                    .notIn(ApsProcessOperationProcessEquDo::getBlankid, blankids)
+                                    .ge(ApsProcessOperationProcessEquDo::getPlanenddate, productionScheduleVo.getApsPlanStartDate())
+                                    .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate)
+                            );
+                        }else if(opId != null && opId.size()>0){
+                            processEqus = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+                                    .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
+                                    .eq(ApsProcessOperationProcessEquDo::getLockmark, "y")
+//                                    .notIn(ApsProcessOperationProcessEquDo::getProcessid, opId)
+                                    .ge(ApsProcessOperationProcessEquDo::getPlanenddate, productionScheduleVo.getApsPlanStartDate())
+                                    .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate)
+                            );
+                        }
+
                         // 查询当前设备最后一个生产任务、连续生产需要考虑使用
-                        List<ApsProcessOperationProcessEquDo> lastpros = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
-                                .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
-                                .notIn(ApsProcessOperationProcessEquDo::getBlankid, blankids)
-                                .lt(ApsProcessOperationProcessEquDo::getPlanstartdate, productionScheduleVo.getApsPlanStartDate())
-                                .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate)
-                        );
+                        List<ApsProcessOperationProcessEquDo> lastpros = null;
+                        if(blankids != null && blankids.size()>0){
+                            lastpros = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+                                    .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
+                                    .eq(ApsProcessOperationProcessEquDo::getLockmark, "y")
+//                                    .notIn(ApsProcessOperationProcessEquDo::getBlankid, blankids)
+                                    .lt(ApsProcessOperationProcessEquDo::getPlanstartdate, productionScheduleVo.getApsPlanStartDate())
+                                    .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate)
+                            );
+                        }else if(opId != null && opId.size()>0){
+                            lastpros = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+                                    .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
+                                    .eq(ApsProcessOperationProcessEquDo::getLockmark, "y")
+//                                    .notIn(ApsProcessOperationProcessEquDo::getProcessid, opId)
+                                    .lt(ApsProcessOperationProcessEquDo::getPlanstartdate, productionScheduleVo.getApsPlanStartDate())
+                                    .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate)
+                            );
+                        }
+
                         if (lastpros != null && lastpros.size() > 0) {
                             boolean hasLast = true;
                             ApsProcessOperationProcessEquDo lastpro = lastpros.get(0);
@@ -590,22 +821,27 @@ public class ApsServiceImpl implements ApsService {
      * 工序作业模型初始化
      * @param operationDo
      * @param produceOrder
-     * @param optionalEquipments
      * @param processesList
      * @param operationProductionProcesses
      */
-    private void productionProcessesInit(ApsProcessOperationDo operationDo,ProduceOrder produceOrder,List<String> optionalEquipments
+    private void productionProcessesInit(ApsProcessOperationDo operationDo,ProduceOrder produceOrder
             ,List<ProductionProcesses> processesList,Map<String,List<ProductionProcesses>> operationProductionProcesses,ApsBlankOrderVo apsBlankOrderVo,ProductionScheduleVo productionScheduleVo){
         // 输出物料
         List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
                 .eq(ApsProcessOperationOutMaterDo::getMainid, operationDo.getId()));
         List<ProductionProcesses> operationProcess = new ArrayList<>();
         if(operationDo != null && operationDo.getPlanprocessrall() != null && operationDo.getPlanprocessrall()>0){
+            List<String> optionalEquipments = new ArrayList<>();
+            String[] sbIds = operationDo.getCanchoosedeviceid().split(",");
+            for (String equIds : sbIds) {
+                optionalEquipments.add(equIds);
+            }
+            // 锁定的作业
             if(LOCKMARK_Y.equals(operationDo.getLockmark())){
                 List<ApsProcessOperationProcessEquDo> processDetails = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
                         .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId()));
                 for (ApsProcessOperationProcessEquDo processDetail : processDetails) {
-                    ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos);
+                    ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo);
                     processes.setIfLock(true);
                     processes.setEquipmentId(processDetail.getProcessdeviceid());
                     List<String> opeqs = new ArrayList<>();
@@ -617,24 +853,104 @@ public class ApsServiceImpl implements ApsService {
                     operationProcess.add(processes);
                 }
             }else{
-                for (Integer i = 0; i < operationDo.getPlanprocessrall(); i++) {
-                    ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos);
-                    if(apsBlankOrderVo.getPlanhavematerialdate() != null){
-                        // 全局配置
-                        ApsOverallConfig apsOverallConfig = new ApsOverallConfig();
-                        Date startDate = apsBlankOrderVo.getPlanhavematerialdate();
-                        LocalDateTime startTime = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-                        apsOverallConfig.setStartTimeLong(startDate.getTime());
-                        apsOverallConfig.setStartTime(startTime);
-                        // 排程全局配置
-                        apsOverallConfig.setRoamTime(productionScheduleVo.getRoamTime());
-                        apsOverallConfig.setWashingtime(productionScheduleVo.getWashingtime());
-                        apsOverallConfig.setStandingtime(productionScheduleVo.getStandingtime());
-                        apsOverallConfig.setClosealloynames(productionScheduleVo.getClosealloynames());
-                        apsOverallConfig.setLooseness(productionScheduleVo.getLooseness());
-                        processes.setApsOverallConfig(apsOverallConfig);
+                if("小卷成退".equals(operationDo.getProcess())){
+                    String previousprocessid = operationDo.getPreviousprocessid();
+                    ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
+                    if(preprocess == null){
+                        throw new CustomException("小卷成退没有前道工序:"+operationDo.getId());
+                    }
+                    Integer planprocessrall = preprocess.getPlanprocessrall();
+                    Integer ys = operationDo.getPlanprocessrall() % planprocessrall;
+                    Integer js = operationDo.getPlanprocessrall() / planprocessrall;
+                    for (Integer i = 0; i < planprocessrall; i++) {
+                        ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo);
+                        if(apsBlankOrderVo.getPlanhavematerialdate() != null){
+                            // 全局配置
+                            ApsOverallConfig apsOverallConfig = new ApsOverallConfig();
+                            Date startDate = apsBlankOrderVo.getPlanhavematerialdate();
+                            LocalDateTime startTime = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+                            apsOverallConfig.setStartTimeLong(startDate.getTime());
+                            apsOverallConfig.setStartTime(startTime);
+                            // 排程全局配置
+                            apsOverallConfig.setRoamTime(productionScheduleVo.getRoamTime());
+                            apsOverallConfig.setWashingtime(productionScheduleVo.getWashingtime());
+                            apsOverallConfig.setStandingtime(productionScheduleVo.getStandingtime());
+                            apsOverallConfig.setClosealloynames(productionScheduleVo.getClosealloynames());
+                            apsOverallConfig.setFurnaceInstallations(productionScheduleVo.getFurnaceInstallations());
+                            apsOverallConfig.setMergeFurnaces(productionScheduleVo.getMergeFurnaces());
+                            apsOverallConfig.setLooseness(productionScheduleVo.getLooseness());
+                            processes.setApsOverallConfig(apsOverallConfig);
+                        }
+                        Integer alls = js;
+                        if(i<ys){
+                            alls = alls + 1;
+                        }
+                        processes.setSinglerollweight(operationDo.getSinglerollweight().multiply(new BigDecimal(alls)));
+
+                        operationProcess.add(processes);
+                    }
+
+                } else if ("小卷包装".equals(operationDo.getProcess())) {
+                    String previousprocessid = operationDo.getPreviousprocessid();
+                    ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
+                    if(preprocess == null){
+                        throw new CustomException("小卷成退没有前道工序:"+operationDo.getId());
+                    }
+                    if("小卷成退".equals(preprocess.getProcess())){
+                        preprocess = apsProcessOperationService.getById(preprocess.getPreviousprocessid());
+                    }
+                    Integer planprocessrall = preprocess.getPlanprocessrall();
+                    Integer ys = operationDo.getPlanprocessrall() % planprocessrall;
+                    Integer js = operationDo.getPlanprocessrall() / planprocessrall;
+                    for (Integer i = 0; i < planprocessrall; i++) {
+                        ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo);
+                        if(apsBlankOrderVo.getPlanhavematerialdate() != null){
+                            // 全局配置
+                            ApsOverallConfig apsOverallConfig = new ApsOverallConfig();
+                            Date startDate = apsBlankOrderVo.getPlanhavematerialdate();
+                            LocalDateTime startTime = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+                            apsOverallConfig.setStartTimeLong(startDate.getTime());
+                            apsOverallConfig.setStartTime(startTime);
+                            // 排程全局配置
+                            apsOverallConfig.setRoamTime(productionScheduleVo.getRoamTime());
+                            apsOverallConfig.setWashingtime(productionScheduleVo.getWashingtime());
+                            apsOverallConfig.setStandingtime(productionScheduleVo.getStandingtime());
+                            apsOverallConfig.setClosealloynames(productionScheduleVo.getClosealloynames());
+                            apsOverallConfig.setFurnaceInstallations(productionScheduleVo.getFurnaceInstallations());
+                            apsOverallConfig.setMergeFurnaces(productionScheduleVo.getMergeFurnaces());
+                            apsOverallConfig.setLooseness(productionScheduleVo.getLooseness());
+                            processes.setApsOverallConfig(apsOverallConfig);
+                        }
+                        Integer alls = js;
+                        if(i<ys){
+                            alls = alls + 1;
+                        }
+                        processes.setProduceTime(operationDo.getOnceprocessmin().intValue() * alls);
+
+                        operationProcess.add(processes);
+                    }
+                }else{
+                    for (Integer i = 0; i < operationDo.getPlanprocessrall(); i++) {
+                        ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo);
+                        if(apsBlankOrderVo.getPlanhavematerialdate() != null){
+                            // 全局配置
+                            ApsOverallConfig apsOverallConfig = new ApsOverallConfig();
+                            Date startDate = apsBlankOrderVo.getPlanhavematerialdate();
+                            LocalDateTime startTime = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+                            apsOverallConfig.setStartTimeLong(startDate.getTime());
+                            apsOverallConfig.setStartTime(startTime);
+                            // 排程全局配置
+                            apsOverallConfig.setRoamTime(productionScheduleVo.getRoamTime());
+                            apsOverallConfig.setWashingtime(productionScheduleVo.getWashingtime());
+                            apsOverallConfig.setStandingtime(productionScheduleVo.getStandingtime());
+                            apsOverallConfig.setClosealloynames(productionScheduleVo.getClosealloynames());
+                            apsOverallConfig.setFurnaceInstallations(productionScheduleVo.getFurnaceInstallations());
+                            apsOverallConfig.setMergeFurnaces(productionScheduleVo.getMergeFurnaces());
+                            apsOverallConfig.setLooseness(productionScheduleVo.getLooseness());
+                            processes.setApsOverallConfig(apsOverallConfig);
+                        }
+                        operationProcess.add(processes);
                     }
-                    operationProcess.add(processes);
                 }
             }
             processesList.addAll(operationProcess);
@@ -643,7 +959,8 @@ public class ApsServiceImpl implements ApsService {
     }
 
     private ProductionProcesses productionProcessesDetailInit(ApsProcessOperationDo operationDo,ProduceOrder produceOrder
-            ,List<String> optionalEquipments,List<ApsProcessOperationOutMaterDo> outMaterDos){
+            ,List<String> optionalEquipments,List<ApsProcessOperationOutMaterDo> outMaterDos,ApsBlankOrderVo apsBlankOrderVo){
+        String warnPreMsg = "坯料计划号:"+apsBlankOrderVo.getBlanknumber()+"  作业类型:"+operationDo.getProcess()+"  作业名称:"+operationDo.getProcessname();
         ProductionProcesses processes = new ProductionProcesses();
         // 工序所属订单
         processes.setProduceOrder(Arrays.asList(new ProduceOrder[]{produceOrder}));
@@ -659,9 +976,21 @@ public class ApsServiceImpl implements ApsService {
         processes.setProducePcNum(operationDo.getPlanprocessrall());
         processes.setProcessType(operationDo.getProcess());
         // 单次加工时长
+        if(operationDo.getOnceprocessmin() == null){
+            throw new CustomException(warnPreMsg + "的作业单卷加工时间为空");
+        }
         processes.setUnitProduceTime(operationDo.getOnceprocessmin().intValue());
         processes.setProduceTime(operationDo.getOnceprocessmin().intValue());
         // 单卷宽度和重量
+        if(operationDo.getProwidth() == null){
+            throw new CustomException(warnPreMsg + "的作业单卷宽度为空");
+        }
+        if(operationDo.getSinglerollweight() == null){
+            throw new CustomException(warnPreMsg + "的作业单卷重量为空");
+        }
+        if(operationDo.getThickness() == null){
+            throw new CustomException(warnPreMsg + "的作业单卷厚度为空");
+        }
         processes.setVolumeWidth(operationDo.getProwidth());
         processes.setSinglerollweight(operationDo.getSinglerollweight());
         processes.setVolumeThickness(operationDo.getThickness());
@@ -672,12 +1001,16 @@ public class ApsServiceImpl implements ApsService {
             processes.setMaxWaitTime(operationDo.getMaxflowwaitmin().intValue());
         }
         // 合金
+        if(operationDo.getMetal() == null){
+            throw new CustomException(warnPreMsg + "的作业合金为空");
+        }
         processes.setVolumeMetal(operationDo.getMetal());
-        if("成退".equals(operationDo.getProcess()) || "中退".equals(operationDo.getProcess())){
+        if("成退".equals(operationDo.getProcess()) || "中退".equals(operationDo.getProcess()) || "小卷成退".equals(operationDo.getProcess())){
             processes.setVolumeMetalstate(outMaterDos.get(0).getMetalstate());
         }else{
             processes.setVolumeMetalstate(operationDo.getMetalstate());
         }
+        processes.setProducttype(operationDo.getProducttype());
         // 连续生产标识设置
         // 合金+输入物料+宽度+输入物料厚度+输出物料厚度(取第一个冷轧工序使用)
         processes.setSeriesProduceMark(operationDo.getMetal() + "^_^" + operationDo.getProducttype() + "^_^" + operationDo.getProwidth() + "^_^" + operationDo.getThickness() + "^_^" + outMaterDos.get(0).getThickness());

+ 3 - 3
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_schedule_config");
+        strategy.setInclude("aps_furnace_installation");
         strategy.setNaming(NamingStrategy.underline_to_camel); // 自动转换表名的驼峰命名法
         strategy.setColumnNaming(NamingStrategy.no_change); // 自动转换列名的驼峰命名法
         strategy.setEntityLombokModel(true); // 是否使用lombox
@@ -127,7 +127,7 @@ public class CodeGeneration {
                 return entityParentPath + tableInfo.getEntityName() + "Do" + StringPool.DOT_JAVA;
             }
         });
-        /*focList.add(new FileOutConfig("/gentemplates/mapper.java.vm") {
+        focList.add(new FileOutConfig("/gentemplates/mapper.java.vm") {
             @Override
             public String outputFile(TableInfo tableInfo) {
                 // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
@@ -147,7 +147,7 @@ public class CodeGeneration {
                 // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                 return commonPath + "service\\impl\\" + tableInfo.getEntityName() + "ServiceImpl" + StringPool.DOT_JAVA;
             }
-        });*/
+        });
         cfg.setFileOutConfigList(focList);
 
         autoGenerator.setCfg(cfg);

+ 92 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsFurnaceInstallationDo.java

@@ -0,0 +1,92 @@
+package com.rongwei.bsentity.domain;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 小卷成退合并装炉分组
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-07-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("aps_furnace_installation")
+public class ApsFurnaceInstallationDo extends BaseDo {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId("ID")
+    private String id;
+    /**
+     * 租户ID
+     */
+    @TableField("TENANTID")
+    private String tenantid;
+    /**
+     * 扩展json格式配置
+     */
+    @TableField("ROPTION")
+    private String roption;
+    /**
+     * 分组编号
+     */
+    @TableField("GROUPNUMBER")
+    private String groupnumber;
+    /**
+     * 合金
+     */
+    @TableField("ALLOY")
+    private String alloy;
+    /**
+     * 输出合金状态
+     */
+    @TableField("ALLOYSTATUS")
+    private String alloystatus;
+    /**
+     * 厚度-起(毫米)
+     */
+    @TableField("STARTTHICKNESS")
+    private BigDecimal startthickness;
+    /**
+     * 厚度-止(毫米)
+     */
+    @TableField("ENDTHICKNESS")
+    private BigDecimal endthickness;
+    /**
+     * 宽度-起(毫米)
+     */
+    @TableField("STARTWIDTH")
+    private Integer startwidth;
+    /**
+     * 宽度-止(毫米)
+     */
+    @TableField("ENDWIDTH")
+    private Integer endwidth;
+    /**
+     * 主表id
+     */
+    @TableField("MAINID")
+    private String mainid;
+    /**
+     * 分组描述
+     */
+    @TableField("DESCRIPTION")
+    private String description;
+
+
+}

+ 61 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsMergeFurnaceDo.java

@@ -0,0 +1,61 @@
+package com.rongwei.bsentity.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 小卷成退合并装炉兼容
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-07-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("aps_merge_furnace")
+public class ApsMergeFurnaceDo extends BaseDo {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId("ID")
+    private String id;
+    /**
+     * 租户ID
+     */
+    @TableField("TENANTID")
+    private String tenantid;
+    /**
+     * 扩展json格式配置
+     */
+    @TableField("ROPTION")
+    private String roption;
+    /**
+     * 兼容组
+     */
+    @TableField("COMPATIBILITYGROUP")
+    private String compatibilitygroup;
+    /**
+     * 主表id
+     */
+    @TableField("MAINID")
+    private byte[] mainid;
+    /**
+     * 兼容组描述
+     */
+    @TableField("COMDESCRIPTION")
+    private String comdescription;
+
+
+}

+ 12 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ApsOverallConfig.java

@@ -1,6 +1,8 @@
 package com.rongwei.bsentity.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.rongwei.bsentity.domain.ApsFurnaceInstallationDo;
+import com.rongwei.bsentity.domain.ApsMergeFurnaceDo;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -34,6 +36,16 @@ public class ApsOverallConfig implements Serializable {
      */
     private List<WashingMetal> closealloynames;
 
+    /**
+     * 小卷成退合并装炉分组规则
+     */
+    private List<ApsFurnaceInstallationDo> furnaceInstallations;
+
+    /**
+     * 小卷成退合并装炉兼容规则
+     */
+    private List<ApsMergeFurnaceDo> mergeFurnaces;
+
     /**
      * 洗炉时间(小时)
      */

+ 27 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CommonVo.java

@@ -0,0 +1,27 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class CommonVo {
+
+    private String str1;
+
+    private String str2;
+
+    private String str3;
+
+    private String str4;
+
+    private Integer int1;
+
+    private Integer int2;
+
+    private BigDecimal big1;
+
+    private BigDecimal big2;
+
+    private BigDecimal big3;
+}

+ 10 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ProductionProcesses.java

@@ -109,6 +109,8 @@ public class ProductionProcesses{
     private BigDecimal volumeWidth;
     // 单卷厚度
     private BigDecimal volumeThickness;
+    // 产品类型
+    private String producttype;
 
     /**
      * 单卷重
@@ -535,4 +537,12 @@ public class ProductionProcesses{
     public void setApsOverallConfig(ApsOverallConfig apsOverallConfig) {
         this.apsOverallConfig = apsOverallConfig;
     }
+
+    public String getProducttype() {
+        return producttype;
+    }
+
+    public void setProducttype(String producttype) {
+        this.producttype = producttype;
+    }
 }

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

@@ -3,6 +3,8 @@ package com.rongwei.bsentity.vo;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.rongwei.bsentity.domain.ApsFurnaceInstallationDo;
+import com.rongwei.bsentity.domain.ApsMergeFurnaceDo;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -55,6 +57,16 @@ public class ProductionScheduleVo {
      */
     private List<WashingMetal> closealloynames;
 
+    /**
+     * 小卷成退合并装炉分组规则
+     */
+    private List<ApsFurnaceInstallationDo> furnaceInstallations;
+
+    /**
+     * 小卷成退合并装炉兼容规则
+     */
+    private List<ApsMergeFurnaceDo> mergeFurnaces;
+
     /**
      * 洗炉时间(小时)
      */