Kaynağa Gözat

feature 找回被覆盖的代码

xiahan 1 yıl önce
ebeveyn
işleme
e6451c6f66

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

@@ -2,6 +2,12 @@ package com.rongwei.bscommon.sys.dao;
 
 import com.rongwei.bsentity.domain.ApsBlankOrderDo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwei.bsentity.domain.AspCheckItemsDo;
+import com.rongwei.bsentity.vo.ApsBlankOrderVo;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ApsBlankOrderDao extends BaseMapper<ApsBlankOrderDo> {
 
+    @Select("select a.*,b.PLANENDDATE from asp_check_items a LEFT JOIN \n" +
+            "(select PROCESSDEVICEID,MAX(PLANENDDATE) PLANENDDATE from aps_process_operation_process_equ where DELETED='0' GROUP BY PROCESSDEVICEID) b on a.ID=b.PROCESSDEVICEID\n" +
+            "where a.DELETED='0' and a.ID in (${ids}) ORDER BY b.PLANENDDATE ASC")
+    List<AspCheckItemsDo> eqAscs(@Param("ids") String ids);
+
+    @Select("select a.*,b.DELIVERYDATE from aps_blank_order a LEFT JOIN aps_production_order b on a.PRODUCTIONORDERID=b.ID where a.PRODUCTIONORDERID=#{orderId} and a.DELETED='0' and b.DELETED='0'")
+    List<ApsBlankOrderVo> getByOrderId(@Param("orderId") String orderId);
+
 }

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

@@ -17,6 +17,8 @@ import java.util.List;
  */
 public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
 
+    void apsScheduling(ApsPlanVo apsPlanVo);
+
     ProductionScheduleVo apsPlanModelSet(ApsPlanVo apsPlanVo);
 
 }

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

@@ -1,24 +1,30 @@
 package com.rongwei.bscommon.sys.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUtil;
 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.ApsBlankOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.service.ApsProcessOperationService;
+import com.rongwei.bscommon.sys.service.ApsProductionOrderService;
 import com.rongwei.bscommon.sys.service.AspCheckItemsService;
-import com.rongwei.bsentity.domain.ApsBlankOrderDo;
-import com.rongwei.bsentity.domain.ApsProcessOperationDo;
-import com.rongwei.bsentity.domain.AspCheckItemsDo;
+import com.rongwei.bsentity.domain.*;
 import com.rongwei.bsentity.vo.*;
+import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.safecommon.utils.SaveConstans;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.math.BigDecimal;
+import java.time.ZoneId;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -35,6 +41,96 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     private ApsProcessOperationService apsProcessOperationService;
     @Autowired
     private AspCheckItemsService aspCheckItemsService;
+    @Autowired
+    private ApsBlankOrderDao apsBlankOrderDao;
+    @Autowired
+    private RwApsServer rwApsServer;
+    @Autowired
+    private ApsProcessOperationProcessEquServiceImpl processOperationProcessEquService;
+
+    /**
+     * 订单批量排程
+     * @param apsPlanVo
+     */
+    public void apsScheduling(ApsPlanVo apsPlanVo){
+        // 设置批量排程默认开始时间(当前时间向后移8小时)
+        if(apsPlanVo.getApsPlanStartDate() == null){
+            apsPlanVo.setApsPlanStartDate(DateUtil.date().offset(DateField.HOUR,8));
+        }
+        List<ApsBlankOrderVo> apsBlankOrders = new ArrayList<>();
+        if(apsPlanVo.getApsProductionOrders() != null){
+            for (ApsProductionOrderDo apsProductionOrder : apsPlanVo.getApsProductionOrders()) {
+                List<ApsBlankOrderVo> byOrderId = apsBlankOrderDao.getByOrderId(apsProductionOrder.getId());
+                if(byOrderId != null && byOrderId.size()>0){
+                    apsBlankOrders.addAll(byOrderId);
+                }
+            }
+        }
+        apsPlanVo.setApsBlankOrderDos(apsBlankOrders);
+        // 模型转换
+        ProductionScheduleVo productionScheduleVo = apsPlanModelSet(apsPlanVo);
+        // APS平台排程接口调用
+        ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
+        // 排程结果保存
+        List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = new ArrayList<>();
+        // 作业ID集合
+        List<String> zyIds = new ArrayList<>();
+        if(productionScheduleRetVo.getProcesses() != null && productionScheduleRetVo.getProcesses().size()>0){
+            for (ProductionProcesses process : productionScheduleRetVo.getProcesses()) {
+                // 非合并生产工序
+                if(process.getAluminumCoils() == null){
+                    ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
+                    apsProcessOperationProcessEqu.setId(SecurityUtil.getUUID());
+                    apsProcessOperationProcessEqu.setProcessid(process.getId());
+                    apsProcessOperationProcessEqu.setProcessdeviceid(process.getEquipment().getId());
+                    apsProcessOperationProcessEqu.setProcessdevice(process.getEquipment().getEquipmentName());
+                    apsProcessOperationProcessEqu.setProcessworkshopid(process.getEquipment().getWorkshop());
+                    apsProcessOperationProcessEqu.setProcessworkshop(process.getEquipment().getWorkshopname());
+                    apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
+                    apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
+                    apsProcessOperationProcessEqu.setPlanprocessrall(process.getProducePcNum());
+                    apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
+                    zyIds.add(process.getId());
+                }
+                // 合并生产工序
+                else {
+                    // 保存到明细表
+                    Map<String,List<AluminumCoil>> bsAl = new HashMap<>();
+                    for (AluminumCoil aluminumCoil : process.getAluminumCoils()) {
+                        if(bsAl.containsKey(aluminumCoil.getBsId())){
+                            bsAl.get(aluminumCoil.getBsId()).add(aluminumCoil);
+                        }else{
+                            List<AluminumCoil> coils = new ArrayList<>();
+                            coils.add(aluminumCoil);
+                            bsAl.put(aluminumCoil.getBsId(),coils);
+                        }
+                    }
+                    bsAl.forEach((k,v)->{
+                        ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
+                        apsProcessOperationProcessEqu.setId(SecurityUtil.getUUID());
+                        apsProcessOperationProcessEqu.setProcessid(k);
+                        apsProcessOperationProcessEqu.setProcessdeviceid(process.getEquipment().getId());
+                        apsProcessOperationProcessEqu.setProcessdevice(process.getEquipment().getEquipmentName());
+                        apsProcessOperationProcessEqu.setProcessworkshopid(process.getEquipment().getWorkshop());
+                        apsProcessOperationProcessEqu.setProcessworkshop(process.getEquipment().getWorkshopname());
+                        apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
+                        apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
+                        apsProcessOperationProcessEqu.setPlanprocessrall(v.size());
+                        apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
+                        zyIds.add(k);
+                    });
+                }
+            }
+        }
+        if(apsProcessOperationProcessEquDos != null && apsProcessOperationProcessEquDos.size()>0){
+            // 先删除所有作业的明细
+            if (zyIds != null && zyIds.size()>0){
+                processOperationProcessEquService.remove(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getProcessid,zyIds));
+            }
+            // 再保存新数据
+            processOperationProcessEquService.saveBatch(apsProcessOperationProcessEquDos);
+        }
+    }
 
     /**
      * 原始订单表数据转换APS平台模型数据
@@ -47,6 +143,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         ProductionScheduleVo productionScheduleVo = new ProductionScheduleVo();
         // 排程计划开始时间
         productionScheduleVo.setApsPlanStartDate(apsPlanVo.getApsPlanStartDate());
+        productionScheduleVo.setProductionScheduleId("批量排程");
+        productionScheduleVo.setPlanSeconds(10);
+        // 所有设备
+        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<>();
         // 排程计划工序任务集合
@@ -72,6 +176,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         ApsProcessOperationVo processOperationVo = new ApsProcessOperationVo();
                         BeanUtil.copyProperties(operationDo,processOperationVo);
                         processOperationVo.setProduceOrder(produceOrder);
+                        processOperationVo.setDeliverydate(apsBlankOrderVo.getDeliverydate());
+                        processOperationVo.setApsBlankOrderVo(apsBlankOrderVo);
                         processOperationMs.add(processOperationVo);
                     }else {
                         // 非合并生产工序
@@ -79,7 +185,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         if(StringUtils.isNotBlank(operationDo.getCanchoosedeviceid())){
                             String[] sbIds = operationDo.getCanchoosedeviceid().split(",");
                             for (String equIds : sbIds) {
-                                AspCheckItemsDo checkItemsD = aspCheckItemsService.getById(equIds);
+                                AspCheckItemsDo checkItemsD = eqMaps.get(equIds);
                                 Equipment equipment = new Equipment();
                                 equipment.setBsEquipmentId(equIds);
                                 equipment.setId(equIds);
@@ -95,6 +201,12 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         processes.setBsProcessesId(operationDo.getId());
                         // 工序任务可选设备
                         processes.setOptionalEquipments(optionalEquipments);
+                        // 批次
+                        processes.setProducePcNum(operationDo.getPlanprocessrall());
+                        // 单次加工时长
+                        processes.setUnitProduceTime(operationDo.getPlanoncetime().intValue());
+                        processes.setProduceTime(processes.getUnitProduceTime()*processes.getProducePcNum());
+
                         // 上道工序
                         if(StringUtils.isNotBlank(operationDo.getPreviousprocess())){
                             processes.setPreviousProcessesIds(Arrays.asList(operationDo.getPreviousprocess().split(",")));
@@ -109,7 +221,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             }
         }
         // 合并生产工序
-        List<ProductionProcesses> productionProcesses = mergeProcesses(processOperationMs);
+        List<ProductionProcesses> productionProcesses = mergeProcesses(processOperationMs,eqMaps);
         processesList.addAll(productionProcesses);
 
         productionScheduleVo.setProcesses(processesList);
@@ -122,9 +234,217 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
      * @param processOperationMs
      * @return
      */
-    private List<ProductionProcesses> mergeProcesses(List<ApsProcessOperationVo> processOperationMs){
+    private List<ProductionProcesses> mergeProcesses(List<ApsProcessOperationVo> processOperationMs,Map<String,AspCheckItemsDo> eqMaps){
+        // 最终的合并工序
         List<ProductionProcesses> processesList = new ArrayList<>();
+        if(processOperationMs != null && processOperationMs.size()>0){
+            // 按照期望交货期排序
+            processOperationMs.sort(Comparator.comparing(ApsProcessOperationVo::getDeliverydate));
+            // 获取所有设备,并按已存在最晚完工时间排序
+            String allSelEqs = null;
+            for (ApsProcessOperationVo processOperationM : processOperationMs) {
+                if(StringUtils.isNotBlank(processOperationM.getCanchoosedeviceid())){
+                    String[] sbIds = processOperationM.getCanchoosedeviceid().split(",");
+                    for (String equIds : sbIds) {
+                        if(allSelEqs == null){
+                            allSelEqs = "'"+equIds+"'";
+                        }else{
+                            if(!allSelEqs.contains(equIds)){
+                                allSelEqs = allSelEqs + ",'"+equIds+"'";
+                            }
+                        }
+                    }
+                }
+            }
+            // 设备排序
+            List<AspCheckItemsDo> aspCheckItemsDos = apsBlankOrderDao.eqAscs(allSelEqs);
+            Map<String,AspCheckItemsDo> aspCheckItemMap = new HashMap<>();
+            for (AspCheckItemsDo aspCheckItemsDo : aspCheckItemsDos) {
+                aspCheckItemMap.put(aspCheckItemsDo.getId(),aspCheckItemsDo);
+            }
+            // 记录最后选择的设备序号
+            Integer m = 0;
+            for (ApsProcessOperationVo processOperationM : processOperationMs) {
+                // 作业加工卷数
+                int planprocessrall = processOperationM.getPlanprocessrall();
+                if(planprocessrall<=0){
+                    continue;
+                }
+                Boolean a = true;
+                long timestart = DateUtil.date().getTime();
+
+                while (a){
+                    int lastnum = planprocessrall;
+
+                    // 首先看已合并生产的设备是否还有余量继续排产
+                    for (ProductionProcesses processes : processesList) {
+                        // 加工设备
+                        String eq = processes.getOptionalEquipments().get(0);
+                        AspCheckItemsDo aspCheckItem = aspCheckItemMap.get(eq);
+
+                        // 合金和合金状态要一致
+                        if(processes.getAluminumCoils().get(0).getVolumeMetal().equals(processOperationM.getMetal())
+                                && processes.getAluminumCoils().get(0).getVolumeMetalstate().equals(processOperationM.getMetalstate())){
+                            // 宽度不超过50mm,厚度不超过0.05mm,重量不超过1吨
+                            boolean bol = true;
+                            BigDecimal totalWidth = null;
+                            BigDecimal totalWeight = null;
+                            for (AluminumCoil aluminumCoil : processes.getAluminumCoils()) {
+                                // 宽度不超过50mm
+                                if(aluminumCoil.getVolumeWidth().subtract(processOperationM.getProwidth()).abs().compareTo(new BigDecimal("50"))>0){
+                                    bol = false;
+                                }
+                                // 厚度不超过0.05mm
+                                if(aluminumCoil.getVolumeThickness().subtract(processOperationM.getThickness()).abs().compareTo(new BigDecimal("0.05"))>0){
+                                    bol = false;
+                                }
+                                // 重量不超过1吨
+                                if(aluminumCoil.getVolumeWeight().subtract(processOperationM.getSinglerollweight()).abs().compareTo(new BigDecimal("1"))>0){
+                                    bol = false;
+                                }
+                                if(totalWidth == null){
+                                    totalWidth = aluminumCoil.getVolumeWidth();
+                                }else{
+                                    totalWidth = totalWidth.add(aluminumCoil.getVolumeWidth());
+                                }
+                                if(totalWeight == null){
+                                    totalWeight = aluminumCoil.getVolumeWeight();
+                                }else{
+                                    totalWeight = totalWeight.add(aluminumCoil.getVolumeWeight());
+                                }
+                            }
+                            if(bol){
+                                Integer sy = 0;
+                                for (int j=1;j<=planprocessrall;j++){
+                                    // 宽度余量
+                                    if(aspCheckItem.getEquipmentwidth().subtract(totalWidth).compareTo(processOperationM.getProwidth().multiply(new BigDecimal(j)))<0){
+                                        break;
+                                    }
+                                    // 重量余量
+                                    if(aspCheckItem.getEquipmentbearing().subtract(totalWeight).compareTo(processOperationM.getSinglerollweight().multiply(new BigDecimal(j)))<0){
+                                        break;
+                                    }
+                                    sy = j;
+                                }
+                                if(sy>0){
+                                    lastnum = planprocessrall - sy;
+                                    for (int j=1;j<=sy;j++){
+                                        AluminumCoil aluminumCoil = new AluminumCoil();
+                                        aluminumCoil.setBsId(processOperationM.getId());
+                                        aluminumCoil.setVolumeWidth(processOperationM.getProwidth());
+                                        aluminumCoil.setVolumeThickness(processOperationM.getThickness());
+                                        aluminumCoil.setVolumeWeight(processOperationM.getSinglerollweight());
+                                        aluminumCoil.setVolumeMetal(processOperationM.getMetal());
+                                        aluminumCoil.setVolumeMetalstate(processOperationM.getMetalstate());
+                                        processes.getAluminumCoils().add(aluminumCoil);
+                                    }
 
+                                    // 上道工序
+                                    if(StringUtils.isNotBlank(processOperationM.getPreviousprocess())){
+                                        processes.getPreviousProcessesIds().addAll(Arrays.asList(processOperationM.getPreviousprocess().split(",")));
+                                    }
+                                    // 下道工序
+                                    if(StringUtils.isNotBlank(processOperationM.getNextprocess())){
+                                        processes.getNextProcessesIds().addAll(Arrays.asList(processOperationM.getNextprocess().split(",")));
+                                    }
+                                    // 单次加工时长
+                                    if(processes.getUnitProduceTime() == null){
+                                        processes.setUnitProduceTime(processOperationM.getPlanoncetime().intValue());
+                                        processes.setProduceTime(processOperationM.getPlanoncetime().intValue());
+                                    }
+                                    // 加工时长取最大值
+                                    else{
+                                        if(processes.getUnitProduceTime()<processOperationM.getPlanoncetime().intValue()){
+                                            processes.setUnitProduceTime(processOperationM.getPlanoncetime().intValue());
+                                            processes.setProduceTime(processOperationM.getPlanoncetime().intValue());
+                                        }
+                                    }
+
+                                }
+                            }
+                        }
+                    }
+
+                    // 剩余的料卷
+                    if(lastnum>0){
+                        if(m == aspCheckItemsDos.size()-1){
+                            m = -1;
+                        }
+                        int haslast = 0;
+                        for(int i=m+1;i<aspCheckItemsDos.size();i++){
+                            if(haslast == lastnum){
+                                break;
+                            }
+                            AspCheckItemsDo aspCheckItem = aspCheckItemsDos.get(i);
+                            // 选择的设备要在可选设备的范围内
+                            if(processOperationM.getCanchoosedeviceid().contains(aspCheckItem.getId())){
+                                // 单卷宽度不能超过设备宽度并且单卷重不能超过设备的承重
+                                if(processOperationM.getProwidth().compareTo(aspCheckItem.getEquipmentwidth())<0
+                                        && processOperationM.getSinglerollweight().compareTo(aspCheckItem.getEquipmentbearing())<0){
+                                    for(int n=1;n<=lastnum;n++){
+                                        // 宽度余量
+                                        if(aspCheckItem.getEquipmentwidth().compareTo(processOperationM.getProwidth().multiply(new BigDecimal(n)))<0){
+                                            break;
+                                        }
+                                        // 重量余量
+                                        if(aspCheckItem.getEquipmentbearing().compareTo(processOperationM.getSinglerollweight().multiply(new BigDecimal(n)))<0){
+                                            break;
+                                        }
+                                        haslast = n;
+                                    }
+                                    if(haslast>0){
+                                        ProductionProcesses processes = new ProductionProcesses();
+                                        processes.setId(processOperationM.getId());
+                                        processes.setOptionalEquipments(Arrays.asList(new String[]{aspCheckItem.getId()}));
+                                        // 坯料计划订单
+                                        ProduceOrder produceOrder = new ProduceOrder(processOperationM.getApsBlankOrderVo().getId(),processOperationM.getApsBlankOrderVo().getMaterialname(),processOperationM.getApsBlankOrderVo().getDeliverydate());
+                                        processes.setProduceOrder(Arrays.asList(new ProduceOrder[]{produceOrder}));
+
+                                        processes.setAluminumCoils(new ArrayList<>());
+                                        for (int j=1;j<=haslast;j++){
+                                            AluminumCoil aluminumCoil = new AluminumCoil();
+                                            aluminumCoil.setBsId(processOperationM.getId());
+                                            aluminumCoil.setVolumeWidth(processOperationM.getProwidth());
+                                            aluminumCoil.setVolumeThickness(processOperationM.getThickness());
+                                            aluminumCoil.setVolumeWeight(processOperationM.getSinglerollweight());
+                                            aluminumCoil.setVolumeMetal(processOperationM.getMetal());
+                                            aluminumCoil.setVolumeMetalstate(processOperationM.getMetalstate());
+                                            processes.getAluminumCoils().add(aluminumCoil);
+                                        }
+                                        // 批次
+                                        processes.setProducePcNum(1);
+                                        // 单次加工时长
+                                        processes.setUnitProduceTime(processOperationM.getPlanoncetime().intValue());
+                                        processes.setProduceTime(processOperationM.getPlanoncetime().intValue());
+                                        // 上道工序
+                                        if(StringUtils.isNotBlank(processOperationM.getPreviousprocess())){
+                                            processes.setPreviousProcessesIds(Arrays.asList(processOperationM.getPreviousprocess().split(",")));
+                                        }
+                                        // 下道工序
+                                        if(StringUtils.isNotBlank(processOperationM.getNextprocess())){
+                                            processes.setNextProcessesIds(Arrays.asList(processOperationM.getNextprocess().split(",")));
+                                        }
+                                        processesList.add(processes);
+
+                                        lastnum = lastnum - haslast;
+                                    }
+                                }
+                            }
+                        }
+                    }
+
+                    if(lastnum == 0){
+                        a = false;
+                    }
+
+                    // 循环超过2秒则强制退出防止内存溢出
+                    /*long timeend = DateUtil.date().getTime();
+                    if(timeend-timestart>3000){
+                        a = false;
+                    }*/
+                }
+            }
+        }
         return processesList;
     }
 

+ 41 - 34
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -138,48 +138,55 @@
 
 
     <select id="getGanttDataList" resultType="com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo">
-        select
-        apope.PROCESSID,
-        apope.PROCESSWORKSHOPID,
-        apope.PROCESSWORKSHOP,
-        apope.PROCESSDEVICEID,
-        apope.PROCESSDEVICE,
-        apope.PLANSTARTDATE,
-        apope.PLANENDDATE,
-        apope.PROCESSID,
-        apop.PRODUCTNAME,
-        acm.CUSTOMERABBREVIATION,
-        apope.PLANPROCESSRALL,
-        DATE(apo2.DELIVERYDATE) as DELIVERYDATE,
-        apo.PROCESSNAME,
-        apo.WORKSTATUS,
-        apo.STARTINGROLL,
-        apo.REPORTROLL,
-        apo.CHECKOUTROLL,
-        apo.UNFINISHROLL,
-        apo.ACTUALSTARTDATE,
-        apo.ACTUALFINISHDATE
-
-        from aps_process_operation_process_equ apope
-        LEFT JOIN aps_process_operation apo on apo.ID = apope.PROCESSID AND apo.DELETED='0'
-        LEFT JOIN aps_blank_order abo on apo.BLANKID = abo.ID and abo.DELETED='0'
-        LEFT JOIN aps_process_output_product apop on apop.BLANKID =abo.ID
-        LEFT JOIN aps_production_order apo2 on apo2.ID = abo.PRODUCTIONORDERID AND apo2.DELETED='0'
-        LEFT JOIN aps_customer_management acm on apo2.CUSTOMID =acm.ID and acm.DELETED='0'
+        SELECT
+        a4.PRODUCTNAME,
+        a1.PLANPROCESSRALL,
+        a2.PROCESSSTATUS,
+        a1.PLANSTARTDATE,
+        a1.PLANENDDATE,
+        a2.ACTUALSTARTDATE,
+        a2.ACTUALFINISHDATE,
+        a1.PROCESSWORKSHOPID,
+        a1.PROCESSWORKSHOP,
+        a1.PROCESSDEVICEID,
+        a1.PROCESSDEVICE,
+        DATE(a6.DELIVERYDATE) AS DELIVERYDATE,
+        a2.PROCESSNAME,
+        a1.STARTINGROLL,
+        a1.REPORTROLL,
+        a1.CHECKOUTROLL,
+        a1.UNFINISHROLL,
+        a1.WORKSTATUS,
+        (select CUSTOMERABBREVIATION from aps_customer_management where ID =
+        IF(IFNULL(a5.MERGEORDERNUMBER,'')='',a6.CUSTOMID,(select CUSTOMID from aps_production_merge_order where
+        ORDERNO=a5.MERGEORDERNUMBER ) )
+        and DELETED ='0') AS CUSTOMERABBREVIATION
+        FROM
+        aps_process_operation_process_equ a1
+        LEFT JOIN aps_process_operation a2 ON a1.PROCESSID = a2.ID
+        LEFT JOIN aps_blank_order a3 ON a3.ID = a2.BLANKID
+        LEFT JOIN aps_process_output_product a4 ON a3.ID = a4.BLANKID
+        LEFT JOIN aps_product_detail a5 ON a4.PRODUCTID = a5.ID
+        LEFT JOIN aps_production_order a6 on a6.ID= a5.MAINID
         <where>
-            and apope.DELETED='0'
+            a1.DELETED ='0'
+            AND a2.DELETED = '0'
+            AND a3.DELETED = '0'
+            AND a4.DELETED = '0'
+            AND a5.DELETED = '0'
+            AND a6.DELETED='0'
             <if test="workshopIds != null and workshopIds.size()>0">
-                and apope.PROCESSWORKSHOPID in
+                and a1.PROCESSWORKSHOPID in
                 <foreach collection="workshopIds" item="workshopId" open="(" close=")" separator=",">
                     #{workshopId}
                 </foreach>
             </if>
-            <if test="factoryId != null and factoryId != ''">and apope.TENANTID = #{factoryId}</if>
-            <if test="startTime != null ">and apope.PLANSTARTDATE &gt;= #{startTime}</if>
-            <if test="endTime != null ">and apope.PLANENDDATE &lt;= #{endTime}
+            <if test="factoryId != null and factoryId != ''">and a1.TENANTID = #{factoryId}</if>
+            <if test="startTime != null ">and a1.PLANSTARTDATE &gt;= #{startTime}</if>
+            <if test="endTime != null ">and a1.PLANENDDATE &lt;= #{endTime}
             </if>
         </where>
-        order by apope.PLANSTARTDATE asc,apope.PLANENDDATE asc
+        order by a1.PLANSTARTDATE asc,a1.PLANENDDATE asc
     </select>
 
 

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

@@ -384,6 +384,11 @@ public class ApsProcessOperationDo extends BaseDo {
      */
     @TableField("PLANPROCESSNUM")
     private Integer planprocessnum;
+    /**
+     * 计划单次加工时长
+     */
+    @TableField("PLANONCETIME")
+    private BigDecimal planoncetime;
     /**
      * 前道工序作业ID
      */

+ 37 - 31
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProcessOperationProcessEquDo.java

@@ -5,128 +5,134 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.rongwei.rwcommon.base.BaseDo;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
 
-import java.io.Serializable;
 import java.util.Date;
 
 /**
+ * <p>
  * 生产订单-坯料计划-工序作业加工设备
+ * </p>
  *
- * @TableName aps_process_operation_process_equ
+ * @author fpy
+ * @since 2024-03-25
  */
-@TableName(value = "aps_process_operation_process_equ")
 @Data
-public class ApsProcessOperationProcessEquDo extends BaseDo implements Serializable {
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("aps_process_operation_process_equ")
+public class ApsProcessOperationProcessEquDo extends BaseDo {
+
+    private static final long serialVersionUID = 1L;
+
     /**
      * 主键ID
      */
-    @TableId
+    @TableId("ID")
     private String id;
-
-    /**
-     *
-     */
+    @TableField("TENANTID")
     private String tenantid;
-
     /**
      * 扩展json格式配置
      */
+    @TableField("ROPTION")
     private String roption;
-
     /**
      * 所属工厂
      */
+    @TableField("OWNEDFACTORY")
     private String ownedfactory;
-
     /**
      * 工序作业ID
      */
+    @TableField("PROCESSID")
     private String processid;
-
     /**
      * 加工车间ID
      */
+    @TableField("PROCESSWORKSHOPID")
     private String processworkshopid;
-
     /**
      * 加工车间
      */
+    @TableField("PROCESSWORKSHOP")
     private String processworkshop;
-
     /**
      * 加工设备ID
      */
+    @TableField("PROCESSDEVICEID")
     private String processdeviceid;
-
     /**
      * 加工设备
      */
+    @TableField("PROCESSDEVICE")
     private String processdevice;
-
     /**
      * 计划开工时间
      */
+    @TableField("PLANSTARTDATE")
     private Date planstartdate;
-
     /**
      * 实际开工时间
      */
+    @TableField("ACTUALSTARTDATE")
     private Date actualstartdate;
-
     /**
      * 计划完工时间
      */
+    @TableField("PLANENDDATE")
     private Date planenddate;
-
     /**
      * 实际完工时间
      */
+    @TableField("ACTUALFINISHDATE")
     private Date actualfinishdate;
-
     /**
      * 完工状态
      */
+    @TableField("CLOSESTATUS")
     private String closestatus;
-
     /**
      * 计划加工卷数
      */
+    @TableField("PLANPROCESSRALL")
     private Integer planprocessrall;
-
     /**
      * 已开工卷数
      */
+    @TableField("STARTINGROLL")
     private Integer startingroll;
-
     /**
      * 已报工卷数
      */
+    @TableField("REPORTROLL")
     private Integer reportroll;
-
     /**
      * 已检验卷数
      */
+    @TableField("CHECKOUTROLL")
     private Integer checkoutroll;
-
     /**
      * 未完工卷数
      */
+    @TableField("UNFINISHROLL")
     private Integer unfinishroll;
-
     /**
      * 作业状态
      */
+    @TableField("WORKSTATUS")
     private String workstatus;
-
     /**
      * 待加工料卷批次号
      */
+    @TableField("BACHMATERIALPROCESS")
     private String bachmaterialprocess;
-
     /**
      * 待报工记录ID
      */
+    @TableField("WAITREPORTID")
     private String waitreportid;
-    @TableField(exist = false)
-    private static final long serialVersionUID = 1L;
+
+
 }

+ 2 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ApsPlanVo.java

@@ -1,6 +1,7 @@
 package com.rongwei.bsentity.vo;
 
 import com.rongwei.bsentity.domain.ApsBlankOrderDo;
+import com.rongwei.bsentity.domain.ApsProductionOrderDo;
 import lombok.Data;
 import java.util.Date;
 import java.util.List;
@@ -15,4 +16,5 @@ public class ApsPlanVo {
 
     private List<ApsBlankOrderVo> apsBlankOrderDos;
 
+    private List<ApsProductionOrderDo> apsProductionOrders;
 }

+ 11 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ApsProcessOperationVo.java

@@ -3,6 +3,8 @@ package com.rongwei.bsentity.vo;
 import com.rongwei.bsentity.domain.ApsProcessOperationDo;
 import lombok.Data;
 
+import java.util.Date;
+
 @Data
 public class ApsProcessOperationVo extends ApsProcessOperationDo {
 
@@ -10,5 +12,14 @@ public class ApsProcessOperationVo extends ApsProcessOperationDo {
      * 所属订单
      */
     private ProduceOrder produceOrder;
+    /**
+     * 期望交货期
+     */
+    private Date deliverydate;
+
+    /**
+     * 所属坯料计划
+     */
+    private ApsBlankOrderVo apsBlankOrderVo;
 
 }

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

@@ -0,0 +1,10 @@
+package com.rongwei.bsentity.vo;
+
+/**
+ * GanttVo class
+ *
+ * @author XH
+ * @date 2024/03/27
+ */
+public class GanttVo {
+}

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

@@ -1,6 +1,12 @@
 package com.rongwei.bsserver.controller;
 
 
+import com.rongwei.bscommon.sys.service.ApsBlankOrderService;
+import com.rongwei.bsentity.vo.ApsPlanVo;
+import com.rongwei.rwcommon.base.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -16,5 +22,20 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/apsBlankOrder")
 public class ApsBlankOrderController {
 
+    @Autowired
+    private ApsBlankOrderService apsBlankOrderService;
+
+    /**
+     * 订单批量排程
+     *
+     * @param apsPlanVo
+     * @return
+     */
+    @PostMapping("/apsScheduling")
+    public R apsScheduling(@RequestBody ApsPlanVo apsPlanVo) throws Exception {
+        apsBlankOrderService.apsScheduling(apsPlanVo);
+        return R.ok();
+    }
+
 }