Forráskód Böngészése

APS二开服务业务数据转换模型数据

fangpy 1 éve
szülő
commit
81c347f19f

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

@@ -0,0 +1,16 @@
+package com.rongwei.bscommon.sys.dao;
+
+import com.rongwei.bsentity.domain.ApsScheduleConfigDo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 排程全局配置表 Mapper 接口
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-03-27
+ */
+public interface ApsScheduleConfigDao extends BaseMapper<ApsScheduleConfigDo> {
+
+}

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

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

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

@@ -0,0 +1,16 @@
+package com.rongwei.bscommon.sys.service;
+
+import com.rongwei.bsentity.domain.ApsScheduleConfigDo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 排程全局配置表 服务类
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-03-27
+ */
+public interface ApsScheduleConfigService extends IService<ApsScheduleConfigDo> {
+
+}

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

@@ -3,17 +3,16 @@ 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 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.ApsBlankOrderService;
+import com.rongwei.bscommon.sys.service.*;
 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.*;
 import com.rongwei.bsentity.vo.*;
+import com.rongwei.rwcommon.base.exception.CustomException;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.safecommon.utils.SaveConstans;
@@ -47,12 +46,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     private RwApsServer rwApsServer;
     @Autowired
     private ApsProcessOperationProcessEquServiceImpl processOperationProcessEquService;
+    @Autowired
+    private ApsScheduleConfigService apsScheduleConfigService;
 
     /**
      * 订单批量排程
      * @param apsPlanVo
      */
-    public void apsScheduling(ApsPlanVo apsPlanVo){
+    public void apsScheduling(ApsPlanVo apsPlanVo) throws Exception{
         // 设置批量排程默认开始时间(当前时间向后移8小时)
         if(apsPlanVo.getApsPlanStartDate() == null){
             apsPlanVo.setApsPlanStartDate(DateUtil.date().offset(DateField.HOUR,8));
@@ -69,6 +70,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         apsPlanVo.setApsBlankOrderDos(apsBlankOrders);
         // 模型转换
         ProductionScheduleVo productionScheduleVo = apsPlanModelSet(apsPlanVo);
+        System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo));
         // APS平台排程接口调用
         ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
         // 排程结果保存
@@ -116,6 +118,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
                         apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
                         apsProcessOperationProcessEqu.setPlanprocessrall(v.size());
+                        apsProcessOperationProcessEqu.setProcessworkshopid(process.getEquipment().getWorkshopid());
+                        apsProcessOperationProcessEqu.setProcessworkshop(process.getEquipment().getWorkshopname());
+                        apsProcessOperationProcessEqu.setTenantid(process.getEquipment().getFactoryid());
                         apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
                         zyIds.add(k);
                     });
@@ -142,9 +147,23 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         List<ApsBlankOrderVo> apsBlankOrders = apsPlanVo.getApsBlankOrderDos();
         ProductionScheduleVo productionScheduleVo = new ProductionScheduleVo();
         // 排程计划开始时间
-        productionScheduleVo.setApsPlanStartDate(apsPlanVo.getApsPlanStartDate());
         productionScheduleVo.setProductionScheduleId("批量排程");
-        productionScheduleVo.setPlanSeconds(10);
+        productionScheduleVo.setApsPlanStartDate(apsPlanVo.getApsPlanStartDate());
+        List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
+        if (apsConfigs != null && apsConfigs.size()>0){
+            ApsScheduleConfigDo apsScheduleConfig = apsConfigs.get(0);
+            productionScheduleVo.setPlanSeconds(apsScheduleConfig.getScheduleruntime());
+            if(productionScheduleVo.getApsPlanStartDate() == null){
+                productionScheduleVo.setApsPlanStartDate(apsScheduleConfig.getApsplanstartdate());
+            }
+            Map<String,Integer> roamTime = new HashMap<>();
+            roamTime.put("WORKSHOP_IN",apsScheduleConfig.getWorkshopin());
+            roamTime.put("WORKSHOP_CROSS",apsScheduleConfig.getWorkshopcross());
+            productionScheduleVo.setRoamTime(roamTime);
+        }else{
+            throw new CustomException("排程参数缺失");
+        }
+
         // 所有设备
         List<AspCheckItemsDo> eqs = aspCheckItemsService.list(new LambdaQueryWrapper<>());
         Map<String,AspCheckItemsDo> eqMaps = new HashMap<>();
@@ -190,6 +209,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                 equipment.setBsEquipmentId(equIds);
                                 equipment.setId(equIds);
                                 equipment.setEquipmentName(checkItemsD.getCheckitemname());
+                                equipment.setWorkshopid(checkItemsD.getUsedeptid());
+                                equipment.setWorkshopname(checkItemsD.getUsedeptname());
+                                equipment.setFactoryid(checkItemsD.getTenantid());
+                                equipment.setFactory(checkItemsD.getOwnedfactory());
                                 optionalEquipments.add(equIds);
                                 equipmentList.add(equipment);
                             }
@@ -208,12 +231,12 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         processes.setProduceTime(processes.getUnitProduceTime()*processes.getProducePcNum());
 
                         // 上道工序
-                        if(StringUtils.isNotBlank(operationDo.getPreviousprocess())){
-                            processes.setPreviousProcessesIds(Arrays.asList(operationDo.getPreviousprocess().split(",")));
+                        if(StringUtils.isNotBlank(operationDo.getPreviousprocessid())){
+                            processes.setPreviousProcessesIds(Arrays.asList(operationDo.getPreviousprocessid().split(",")));
                         }
                         // 下道工序
-                        if(StringUtils.isNotBlank(operationDo.getNextprocess())){
-                            processes.setNextProcessesIds(Arrays.asList(operationDo.getNextprocess().split(",")));
+                        if(StringUtils.isNotBlank(operationDo.getNextprocessid())){
+                            processes.setNextProcessesIds(Arrays.asList(operationDo.getNextprocessid().split(",")));
                         }
                         processesList.add(processes);
                     }
@@ -357,12 +380,12 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                     }
 
                                     // 上道工序
-                                    if(StringUtils.isNotBlank(processOperationM.getPreviousprocess())){
-                                        processes.getPreviousProcessesIds().addAll(Arrays.asList(processOperationM.getPreviousprocess().split(",")));
+                                    if(StringUtils.isNotBlank(processOperationM.getPreviousprocessid())){
+                                        processes.getPreviousProcessesIds().addAll(Arrays.asList(processOperationM.getPreviousprocessid().split(",")));
                                     }
                                     // 下道工序
-                                    if(StringUtils.isNotBlank(processOperationM.getNextprocess())){
-                                        processes.getNextProcessesIds().addAll(Arrays.asList(processOperationM.getNextprocess().split(",")));
+                                    if(StringUtils.isNotBlank(processOperationM.getNextprocessid())){
+                                        processes.getNextProcessesIds().addAll(Arrays.asList(processOperationM.getNextprocessid().split(",")));
                                     }
                                     // 单次加工时长
                                     if(processes.getUnitProduceTime() == null){
@@ -389,7 +412,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         }
                         int haslast = 0;
                         for(int i=m+1;i<aspCheckItemsDos.size();i++){
-                            if(haslast == lastnum){
+                            if(lastnum <= 0){
                                 break;
                             }
                             AspCheckItemsDo aspCheckItem = aspCheckItemsDos.get(i);
@@ -435,31 +458,34 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                         processes.setUnitProduceTime(processOperationM.getOnceprocessmin().intValue());
                                         processes.setProduceTime(processOperationM.getOnceprocessmin().intValue());
                                         // 上道工序
-                                        if(StringUtils.isNotBlank(processOperationM.getPreviousprocess())){
-                                            processes.setPreviousProcessesIds(Arrays.asList(processOperationM.getPreviousprocess().split(",")));
+                                        if(StringUtils.isNotBlank(processOperationM.getPreviousprocessid())){
+                                            processes.setPreviousProcessesIds(Arrays.asList(processOperationM.getPreviousprocessid().split(",")));
                                         }
                                         // 下道工序
-                                        if(StringUtils.isNotBlank(processOperationM.getNextprocess())){
-                                            processes.setNextProcessesIds(Arrays.asList(processOperationM.getNextprocess().split(",")));
+                                        if(StringUtils.isNotBlank(processOperationM.getNextprocessid())){
+                                            processes.setNextProcessesIds(Arrays.asList(processOperationM.getNextprocessid().split(",")));
                                         }
                                         processesList.add(processes);
 
                                         lastnum = lastnum - haslast;
+                                        // 记录最后选用设备的顺序
+                                        m = i;
                                     }
                                 }
                             }
                         }
                     }
 
-                    if(lastnum == 0){
+                    if(lastnum <= 0){
                         a = false;
                     }
 
                     // 循环超过2秒则强制退出防止内存溢出
-                    /*long timeend = DateUtil.date().getTime();
+                    long timeend = DateUtil.date().getTime();
                     if(timeend-timestart>3000){
+                        System.out.println("数据异常强制退出,剩余待加工数量:" + lastnum);
                         a = false;
-                    }*/
+                    }
                 }
             }
         }

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

@@ -0,0 +1,20 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import com.rongwei.bsentity.domain.ApsScheduleConfigDo;
+import com.rongwei.bscommon.sys.dao.ApsScheduleConfigDao;
+import com.rongwei.bscommon.sys.service.ApsScheduleConfigService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 排程全局配置表 服务实现类
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-03-27
+ */
+@Service
+public class ApsScheduleConfigServiceImpl extends ServiceImpl<ApsScheduleConfigDao, ApsScheduleConfigDo> implements ApsScheduleConfigService {
+
+}

+ 92 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsScheduleConfigDo.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-03-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("aps_schedule_config")
+public class ApsScheduleConfigDo extends BaseDo {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId("ID")
+    private String id;
+    /**
+     * 机台流转周期(单位:分钟)
+     */
+    @TableField("WORKSHOPIN")
+    private Integer workshopin;
+    /**
+     * 车间流转周期(单位:分钟)
+     */
+    @TableField("WORKSHOPCROSS")
+    private Integer workshopcross;
+    /**
+     * 分厂流转周期(单位:分钟)
+     */
+    @TableField("FACTORYCROSS")
+    private Integer factorycross;
+    /**
+     * 排程算法运行时间
+     */
+    @TableField("SCHEDULERUNTIME")
+    private Integer scheduleruntime;
+    /**
+     * 排程开始时间
+     */
+    @TableField("APSPLANSTARTDATE")
+    private Date apsplanstartdate;
+    /**
+     * 松散度
+     */
+    @TableField("LOOSENESS")
+    private BigDecimal looseness;
+    /**
+     * 参数1
+     */
+    @TableField("PARAMETERONE")
+    private String parameterone;
+    /**
+     * 参数2
+     */
+    @TableField("PARAMETERTWO")
+    private String parametertwo;
+    /**
+     * 参数3
+     */
+    @TableField("PARAMETERTHREE")
+    private String parameterthree;
+    /**
+     * 租户ID
+     */
+    @TableField("TENANTID")
+    private String tenantid;
+    /**
+     * 扩展json格式配置
+     */
+    @TableField("ROPTION")
+    private String roption;
+
+
+}

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

@@ -35,11 +35,21 @@ public class Equipment{
      */
     private Integer eqOrder;
 
+    /**
+     * 设备所属工厂id
+     */
+    private String factoryid;
+
     /**
      * 设备所属工厂
      */
     private String factory;
 
+    /**
+     * 设备所属车间ID
+     */
+    private String workshopid;
+
     /**
      * 设备所属车间
      */

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

@@ -1,5 +1,6 @@
 package com.rongwei.bsentity.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.util.Date;
@@ -30,6 +31,7 @@ public class ProduceOrder {
     /**
      * 交货日期
      */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
     private Date deliveryDate;
 
     /**

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

@@ -1,10 +1,12 @@
 package com.rongwei.bsentity.vo;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 @Data
 public class ProductionScheduleVo {
@@ -17,6 +19,7 @@ public class ProductionScheduleVo {
     /**
      * APS 排程计划开始时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date apsPlanStartDate;
 
     /**
@@ -34,4 +37,11 @@ public class ProductionScheduleVo {
      */
     private List<Equipment> equipmentList;
 
+    /**
+     * 工序之间流转时间设置(暂时不考虑跨工厂)
+     * 车间内流转时间:WORKSHOP_IN
+     * 跨车间流转时间:WORKSHOP_CROSS
+     */
+    private Map<String,Integer> roamTime;
+
 }

+ 20 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsScheduleConfigController.java

@@ -0,0 +1,20 @@
+package com.rongwei.bsserver.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 排程全局配置表 前端控制器
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-03-27
+ */
+@RestController
+@RequestMapping("/apsScheduleConfig")
+public class ApsScheduleConfigController {
+
+}
+

+ 4 - 1
cx-aps/cx-aps-server/src/main/resources/bootstrap.yml

@@ -11,6 +11,9 @@ spring:
     multipart:
       max-file-size: 100MB
       max-request-size: 1000MB
+  jackson:
+    time-zone: GMT+8
+    date-format: yyyy-MM-dd HH:mm:ss
 server:
   port: 9688
 
@@ -24,7 +27,7 @@ feign:
     config:
       default:
         connectTimeout: 5000
-        readTimeout: 5000
+        readTimeout: 60000
   sentinel:
     enabled: true
 jwt: