|
@@ -119,21 +119,24 @@ public class ApsServiceImpl implements ApsService {
|
|
|
if("cd".equals(apsType) && apsBlankOrders != null && apsBlankOrders.size()>0){
|
|
|
for (ApsBlankOrderVo apsBlankOrder : apsBlankOrders) {
|
|
|
apsBlankOrder.setCdbs(1);
|
|
|
+ apsBlankOrder.setIfcp("Y");
|
|
|
}
|
|
|
}else{
|
|
|
for (ApsBlankOrderVo apsBlankOrder : apsBlankOrders) {
|
|
|
apsBlankOrder.setCdbs(2);
|
|
|
+ apsBlankOrder.setIfcp("N");
|
|
|
}
|
|
|
}
|
|
|
List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getOrdersHasNotLockProcess(idStrs,tenantId);
|
|
|
if (fbNotLock != null && fbNotLock.size() > 0) {
|
|
|
for (ApsBlankOrderVo apsBlankOrderVo : fbNotLock) {
|
|
|
apsBlankOrderVo.setCdbs(2);
|
|
|
+ apsBlankOrderVo.setIfcp("Y");
|
|
|
}
|
|
|
apsBlankOrders.addAll(fbNotLock);
|
|
|
}
|
|
|
apsOrderScheduleNew(apsBlankOrders,currentUser);
|
|
|
-// apsOrderSchedule(apsBlankOrders);
|
|
|
+// apsOrderSchedule(apsBlankOrders,currentUser);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
logger.info("排程异常",e);
|
|
@@ -141,7 +144,7 @@ public class ApsServiceImpl implements ApsService {
|
|
|
if(e instanceof CustomException){
|
|
|
msg = e.getMessage();
|
|
|
}
|
|
|
- currentUser.setRoption(msg);
|
|
|
+ currentUser.setRoption(msg+" "+DateUtil.formatDateTime(new Date()));
|
|
|
redisService.redisCatchInit("apsUser-"+tenantId,currentUser,3600*24);
|
|
|
throw e;
|
|
|
} finally {
|
|
@@ -152,7 +155,7 @@ public class ApsServiceImpl implements ApsService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void apsOrderSchedule(List<ApsBlankOrderVo> apsBlankOrders){
|
|
|
+ private void apsOrderSchedule(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser){
|
|
|
// 坯料计划排序
|
|
|
Collections.sort(apsBlankOrders,(v1,v2)->{
|
|
|
// 合金
|
|
@@ -264,47 +267,60 @@ public class ApsServiceImpl implements ApsService {
|
|
|
List<ProductionScheduleVo> apsProductionSchedules = new ArrayList<>();
|
|
|
// 多卷先排
|
|
|
apsBlankOrders.forEach((bo)->{
|
|
|
- List<ApsBlankOrderVo> v = new ArrayList<>();
|
|
|
- v.add(bo);
|
|
|
- dataMapOrder.put(bo.getId(),bo);
|
|
|
+ try{
|
|
|
+ List<ApsBlankOrderVo> v = new ArrayList<>();
|
|
|
+ v.add(bo);
|
|
|
+ dataMapOrder.put(bo.getId(),bo);
|
|
|
|
|
|
- // 模型转换
|
|
|
- ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v);
|
|
|
- productionScheduleVos.add(productionScheduleVo);
|
|
|
- dataMap.put(productionScheduleVo.getProductionScheduleId(),v);
|
|
|
+ // 模型转换
|
|
|
+ ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v);
|
|
|
+ productionScheduleVos.add(productionScheduleVo);
|
|
|
+ dataMap.put(productionScheduleVo.getProductionScheduleId(),v);
|
|
|
// int mergeThNum = mergeThNum(bo, productionScheduleVo);
|
|
|
- // 排程计划设备集合
|
|
|
- List<Equipment> equipmentList1 = new ArrayList<>();
|
|
|
- List<ApsProcessOperationDo> operationDos1 = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
|
|
|
- .in(ApsProcessOperationDo::getBlankid, bo.getId()));
|
|
|
- List<String> blankids = new ArrayList<>();
|
|
|
- blankids.add(bo.getId());
|
|
|
- for (ApsProcessOperationDo operationDo : operationDos1) {
|
|
|
- List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList1,eqMaps,blankids,null,productionScheduleVo,apsConfigs.get(0));
|
|
|
- }
|
|
|
- productionScheduleVo.setEquipmentList(equipmentList1);
|
|
|
- apsProductionSchedules.add(productionScheduleVo);
|
|
|
+ // 排程计划设备集合
|
|
|
+ List<Equipment> equipmentList1 = new ArrayList<>();
|
|
|
+ List<ApsProcessOperationDo> operationDos1 = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
|
|
|
+ .in(ApsProcessOperationDo::getBlankid, bo.getId()));
|
|
|
+ List<String> blankids = new ArrayList<>();
|
|
|
+ blankids.add(bo.getId());
|
|
|
+ for (ApsProcessOperationDo operationDo : operationDos1) {
|
|
|
+ List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList1,eqMaps,blankids,null,productionScheduleVo,apsConfigs.get(0));
|
|
|
+ }
|
|
|
+ productionScheduleVo.setEquipmentList(equipmentList1);
|
|
|
+ apsProductionSchedules.add(productionScheduleVo);
|
|
|
|
|
|
- System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
|
|
|
- logger.info("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
|
|
|
- // APS平台排程接口调用
|
|
|
- ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
|
|
|
- if (!"200".equals(productionScheduleRetVo.getCode())) {
|
|
|
- logger.info("排程异常,坯料计划ID:" + bo.getId());
|
|
|
- // 排程异常后恢复历史排程结果为锁定状态
|
|
|
- processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark,"y")
|
|
|
- .eq(ApsProcessOperationProcessEquDo::getBlankid,bo.getId()));
|
|
|
- // 没有可排程工序的订单跳过
|
|
|
- if("没有可排程的工序".equals(productionScheduleRetVo.getMsg())){
|
|
|
- logger.info("排程异常:没有可排程的工序,坯料计划编号:" + bo.getBlanknumber());
|
|
|
+ System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
|
|
|
+ logger.info("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
|
|
|
+ // APS平台排程接口调用
|
|
|
+ ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
|
|
|
+ if (!"200".equals(productionScheduleRetVo.getCode())) {
|
|
|
+ logger.info("排程异常,坯料计划ID:" + bo.getId());
|
|
|
+ // 排程异常后恢复历史排程结果为锁定状态
|
|
|
+ processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark,"y")
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getBlankid,bo.getId()));
|
|
|
+ // 没有可排程工序的订单跳过
|
|
|
+ if("没有可排程的工序".equals(productionScheduleRetVo.getMsg())){
|
|
|
+ logger.info("排程异常:没有可排程的工序,坯料计划编号:" + bo.getBlanknumber());
|
|
|
+ }else{
|
|
|
+ throw new CustomException(productionScheduleRetVo.getMsg()+" "+DateUtil.formatDateTime(new Date()));
|
|
|
+ }
|
|
|
}else{
|
|
|
- throw new CustomException(productionScheduleRetVo.getMsg());
|
|
|
+ // 获取坯料计划
|
|
|
+ List<ApsBlankOrderVo> apsBlankOrderss = new ArrayList<>();
|
|
|
+ apsBlankOrderss.add(bo);
|
|
|
+ apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrderss);
|
|
|
}
|
|
|
- }else{
|
|
|
- // 获取坯料计划
|
|
|
- List<ApsBlankOrderVo> apsBlankOrderss = new ArrayList<>();
|
|
|
- apsBlankOrderss.add(bo);
|
|
|
- apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrderss);
|
|
|
+ }catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ logger.info("排程异常",e);
|
|
|
+ String blankNos = bo.getBlanknumber();
|
|
|
+ String msg = "排程服务异常(坯料计划号:"+blankNos+")"+DateUtil.formatDateTime(new Date());
|
|
|
+ if(e instanceof CustomException){
|
|
|
+ msg = e.getMessage();
|
|
|
+ }
|
|
|
+ currentUser.setRoption(msg+" "+DateUtil.formatDateTime(new Date()));
|
|
|
+ String tenantId = CXCommonUtils.getCurrentUserFactoryId(currentUser);
|
|
|
+ redisService.redisCatchInit("apsUser-"+tenantId,currentUser,3600*24);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -330,11 +346,11 @@ public class ApsServiceImpl implements ApsService {
|
|
|
blankNos = blankNos+";"+apsBlankOrderVo.getBlanknumber();
|
|
|
}
|
|
|
}
|
|
|
- String msg = "排程服务异常(坯料计划号:"+blankNos+")";
|
|
|
+ String msg = "排程服务异常(坯料计划号:"+blankNos+")"+DateUtil.formatDateTime(new Date());
|
|
|
if(e instanceof CustomException){
|
|
|
msg = e.getMessage();
|
|
|
}
|
|
|
- currentUser.setRoption(msg);
|
|
|
+ currentUser.setRoption(msg+" "+DateUtil.formatDateTime(new Date()));
|
|
|
String tenantId = CXCommonUtils.getCurrentUserFactoryId(currentUser);
|
|
|
redisService.redisCatchInit("apsUser-"+tenantId,currentUser,3600*24);
|
|
|
// throw e;
|
|
@@ -481,7 +497,7 @@ public class ApsServiceImpl implements ApsService {
|
|
|
}catch(Exception e){
|
|
|
logger.info("坯料计划:+bo.getBlanknumber() + ;排程数据初始化异常",e);
|
|
|
String msg = "坯料计划:"+bo.getBlanknumber() + ";排程数据初始化异常";
|
|
|
- throw new CustomException(msg);
|
|
|
+ throw new CustomException(msg+" "+DateUtil.formatDateTime(new Date()));
|
|
|
}
|
|
|
});
|
|
|
|
|
@@ -537,7 +553,7 @@ public class ApsServiceImpl implements ApsService {
|
|
|
if("没有可排程的工序".equals(productionScheduleRetVo.getMsg())){
|
|
|
logger.info("排程异常:没有可排程的工序,坯料计划编号:" + blankOrderIds);
|
|
|
}else{
|
|
|
- throw new CustomException(productionScheduleRetVo.getMsg());
|
|
|
+ throw new CustomException(productionScheduleRetVo.getMsg()+" "+DateUtil.formatDateTime(new Date()));
|
|
|
}
|
|
|
}else{
|
|
|
// 获取坯料计划
|
|
@@ -654,6 +670,13 @@ public class ApsServiceImpl implements ApsService {
|
|
|
public ProductionScheduleVo apsProductionScheduleInit(List<ApsBlankOrderVo> apsBlankOrders) {
|
|
|
// 待排程坯料计划ID集合
|
|
|
List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
|
|
|
+ // 查询当前坯料计划的历史排程明细
|
|
|
+ List<ApsProcessOperationProcessEquDo> apopes = processOperationProcessEquService.list(
|
|
|
+ new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
+ .in(ApsProcessOperationProcessEquDo::getBlankid,blankids)
|
|
|
+ .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate));
|
|
|
+ Map<String, List<ApsProcessOperationProcessEquDo>> proEqus = apopes.stream().collect(Collectors.groupingBy(ApsProcessOperationProcessEquDo::getProcessid));
|
|
|
+
|
|
|
ProductionScheduleVo productionScheduleVo = productionScheduleVoInit();
|
|
|
// 排程计划工序任务集合
|
|
|
List<ProductionProcesses> processesList = new ArrayList<>();
|
|
@@ -702,7 +725,7 @@ public class ApsServiceImpl implements ApsService {
|
|
|
// 设备列表初始化
|
|
|
// List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList,eqMaps,blankids,productionScheduleVo,apsScheduleConfig);
|
|
|
// 工序作业相关数据初始化
|
|
|
- productionProcessesInit(operationDo,produceOrder,processesList,operationProductionProcesses,apsBlankOrderVo,productionScheduleVo);
|
|
|
+ productionProcessesInit(operationDo,produceOrder,processesList,operationProductionProcesses,apsBlankOrderVo,productionScheduleVo,proEqus);
|
|
|
}
|
|
|
// 前后关联关系初始化
|
|
|
processesRelationInit(rootOperationDo,operationProductionProcesses,operationMaps,apsBlankOrderVo);
|
|
@@ -755,7 +778,7 @@ public class ApsServiceImpl implements ApsService {
|
|
|
}
|
|
|
String[] sbIds = canchoosedeviceid.split(",");
|
|
|
for (String equIds : sbIds) {
|
|
|
- if(equIds.equals("09be204864014e88ac19d5ac9950fa32")){
|
|
|
+ if(equIds.equals("0001be252874536843730b100051")){
|
|
|
System.out.println(equIds);
|
|
|
}
|
|
|
AspCheckItemsDo checkItemsD = eqMaps.get(equIds);
|
|
@@ -1055,7 +1078,8 @@ public class ApsServiceImpl implements ApsService {
|
|
|
* @param operationProductionProcesses
|
|
|
*/
|
|
|
private void productionProcessesInit(ApsProcessOperationDo operationDo,ProduceOrder produceOrder
|
|
|
- ,List<ProductionProcesses> processesList,Map<String,List<ProductionProcesses>> operationProductionProcesses,ApsBlankOrderVo apsBlankOrderVo,ProductionScheduleVo productionScheduleVo){
|
|
|
+ ,List<ProductionProcesses> processesList,Map<String,List<ProductionProcesses>> operationProductionProcesses
|
|
|
+ ,ApsBlankOrderVo apsBlankOrderVo,ProductionScheduleVo productionScheduleVo,Map<String, List<ApsProcessOperationProcessEquDo>> proEqus){
|
|
|
// 输出物料
|
|
|
List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
|
|
|
.eq(ApsProcessOperationOutMaterDo::getMainid, operationDo.getId()));
|
|
@@ -1072,6 +1096,8 @@ public class ApsServiceImpl implements ApsService {
|
|
|
.eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId()).orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate));
|
|
|
for (ApsProcessOperationProcessEquDo processDetail : processDetails) {
|
|
|
ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo);
|
|
|
+ // 锁定的作业保留作业ID
|
|
|
+ processes.setId(processDetail.getId());
|
|
|
processes.setIfLock(true);
|
|
|
processes.setEquipmentId(processDetail.getProcessdeviceid());
|
|
|
List<String> opeqs = new ArrayList<>();
|
|
@@ -1107,6 +1133,8 @@ public class ApsServiceImpl implements ApsService {
|
|
|
operationProcess.add(processes);
|
|
|
}
|
|
|
}else{
|
|
|
+ // 已排程的当前作业
|
|
|
+ List<ApsProcessOperationProcessEquDo> processEquDos = proEqus.get(operationDo.getId());
|
|
|
if("小卷成退".equals(operationDo.getProcess())){
|
|
|
String previousprocessid = operationDo.getPreviousprocessid();
|
|
|
ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
|
|
@@ -1118,6 +1146,10 @@ public class ApsServiceImpl implements ApsService {
|
|
|
Integer js = operationDo.getPlanprocessrall() / planprocessrall;
|
|
|
for (Integer i = 0; i < planprocessrall; i++) {
|
|
|
ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo);
|
|
|
+ // 已排程的作业明细数据保持ID不变
|
|
|
+ if(processEquDos != null && i<processEquDos.size()){
|
|
|
+ processes.setId(processEquDos.get(i).getId());
|
|
|
+ }
|
|
|
if(apsBlankOrderVo.getPlanhavematerialdate() != null){
|
|
|
// 全局配置
|
|
|
ApsOverallConfig apsOverallConfig = new ApsOverallConfig();
|
|
@@ -1161,6 +1193,10 @@ public class ApsServiceImpl implements ApsService {
|
|
|
Integer js = operationDo.getPlanprocessrall() / planprocessrall;
|
|
|
for (Integer i = 0; i < planprocessrall; i++) {
|
|
|
ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo);
|
|
|
+ // 已排程的作业明细数据保持ID不变
|
|
|
+ if(processEquDos != null && i<processEquDos.size()){
|
|
|
+ processes.setId(processEquDos.get(i).getId());
|
|
|
+ }
|
|
|
if(apsBlankOrderVo.getPlanhavematerialdate() != null){
|
|
|
// 全局配置
|
|
|
ApsOverallConfig apsOverallConfig = new ApsOverallConfig();
|
|
@@ -1192,6 +1228,10 @@ public class ApsServiceImpl implements ApsService {
|
|
|
}else{
|
|
|
for (Integer i = 0; i < operationDo.getPlanprocessrall(); i++) {
|
|
|
ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo);
|
|
|
+ // 已排程的作业明细数据保持ID不变
|
|
|
+ if(processEquDos != null && i<processEquDos.size()){
|
|
|
+ processes.setId(processEquDos.get(i).getId());
|
|
|
+ }
|
|
|
if(apsBlankOrderVo.getPlanhavematerialdate() != null){
|
|
|
// 全局配置
|
|
|
ApsOverallConfig apsOverallConfig = new ApsOverallConfig();
|