|
@@ -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;
|
|
|
- }*/
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|