Browse Source

APS重新排程、锁定、解锁功能

fangpy 1 year ago
parent
commit
b571eb78cc

+ 15 - 0
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -537,4 +537,19 @@ public class SaveConstans {
         public static final String SCHEDULSTATUS_HASRELEASE = "已发布";
     }
 
+    /**
+     * 是否锁定
+     */
+    public static class LockmarkType {
+        /**
+         * 是
+         */
+        public static final String LOCKMARK_Y = "y";
+        /**
+         * 否
+         */
+        public static final String LOCKMARK_N = "n";
+
+    }
+
 }

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

@@ -28,6 +28,9 @@ public interface ApsBlankOrderDao extends BaseMapper<ApsBlankOrderDo> {
     @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);
 
+    @Select("select a.*,b.DELIVERYDATE from aps_blank_order a LEFT JOIN aps_production_order b on a.PRODUCTIONORDERID=b.ID " +
+            "where b.SCHEDULSTATUS='待发布' and (a.LOCKMARK='n' or a.LOCKMARK is null) and a.DELETED='0' and b.DELETED='0'")
+    List<ApsBlankOrderVo> getNotLockOrders();
 
     @Update("update aps_blank_order set CRAFTROUTEID = #{craftrouteid} where ID=#{blankId} ")
     void upCraftrouteId(@Param("blankId") String blankId, @Param("craftrouteid") String craftrouteid);

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

@@ -2,7 +2,9 @@ package com.rongwei.bscommon.sys.service;
 
 import com.rongwei.bsentity.domain.ApsBlankOrderDo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwei.bsentity.vo.ApsBlankOrderVo;
 import com.rongwei.bsentity.vo.ApsPlanVo;
+import com.rongwei.bsentity.vo.OrderLockVo;
 import com.rongwei.bsentity.vo.ProductionScheduleVo;
 
 import java.util.List;
@@ -17,8 +19,14 @@ import java.util.List;
  */
 public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
 
+    void orderLock(OrderLockVo orderLockVo) throws Exception;
+
+    void apsReScheduling() throws Exception;
+
     void apsScheduling(ApsPlanVo apsPlanVo) throws Exception;
 
-    ProductionScheduleVo apsPlanModelSet(ApsPlanVo apsPlanVo);
+    void blankOrderAps(List<ApsBlankOrderVo> apsBlankOrders);
+
+    ProductionScheduleVo apsPlanModelSet(List<ApsBlankOrderVo> apsBlankOrders);
 
 }

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

@@ -53,11 +53,36 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     private ApsProductionOrderService apsProductionOrderService;
 
     /**
-     *
-     * @param apsBlankOrders
+     * 锁定、解锁
+     * @param orderLockVo
+     * @throws Exception
      */
-    private void apsCheck(List<ApsBlankOrderVo> apsBlankOrders){
+    @Override
+    public void orderLock(OrderLockVo orderLockVo) throws Exception {
+        if(StringUtils.isNotBlank(orderLockVo.getLockMark())){
+            if(orderLockVo.getBlackOrderId() != null && orderLockVo.getBlackOrderId().size()>0){
+                List<ApsBlankOrderDo> blankOrderDos = new ArrayList<>();
+                for (String id : orderLockVo.getBlackOrderId()) {
+                    ApsBlankOrderDo blankOrderDo = new ApsBlankOrderDo();
+                    blankOrderDo.setId(id);
+                    blankOrderDo.setLockmark(orderLockVo.getLockMark());
+                    blankOrderDos.add(blankOrderDo);
+                }
+                if(blankOrderDos != null && blankOrderDos.size()>0){
+                    this.updateBatchById(blankOrderDos);
+                }
+            }
+        }
+    }
 
+    /**
+     * 重新排程
+     * 所有待发布的未锁定的订单重新排程
+     */
+    @Override
+    public void apsReScheduling() throws Exception{
+        List<ApsBlankOrderVo> notLockOrders = apsBlankOrderDao.getNotLockOrders();
+        blankOrderAps(notLockOrders);
     }
 
     /**
@@ -65,10 +90,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
      * @param apsPlanVo
      */
     public void apsScheduling(ApsPlanVo apsPlanVo) throws Exception{
-        // 设置批量排程默认开始时间(当前时间向后移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()) {
@@ -79,8 +100,17 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             }
         }
         apsPlanVo.setApsBlankOrderDos(apsBlankOrders);
+        blankOrderAps(apsBlankOrders);
+    }
+
+    /**
+     * 生产订单排程
+     * @param apsBlankOrders
+     */
+    @Override
+    public void blankOrderAps(List<ApsBlankOrderVo> apsBlankOrders){
         // 模型转换
-        ProductionScheduleVo productionScheduleVo = apsPlanModelSet(apsPlanVo);
+        ProductionScheduleVo productionScheduleVo = apsPlanModelSet(apsBlankOrders);
         System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo));
         // APS平台排程接口调用
         ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
@@ -188,16 +218,13 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
     /**
      * 原始订单表数据转换APS平台模型数据
-     * @param apsPlanVo
+     * @param apsBlankOrders
      * @return
      */
     @Override
-    public ProductionScheduleVo apsPlanModelSet(ApsPlanVo apsPlanVo){
-        List<ApsBlankOrderVo> apsBlankOrders = apsPlanVo.getApsBlankOrderDos();
+    public ProductionScheduleVo apsPlanModelSet(List<ApsBlankOrderVo> apsBlankOrders){
         ProductionScheduleVo productionScheduleVo = new ProductionScheduleVo();
-        // 排程计划开始时间
         productionScheduleVo.setProductionScheduleId("批量排程");
-        productionScheduleVo.setApsPlanStartDate(apsPlanVo.getApsPlanStartDate());
         List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
         if (apsConfigs != null && apsConfigs.size()>0){
             ApsScheduleConfigDo apsScheduleConfig = apsConfigs.get(0);
@@ -209,6 +236,12 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             roamTime.put("WORKSHOP_IN",apsScheduleConfig.getWorkshopin());
             roamTime.put("WORKSHOP_CROSS",apsScheduleConfig.getWorkshopcross());
             productionScheduleVo.setRoamTime(roamTime);
+            // 排程计划开始时间
+            int a = 8;
+            if(apsScheduleConfig.getStartschedulerun() != null){
+                a = apsScheduleConfig.getStartschedulerun();
+            }
+            productionScheduleVo.setApsPlanStartDate(DateUtil.date().offset(DateField.HOUR,a));
         }else{
             throw new CustomException("排程参数缺失");
         }
@@ -258,16 +291,20 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                     equipment.setWorkshopname(checkItemsD.getUsedeptname());
                                     equipment.setFactoryid(checkItemsD.getTenantid());
                                     equipment.setFactory(checkItemsD.getOwnedfactory());
-                                    // 查询设备已排程的时间段
+                                    // 查询设备锁定的已排程的时间段
                                     List<ApsProcessOperationProcessEquDo> processEqus = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
-                                            .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds).ge(ApsProcessOperationProcessEquDo::getPlanstartdate,DateUtil.date()));
+                                            .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
+                                            .ge(ApsProcessOperationProcessEquDo::getPlanstartdate,productionScheduleVo.getApsPlanStartDate())
+                                            .eq(ApsProcessOperationProcessEquDo::getLockmark,SaveConstans.LockmarkType.LOCKMARK_Y));
                                     if(processEqus != null && processEqus.size()>0){
                                         List<EquipmentRunTime> equipmentRunTimes = new ArrayList<>();
                                         for (ApsProcessOperationProcessEquDo equs : processEqus) {
                                             EquipmentRunTime er = new EquipmentRunTime();
                                             er.setStartRunTime(equs.getPlanstartdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
                                             er.setEndRunTime(equs.getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                                            equipmentRunTimes.add(er);
                                         }
+                                        equipment.setEquipmentRunTimes(equipmentRunTimes);
                                     }
                                     equipmentList.add(equipment);
                                 }
@@ -308,6 +345,18 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         if(StringUtils.isNotBlank(operationDo.getNextprocessid())){
                             processes.setNextProcessesIds(Arrays.asList(operationDo.getNextprocessid().split(",")));
                         }
+                        // 连续生产标识设置
+                        // 铸轧
+                        if("铸轧".equals(processes.getProcessType())){
+                            // 合金+宽度
+                            processes.setSeriesProduceMark(operationDo.getMetal()+"^_^"+operationDo.getProwidth());
+                        }
+                        // 冷轧
+                        else if("冷轧".equals(processes.getProcessType())){
+                            // 合金+输入物料+宽度
+                            processes.setSeriesProduceMark(operationDo.getMetal()+"^_^"+operationDo.getPlaninput()+"^_^"+operationDo.getProwidth());
+                        }
+
                         processesList.add(processes);
                     }
                 }

+ 42 - 7
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsBlankOrderDo.java

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author fpy
- * @since 2024-03-01
+ * @since 2024-04-08
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -68,17 +68,17 @@ public class ApsBlankOrderDo extends BaseDo {
     @TableField("ALLOYSTATUS")
     private String alloystatus;
     /**
-     * 厚度
+     * 厚度(mm)
      */
     @TableField("THICKNESS")
     private BigDecimal thickness;
     /**
-     * 宽度
+     * 宽度(mm)
      */
     @TableField("PROWIDTH")
     private BigDecimal prowidth;
     /**
-     * 长度
+     * 长度(mm)
      */
     @TableField("PROLENGTH")
     private BigDecimal prolength;
@@ -117,6 +117,26 @@ public class ApsBlankOrderDo extends BaseDo {
      */
     @TableField("PREPAREMATERIALBATCHNO")
     private String preparematerialbatchno;
+    /**
+     * 输出订单产品
+     */
+    @TableField("OUTPUTORDERPRODUCT")
+    private String outputorderproduct;
+    /**
+     * 输出成品
+     */
+    @TableField("OUTPUTFINISHPRODUCT")
+    private String outputfinishproduct;
+    /**
+     * 输出物料
+     */
+    @TableField("OUTPUTMATERIAL")
+    private String outputmaterial;
+    /**
+     * 生产状态
+     */
+    @TableField("PRODUCTSTATUS")
+    private String productstatus;
     /**
      * 所属租户ID
      */
@@ -128,10 +148,25 @@ public class ApsBlankOrderDo extends BaseDo {
     @TableField("ROPTION")
     private String roption;
     /**
-     * 生产状态
+     * 产品类型ID
      */
-    @TableField("PRODUCTSTATUS")
-    private String productstatus;
+    @TableField("PRODUCTTYPEID")
+    private String producttypeid;
+    /**
+     * 输入物料描述
+     */
+    @TableField("INPUTREPORTDESCRIBE")
+    private String inputreportdescribe;
+    /**
+     * 选择的工艺路线ID
+     */
+    @TableField("CRAFTROUTEID")
+    private String craftrouteid;
+    /**
+     * 是否锁定 y:锁定,n:未锁定
+     */
+    @TableField("LOCKMARK")
+    private String lockmark;
 
 
 }

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

@@ -1,22 +1,22 @@
 package com.rongwei.bsentity.domain;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 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;
 
-import java.util.Date;
-
 /**
  * <p>
  * 生产订单-坯料计划-工序作业加工设备
  * </p>
  *
  * @author fpy
- * @since 2024-03-25
+ * @since 2024-04-07
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -24,7 +24,7 @@ import java.util.Date;
 @TableName("aps_process_operation_process_equ")
 public class ApsProcessOperationProcessEquDo extends BaseDo {
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID=1L;
 
     /**
      * 主键ID
@@ -133,6 +133,11 @@ public class ApsProcessOperationProcessEquDo extends BaseDo {
      */
     @TableField("WAITREPORTID")
     private String waitreportid;
+    /**
+     * 是否锁定 y:锁定,n:未锁定
+     */
+    @TableField("LOCKMARK")
+    private String lockmark;
 
 
 }

+ 31 - 1
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsScheduleConfigDo.java

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author fpy
- * @since 2024-03-27
+ * @since 2024-04-07
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -87,6 +87,36 @@ public class ApsScheduleConfigDo extends BaseDo {
      */
     @TableField("ROPTION")
     private String roption;
+    /**
+     * 最早排程时间(单位:小时)
+     */
+    @TableField("STARTSCHEDULERUN")
+    private Integer startschedulerun;
+    /**
+     * 铸轧立板周期(单位:天)
+     */
+    @TableField("TRCCROSS")
+    private Integer trccross;
+    /**
+     * 换辊周期(单位:天)
+     */
+    @TableField("REPLACECROSS")
+    private Integer replacecross;
+    /**
+     * 默认交货期(单位:天)
+     */
+    @TableField("DELIVERYDATA")
+    private Integer deliverydata;
+    /**
+     * 交期允许浮动(单位:天)
+     */
+    @TableField("ALLOWFLOAT")
+    private Integer allowfloat;
+    /**
+     * 瓶颈工序
+     */
+    @TableField("BOTTLENPROCESS")
+    private String bottlenprocess;
 
 
 }

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

@@ -0,0 +1,15 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+import java.util.List;
+
+@Data
+public class OrderLockVo {
+
+    // 锁定:y,解锁:n
+    private String lockMark;
+
+    // 锁定或者解锁坯料计划ID
+    private List<String> blackOrderId;
+
+}

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

@@ -67,6 +67,11 @@ public class ProductionProcesses{
      */
     private String mergeProcessMark;
 
+    /**
+     * 连续生产标识
+     */
+    private String seriesProduceMark;
+
     /**
      * 工序流转时间
      */
@@ -328,4 +333,12 @@ public class ProductionProcesses{
     public void setProcessType(String processType) {
         this.processType = processType;
     }
+
+    public String getSeriesProduceMark() {
+        return seriesProduceMark;
+    }
+
+    public void setSeriesProduceMark(String seriesProduceMark) {
+        this.seriesProduceMark = seriesProduceMark;
+    }
 }

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

@@ -3,6 +3,7 @@ package com.rongwei.bsserver.controller;
 
 import com.rongwei.bscommon.sys.service.ApsBlankOrderService;
 import com.rongwei.bsentity.vo.ApsPlanVo;
+import com.rongwei.bsentity.vo.OrderLockVo;
 import com.rongwei.rwcommon.base.R;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -37,5 +38,28 @@ public class ApsBlankOrderController {
         return R.ok();
     }
 
+    /**
+     * 重新排程
+     *
+     * @param apsPlanVo
+     * @return
+     */
+    @PostMapping("/apsReScheduling")
+    public R apsReScheduling(@RequestBody ApsPlanVo apsPlanVo) throws Exception {
+        apsBlankOrderService.apsReScheduling();
+        return R.ok();
+    }
+
+    /**
+     * 坯料计划锁定解锁
+     * @param
+     * @return
+     */
+    @PostMapping("/orderLock")
+    public R orderLock(@RequestBody OrderLockVo orderLockVo) throws Exception {
+        apsBlankOrderService.orderLock(orderLockVo);
+        return R.ok();
+    }
+
 }