|
@@ -1,19 +1,23 @@
|
|
|
package com.rongwei.bscommon.sys.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.date.DateField;
|
|
|
+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.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.ApsService;
|
|
|
-import com.rongwei.bsentity.vo.ApsBlankOrderVo;
|
|
|
-import com.rongwei.bsentity.vo.ProductionScheduleRetVo;
|
|
|
-import com.rongwei.bsentity.vo.ProductionScheduleVo;
|
|
|
+import com.rongwei.bscommon.sys.service.*;
|
|
|
+import com.rongwei.bsentity.domain.*;
|
|
|
+import com.rongwei.bsentity.vo.*;
|
|
|
import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
|
import com.rongwei.rwcommon.base.exception.CustomException;
|
|
|
+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.redisson.api.RLock;
|
|
|
import org.redisson.api.RedissonClient;
|
|
|
import org.slf4j.Logger;
|
|
@@ -21,10 +25,15 @@ import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.util.List;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_Y;
|
|
|
+
|
|
|
@Service
|
|
|
public class ApsServiceImpl implements ApsService {
|
|
|
|
|
@@ -37,6 +46,16 @@ public class ApsServiceImpl implements ApsService {
|
|
|
private ApsBlankOrderDao apsBlankOrderDao;
|
|
|
@Autowired
|
|
|
private RwApsServer rwApsServer;
|
|
|
+ @Autowired
|
|
|
+ private ApsScheduleConfigService apsScheduleConfigService;
|
|
|
+ @Autowired
|
|
|
+ private AspCheckItemsService aspCheckItemsService;
|
|
|
+ @Autowired
|
|
|
+ private ApsProcessOperationService apsProcessOperationService;
|
|
|
+ @Autowired
|
|
|
+ private ApsProcessOperationProcessEquServiceImpl processOperationProcessEquService;
|
|
|
+ @Autowired
|
|
|
+ private ApsEquipmentCalendarService apsEquipmentCalendarService;
|
|
|
|
|
|
@Override
|
|
|
public void apsSchedule(List<ApsBlankOrderVo> apsBlankOrders) {
|
|
@@ -73,7 +92,8 @@ public class ApsServiceImpl implements ApsService {
|
|
|
}
|
|
|
|
|
|
// 模型转换
|
|
|
- ProductionScheduleVo productionScheduleVo = apsBlankOrderService.apsPlanModelSet(apsBlankOrders);
|
|
|
+// ProductionScheduleVo productionScheduleVo = apsBlankOrderService.apsPlanModelSet(apsBlankOrders);
|
|
|
+ ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(apsBlankOrders);
|
|
|
JSONConfig jsonConfig = JSONConfig.create();
|
|
|
jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
|
|
@@ -95,4 +115,336 @@ 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());
|
|
|
+ ProductionScheduleVo productionScheduleVo = new ProductionScheduleVo();
|
|
|
+ productionScheduleVo.setProductionScheduleId("批量排程");
|
|
|
+ List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
|
|
|
+ ApsScheduleConfigDo apsScheduleConfig = null;
|
|
|
+ // 松散度
|
|
|
+ BigDecimal looseness = null;
|
|
|
+ if (apsConfigs != null && apsConfigs.size() > 0) {
|
|
|
+ apsScheduleConfig = apsConfigs.get(0);
|
|
|
+ looseness = apsScheduleConfig.getLooseness();
|
|
|
+ productionScheduleVo.setPlanSeconds(apsScheduleConfig.getScheduleruntime());
|
|
|
+ Map<String, Integer> roamTime = new HashMap<>();
|
|
|
+ Integer workshopin = new BigDecimal(apsScheduleConfig.getWorkshopin()).multiply((looseness.divide(new BigDecimal("100"))).add(new BigDecimal("1")))
|
|
|
+ .setScale(0, RoundingMode.CEILING).intValue();
|
|
|
+ Integer workshopcross = new BigDecimal(apsScheduleConfig.getWorkshopcross()).multiply((looseness.divide(new BigDecimal("100"))).add(new BigDecimal("1")))
|
|
|
+ .setScale(0, RoundingMode.CEILING).intValue();
|
|
|
+ roamTime.put("WORKSHOP_IN", workshopin);
|
|
|
+ roamTime.put("WORKSHOP_CROSS", workshopcross);
|
|
|
+ productionScheduleVo.setRoamTime(roamTime);
|
|
|
+ // 排程计划开始时间
|
|
|
+ int a = 8;
|
|
|
+ if (apsScheduleConfig.getStartschedulerun() != null) {
|
|
|
+ a = apsScheduleConfig.getStartschedulerun();
|
|
|
+ }
|
|
|
+ if (apsScheduleConfig.getApsplanstartdate() != null) {
|
|
|
+ productionScheduleVo.setApsPlanStartDate(apsScheduleConfig.getApsplanstartdate());
|
|
|
+ } else {
|
|
|
+ productionScheduleVo.setApsPlanStartDate(DateUtil.date().offset(DateField.HOUR, a));
|
|
|
+ }
|
|
|
+ productionScheduleVo.setWashingtime(apsScheduleConfig.getWashingtime());
|
|
|
+ productionScheduleVo.setStandingtime(apsScheduleConfig.getStandingtime());
|
|
|
+ } else {
|
|
|
+ throw new CustomException("排程参数缺失");
|
|
|
+ }
|
|
|
+ // 洗炉合金配置数据设置
|
|
|
+ List<WashingMetal> washingMetalConfig = apsBlankOrderDao.getWashingMetalConfig();
|
|
|
+ productionScheduleVo.setClosealloynames(washingMetalConfig);
|
|
|
+
|
|
|
+ // 所有设备
|
|
|
+ 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<>();
|
|
|
+ // 排程计划工序任务集合
|
|
|
+ List<ProductionProcesses> processesList = new ArrayList<>();
|
|
|
+ // 坯料计划ID和所属工序作业ID对应关系
|
|
|
+ Map<String, List<String>> blankProcessIds = new HashMap<>();
|
|
|
+ // 待合并生产的订单工序
|
|
|
+ List<ApsProcessOperationVo> processOperationMs = new ArrayList<>();
|
|
|
+ if (apsBlankOrders != null && apsBlankOrders.size() > 0) {
|
|
|
+ for (ApsBlankOrderVo apsBlankOrderVo : apsBlankOrders) {
|
|
|
+ // 当前坯料计划作业集合
|
|
|
+ List<ProductionProcesses> blankProcessesList = new ArrayList<>();
|
|
|
+ // 父子ID对应关系处理
|
|
|
+ List<String> processIdss = new ArrayList<>();
|
|
|
+ // 坯料计划订单
|
|
|
+ ProduceOrder produceOrder = new ProduceOrder(apsBlankOrderVo.getId(), apsBlankOrderVo.getMaterialname(), DateUtil.offsetHour(apsBlankOrderVo.getDeliverydate(), -apsBlankOrderVo.getDeliverytime()));
|
|
|
+ // 获取所有订单工序
|
|
|
+ List<ApsProcessOperationDo> operationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
|
|
|
+ .eq(ApsProcessOperationDo::getBlankid, apsBlankOrderVo.getId()));
|
|
|
+ // 起始节点
|
|
|
+ ApsProcessOperationDo rootOperationDo = null;
|
|
|
+ // 作业维度缓存
|
|
|
+ Map<String,List<ProductionProcesses>> operationProductionProcesses = new HashMap<>();
|
|
|
+ Map<String,ApsProcessOperationDo> operationMaps = new HashMap<>();
|
|
|
+ // 锁定的合并工序缓存
|
|
|
+ Map<String, ProductionProcesses> lockHbPp = new HashMap<>();
|
|
|
+ // 转换工序模型数据
|
|
|
+ for (ApsProcessOperationDo operationDo : operationDos) {
|
|
|
+ processIdss.add(operationDo.getId());
|
|
|
+ ProductionProcesses processes = new ProductionProcesses();
|
|
|
+ // 工序所属订单
|
|
|
+ processes.setProduceOrder(Arrays.asList(new ProduceOrder[]{produceOrder}));
|
|
|
+ // 判断是否合并生产工序,加工方式是“合并加工”
|
|
|
+ String productprocess = operationDo.getProcessway();
|
|
|
+ // 设备列表
|
|
|
+ List<String> optionalEquipments = new ArrayList<>();
|
|
|
+ if (StringUtils.isNotBlank(operationDo.getCanchoosedeviceid())) {
|
|
|
+ String[] sbIds = operationDo.getCanchoosedeviceid().split(",");
|
|
|
+ for (String equIds : sbIds) {
|
|
|
+ AspCheckItemsDo checkItemsD = eqMaps.get(equIds);
|
|
|
+ if (checkItemsD != null) {
|
|
|
+ optionalEquipments.add(equIds);
|
|
|
+ List<Equipment> eqpts = equipmentList.stream().filter(v -> v.getId().equals(equIds)).collect(Collectors.toList());
|
|
|
+ // 设备集合里不存在时新增
|
|
|
+ if (eqpts == null || eqpts.size() == 0) {
|
|
|
+ Equipment equipment = new Equipment();
|
|
|
+ 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());
|
|
|
+ equipment.setEquassociated(checkItemsD.getEquassociated());
|
|
|
+ // 查询设备锁定的已排程的时间段
|
|
|
+ List<ApsProcessOperationProcessEquDo> processEqus = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
|
|
|
+ .notIn(ApsProcessOperationProcessEquDo::getBlankid, blankids)
|
|
|
+ .ge(ApsProcessOperationProcessEquDo::getPlanstartdate, productionScheduleVo.getApsPlanStartDate())
|
|
|
+ .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate)
|
|
|
+ );
|
|
|
+ // 查询当前设备最后一个生产任务、连续生产需要考虑使用
|
|
|
+ List<ApsProcessOperationProcessEquDo> lastpros = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
|
|
|
+ .notIn(ApsProcessOperationProcessEquDo::getBlankid, blankids)
|
|
|
+ .gt(ApsProcessOperationProcessEquDo::getPlanstartdate, productionScheduleVo.getApsPlanStartDate())
|
|
|
+ .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate)
|
|
|
+ );
|
|
|
+ if (lastpros != null && lastpros.size() > 0) {
|
|
|
+ ApsProcessOperationProcessEquDo lastpro = lastpros.get(0);
|
|
|
+ ApsProcessOperationDo lastop = apsProcessOperationService.getById(lastpro.getProcessid());
|
|
|
+ equipment.setLastProcessType(lastop.getProcess());
|
|
|
+ equipment.setLastProcessEndTime(lastpro.getPlanenddate());
|
|
|
+ equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
|
|
|
+ // 合金+输入物料+宽度
|
|
|
+ equipment.setLastSeriesProduceMark(lastop.getMetal() + "^_^" + lastop.getPlaninput() + "^_^" + lastop.getProwidth());
|
|
|
+ equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
|
|
|
+ }
|
|
|
+ // 查询相关工序作业
|
|
|
+ Set<String> processIds = new HashSet<>();
|
|
|
+ if (processEqus != null && processEqus.size() > 0) {
|
|
|
+ for (ApsProcessOperationProcessEquDo equs : processEqus) {
|
|
|
+ processIds.add(equs.getProcessid());
|
|
|
+ }
|
|
|
+ List<ApsProcessOperationDo> processOperationDos = null;
|
|
|
+ if (processIds.size() > 0) {
|
|
|
+ processOperationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
|
|
|
+ .in(ApsProcessOperationDo::getId, processIds));
|
|
|
+ }
|
|
|
+
|
|
|
+ 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());
|
|
|
+ // 设备占用时间设置连续生产标识,参与排程
|
|
|
+ if (processOperationDos != null) {
|
|
|
+ List<ApsProcessOperationDo> pos = processOperationDos.stream().filter(v -> v.getId().equals(equs.getProcessid())).collect(Collectors.toList());
|
|
|
+ if (pos != null && pos.size() > 0) {
|
|
|
+ ApsProcessOperationDo processesDo = pos.get(0);
|
|
|
+ er.setProcessType(processesDo.getProcess());
|
|
|
+ // 合金+输入物料+宽度
|
|
|
+ er.setSeriesProduceMark(operationDo.getMetal() + "^_^" + operationDo.getPlaninput() + "^_^" + operationDo.getProwidth());
|
|
|
+ er.setPrepressworkmin(processesDo.getPrepressworkmin() == null ? null : processesDo.getPrepressworkmin().intValue());
|
|
|
+ er.setCutfinishmin(processesDo.getCutfinishmin() == null ? null : processesDo.getCutfinishmin().intValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ equipmentRunTimes.add(er);
|
|
|
+ }
|
|
|
+ // 设备日历不可用时间段
|
|
|
+ List<ApsEquipmentCalendarDo> equipmentCalendarDos = apsEquipmentCalendarService.list(
|
|
|
+ new LambdaQueryWrapper<ApsEquipmentCalendarDo>().ge(ApsEquipmentCalendarDo::getSdstarttime, productionScheduleVo.getApsPlanStartDate())
|
|
|
+ .eq(ApsEquipmentCalendarDo::getProcessdeviceid, equipment.getBsEquipmentId()));
|
|
|
+ if (equipmentCalendarDos != null && equipmentCalendarDos.size() > 0) {
|
|
|
+ for (ApsEquipmentCalendarDo equipmentCalendarDo : equipmentCalendarDos) {
|
|
|
+ EquipmentRunTime er = new EquipmentRunTime();
|
|
|
+ er.setStartRunTime(equipmentCalendarDo.getSdstarttime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
+ er.setEndRunTime(equipmentCalendarDo.getSdendtime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
+ equipmentRunTimes.add(er);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ equipment.setEquipmentRunTimes(equipmentRunTimes);
|
|
|
+ }
|
|
|
+ equipmentList.add(equipment);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 工序作业相关数据初始化
|
|
|
+ productionProcessesInit(operationDo,produceOrder,optionalEquipments,processesList,operationProductionProcesses);
|
|
|
+ }
|
|
|
+ // 前后关联关系初始化
|
|
|
+ processesRelationInit(rootOperationDo,operationProductionProcesses,operationMaps,apsBlankOrderVo);
|
|
|
+
|
|
|
+ blankProcessIds.put(apsBlankOrderVo.getId(), processIdss);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 合并生产工序
|
|
|
+ productionScheduleVo.setProcesses(processesList);
|
|
|
+ productionScheduleVo.setEquipmentList(equipmentList);
|
|
|
+ productionScheduleVo.setBlankProcessIds(blankProcessIds);
|
|
|
+ return productionScheduleVo;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 前后道工序作业关联关系初始化
|
|
|
+ * @param rootOperationDo
|
|
|
+ * @param operationProductionProcesses
|
|
|
+ * @param operationMaps
|
|
|
+ * @param apsBlankOrderVo
|
|
|
+ */
|
|
|
+ private void processesRelationInit(ApsProcessOperationDo rootOperationDo,Map<String,List<ProductionProcesses>> operationProductionProcesses
|
|
|
+ ,Map<String,ApsProcessOperationDo> operationMaps,ApsBlankOrderVo apsBlankOrderVo){
|
|
|
+ String[] nextids = rootOperationDo.getNextprocessid().split(",");
|
|
|
+ // 前后道工序关联关系处理
|
|
|
+ if(rootOperationDo == null){
|
|
|
+ throw new CustomException("数据异常,ID为:"+apsBlankOrderVo.getId()+"的坯料计划没有根节点");
|
|
|
+ }else{
|
|
|
+ boolean isEnd = true;
|
|
|
+ // 当前作业计划加工卷数
|
|
|
+ Integer planPres = rootOperationDo.getPlanprocessrall();
|
|
|
+ // 下道工序按物料类型分组
|
|
|
+ Map<String, List<ProductionProcesses>> wlPros = new HashMap<>();
|
|
|
+ if(nextids != null && nextids.length>0){
|
|
|
+ for (String nextid : nextids) {
|
|
|
+ List<ProductionProcesses> productionProcesses = operationProductionProcesses.get(nextid);
|
|
|
+ if(productionProcesses != null && productionProcesses.size()>0 && operationMaps.get(nextid) != null){
|
|
|
+ if(wlPros.containsKey(operationMaps.get(operationMaps.get(nextid).getPlaninput()))){
|
|
|
+ wlPros.get(operationMaps.get(operationMaps.get(nextid).getPlaninput())).addAll(productionProcesses);
|
|
|
+ }else{
|
|
|
+ wlPros.put(operationMaps.get(nextid).getPlaninput(),productionProcesses);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 当前作业和下道工序建立关联关系
|
|
|
+ wlPros.forEach((k,v)->{
|
|
|
+ boolean isConnect = true;
|
|
|
+ int vi = 0;
|
|
|
+ List<ProductionProcesses> productionProcesses = operationProductionProcesses.get(rootOperationDo.getId());
|
|
|
+ while (vi<v.size()){
|
|
|
+ for(int i = 0;i <planPres;i++){
|
|
|
+ vi++;
|
|
|
+ if(vi>=v.size()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if(productionProcesses.get(i).getNextProcessesIds() == null){
|
|
|
+ List<String> ids = new ArrayList<>();
|
|
|
+ ids.add(v.get(i).getId());
|
|
|
+ productionProcesses.get(i).setNextProcessesIds(ids);
|
|
|
+ }else{
|
|
|
+ productionProcesses.get(i).getNextProcessesIds().add(v.get(i).getId());
|
|
|
+ }
|
|
|
+ if(v.get(vi).getPreviousProcessesIds() == null){
|
|
|
+ List<String> ids = new ArrayList<>();
|
|
|
+ ids.add(productionProcesses.get(i).getId());
|
|
|
+ v.get(vi).setPreviousProcessesIds(ids);
|
|
|
+ }else{
|
|
|
+ v.get(vi).getPreviousProcessesIds().add(productionProcesses.get(i).getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 递归处理下道工序数据
|
|
|
+ if(nextids != null && nextids.length>0){
|
|
|
+ for (String nextid : nextids) {
|
|
|
+ ApsProcessOperationDo apsProcessOperationDo = operationMaps.get(nextid);
|
|
|
+ processesRelationInit(apsProcessOperationDo,operationProductionProcesses,operationMaps,apsBlankOrderVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 工序作业模型初始化
|
|
|
+ * @param operationDo
|
|
|
+ * @param produceOrder
|
|
|
+ * @param optionalEquipments
|
|
|
+ * @param processesList
|
|
|
+ * @param operationProductionProcesses
|
|
|
+ */
|
|
|
+ private void productionProcessesInit(ApsProcessOperationDo operationDo,ProduceOrder produceOrder,List<String> optionalEquipments
|
|
|
+ ,List<ProductionProcesses> processesList,Map<String,List<ProductionProcesses>> operationProductionProcesses){
|
|
|
+ List<ProductionProcesses> operationProcess = new ArrayList<>();
|
|
|
+ if(operationDo != null && operationDo.getPlanprocessrall() != null && operationDo.getPlanprocessrall()>0){
|
|
|
+ for (Integer i = 0; i < operationDo.getPlanprocessrall(); i++) {
|
|
|
+ ProductionProcesses processes = new ProductionProcesses();
|
|
|
+ // 工序所属订单
|
|
|
+ processes.setProduceOrder(Arrays.asList(new ProduceOrder[]{produceOrder}));
|
|
|
+ // 模型ID
|
|
|
+ processes.setId(operationDo.getId());
|
|
|
+ // 业务表主键ID
|
|
|
+ List<String> bss = new ArrayList<>();
|
|
|
+ bss.add(operationDo.getId());
|
|
|
+ processes.setBsProcessesId(bss);
|
|
|
+ // 工序任务可选设备
|
|
|
+ processes.setOptionalEquipments(optionalEquipments);
|
|
|
+ // 批次
|
|
|
+ processes.setProducePcNum(operationDo.getPlanprocessrall());
|
|
|
+ processes.setProcessType(operationDo.getProcess());
|
|
|
+ // 单次加工时长
|
|
|
+ processes.setUnitProduceTime(operationDo.getOnceprocessmin().intValue());
|
|
|
+ processes.setProduceTime(operationDo.getOnceprocessmin().intValue());
|
|
|
+ if (operationDo.getMinflowwaitmin() != null) {
|
|
|
+ processes.setMinWaitTime(operationDo.getMinflowwaitmin().intValue());
|
|
|
+ }
|
|
|
+ if (operationDo.getMaxflowwaitmin() != null) {
|
|
|
+ processes.setMaxWaitTime(operationDo.getMaxflowwaitmin().intValue());
|
|
|
+ }
|
|
|
+ // 合金
|
|
|
+ processes.setVolumeMetal(operationDo.getMetal());
|
|
|
+ // 连续生产标识设置
|
|
|
+ // 合金+输入物料+宽度
|
|
|
+ processes.setSeriesProduceMark(operationDo.getMetal() + "^_^" + operationDo.getPlaninput() + "^_^" + operationDo.getProwidth());
|
|
|
+ processes.setPrepressworkmin(operationDo.getPrepressworkmin() == null ? null : operationDo.getPrepressworkmin().intValue());
|
|
|
+ processes.setCutfinishmin(operationDo.getCutfinishmin() == null ? null : operationDo.getCutfinishmin().intValue());
|
|
|
+ // 锁定的作业加上锁定标识
|
|
|
+ if (LOCKMARK_Y.equals(operationDo.getLockmark())) {
|
|
|
+ ApsProcessOperationProcessEquDo processEquServiceOne = processOperationProcessEquService.getOne(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId()));
|
|
|
+ if (processEquServiceOne != null) {
|
|
|
+ processes.setIfLock(true);
|
|
|
+ processes.setEquipmentId(processEquServiceOne.getProcessdeviceid());
|
|
|
+ List<String> opeqs = new ArrayList<>();
|
|
|
+ opeqs.add(processEquServiceOne.getProcessdeviceid());
|
|
|
+ processes.setOptionalEquipments(opeqs);
|
|
|
+ processes.setStartTime(processEquServiceOne.getPlanstartdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
+ processes.setEndTime(processEquServiceOne.getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ operationProcess.add(processes);
|
|
|
+ }
|
|
|
+ processesList.addAll(operationProcess);
|
|
|
+ operationProductionProcesses.put(operationDo.getId(),operationProcess);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|