|
@@ -71,8 +71,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
@Autowired
|
|
|
private ApsBlankOrderDao apsBlankOrderDao;
|
|
|
@Autowired
|
|
|
- private RwApsServer rwApsServer;
|
|
|
- @Autowired
|
|
|
private ApsProcessOperationProcessEquServiceImpl processOperationProcessEquService;
|
|
|
@Autowired
|
|
|
private ApsScheduleConfigService apsScheduleConfigService;
|
|
@@ -99,9 +97,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
@Autowired
|
|
|
private ApsProcessOperationProcessEquService apsProcessOperationProcessEquService;
|
|
|
@Autowired
|
|
|
- private RedissonClient redissonClient;
|
|
|
- @Autowired
|
|
|
private ApsEquipmentCalendarService apsEquipmentCalendarService;
|
|
|
+ @Autowired
|
|
|
+ private ApsService apsService;
|
|
|
|
|
|
|
|
|
@Override
|
|
@@ -481,159 +479,129 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
* @param apsBlankOrders
|
|
|
*/
|
|
|
@Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
public void blankOrderAps(List<ApsBlankOrderVo> apsBlankOrders) {
|
|
|
- // 当前等路人所属工厂
|
|
|
- SysUserVo currentUser = CXCommonUtils.getCurrentUser();
|
|
|
- String tenantId = currentUser.getOrganizationDoList().get(0).getFullpid().split(",")[1];
|
|
|
- if (StringUtils.isBlank(tenantId)) {
|
|
|
- throw new CustomException("所属工厂不能为空");
|
|
|
- }
|
|
|
- assert apsBlankOrders != null : "排程订单不能为空";
|
|
|
- // 按照所属工厂加锁
|
|
|
- RLock rLock = redissonClient.getLock(tenantId);
|
|
|
- try {
|
|
|
- // 加锁最大1小时
|
|
|
- rLock.lock(1, TimeUnit.HOURS);
|
|
|
- // 合并待发布未锁定的订单一起排程
|
|
|
- List<String> hasIds = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
|
|
|
- String idStrs = CollUtil.join(hasIds, "','");
|
|
|
- idStrs = "'" + idStrs + "'";
|
|
|
- // 查询存在未锁定的作业坯料计划
|
|
|
-// List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getFbNotLock(idStrs,tenantId);
|
|
|
- List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getOrdersHasNotLockProcess(idStrs,tenantId);
|
|
|
- if (fbNotLock != null && fbNotLock.size() > 0) {
|
|
|
- apsBlankOrders.addAll(fbNotLock);
|
|
|
- }
|
|
|
+ apsService.apsSchedule(apsBlankOrders);
|
|
|
+ }
|
|
|
|
|
|
- // 先删除所有作业的明细
|
|
|
- List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
|
|
|
- processOperationProcessEquService.remove(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
|
|
|
- // 模型转换
|
|
|
- ProductionScheduleVo productionScheduleVo = apsPlanModelSet(apsBlankOrders);
|
|
|
- JSONConfig jsonConfig = JSONConfig.create();
|
|
|
- jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
- System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
|
|
|
- logger.info("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
|
|
|
- // APS平台排程接口调用
|
|
|
- ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
|
|
|
- if (!"200".equals(productionScheduleRetVo.getCode())) {
|
|
|
- throw new CustomException(productionScheduleRetVo.getMsg());
|
|
|
- }
|
|
|
- // 排程结果保存
|
|
|
- List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = new ArrayList<>();
|
|
|
- // 最后节点集合
|
|
|
- List<ProductionProcesses> lastProcess = new ArrayList<>();
|
|
|
- if (productionScheduleRetVo.getProcesses() != null && productionScheduleRetVo.getProcesses().size() > 0) {
|
|
|
- for (ProductionProcesses process : productionScheduleRetVo.getProcesses()) {
|
|
|
- // 非合并生产工序
|
|
|
- if (process.getAluminumCoils() == null) {
|
|
|
+ /**
|
|
|
+ * 排程结果操作
|
|
|
+ * @param productionScheduleRetVo
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void apsAfter(ProductionScheduleRetVo productionScheduleRetVo,List<ApsBlankOrderVo> apsBlankOrders){
|
|
|
+ // 先删除所有作业的明细
|
|
|
+ List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
|
|
|
+ processOperationProcessEquService.remove(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
|
|
|
+ // 排程结果保存
|
|
|
+ List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = new ArrayList<>();
|
|
|
+ // 最后节点集合
|
|
|
+ List<ProductionProcesses> lastProcess = new ArrayList<>();
|
|
|
+ if (productionScheduleRetVo.getProcesses() != null && productionScheduleRetVo.getProcesses().size() > 0) {
|
|
|
+ for (ProductionProcesses process : productionScheduleRetVo.getProcesses()) {
|
|
|
+ // 非合并生产工序
|
|
|
+ if (process.getAluminumCoils() == null) {
|
|
|
+ ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
|
|
|
+ apsProcessOperationProcessEqu.setId(SecurityUtil.getUUID());
|
|
|
+ apsProcessOperationProcessEqu.setProcessid(process.getId());
|
|
|
+ apsProcessOperationProcessEqu.setBlankid(process.getProduceOrder().get(0).getId());
|
|
|
+ apsProcessOperationProcessEqu.setProcessdeviceid(process.getEquipment().getId());
|
|
|
+ apsProcessOperationProcessEqu.setProcessdevice(process.getEquipment().getEquipmentName());
|
|
|
+ apsProcessOperationProcessEqu.setProcessworkshopid(process.getEquipment().getWorkshopid());
|
|
|
+ apsProcessOperationProcessEqu.setProcessworkshop(process.getEquipment().getWorkshopname());
|
|
|
+ apsProcessOperationProcessEqu.setTenantid(process.getEquipment().getFactoryid());
|
|
|
+ apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
|
|
|
+ apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
|
|
|
+ apsProcessOperationProcessEqu.setPlanprocessrall(process.getProducePcNum());
|
|
|
+ apsProcessOperationProcessEqu.setHasconflict(process.getHasConflict());
|
|
|
+ apsProcessOperationProcessEqu.setConflictdes(process.getConflictDes());
|
|
|
+ apsProcessOperationProcessEqu.setSoftconflictdes(process.getSoftconflictdes());
|
|
|
+ apsProcessOperationProcessEqu.setDeleted("0");
|
|
|
+ apsProcessOperationProcessEqu.setUnfinishroll(process.getProducePcNum());
|
|
|
+ apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
|
|
|
+ }
|
|
|
+ // 合并生产工序
|
|
|
+ else {
|
|
|
+ // 保存到明细表
|
|
|
+ Map<String, List<AluminumCoil>> bsAl = new HashMap<>();
|
|
|
+ for (AluminumCoil aluminumCoil : process.getAluminumCoils()) {
|
|
|
+ if (bsAl.containsKey(aluminumCoil.getBsId())) {
|
|
|
+ bsAl.get(aluminumCoil.getBsId()).add(aluminumCoil);
|
|
|
+ } else {
|
|
|
+ List<AluminumCoil> coils = new ArrayList<>();
|
|
|
+ coils.add(aluminumCoil);
|
|
|
+ bsAl.put(aluminumCoil.getBsId(), coils);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ bsAl.forEach((k, v) -> {
|
|
|
ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
|
|
|
apsProcessOperationProcessEqu.setId(SecurityUtil.getUUID());
|
|
|
- apsProcessOperationProcessEqu.setProcessid(process.getId());
|
|
|
- apsProcessOperationProcessEqu.setBlankid(process.getProduceOrder().get(0).getId());
|
|
|
+ apsProcessOperationProcessEqu.setProcessid(k);
|
|
|
+ apsProcessOperationProcessEqu.setBlankid(v.get(0).getBlankid());
|
|
|
apsProcessOperationProcessEqu.setProcessdeviceid(process.getEquipment().getId());
|
|
|
apsProcessOperationProcessEqu.setProcessdevice(process.getEquipment().getEquipmentName());
|
|
|
+ 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());
|
|
|
- apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
|
|
|
- apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
|
|
|
- apsProcessOperationProcessEqu.setPlanprocessrall(process.getProducePcNum());
|
|
|
apsProcessOperationProcessEqu.setHasconflict(process.getHasConflict());
|
|
|
apsProcessOperationProcessEqu.setConflictdes(process.getConflictDes());
|
|
|
apsProcessOperationProcessEqu.setSoftconflictdes(process.getSoftconflictdes());
|
|
|
apsProcessOperationProcessEqu.setDeleted("0");
|
|
|
- apsProcessOperationProcessEqu.setUnfinishroll(process.getProducePcNum());
|
|
|
+ apsProcessOperationProcessEqu.setUnfinishroll(v.size());
|
|
|
apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
|
|
|
- }
|
|
|
- // 合并生产工序
|
|
|
- else {
|
|
|
- // 保存到明细表
|
|
|
- Map<String, List<AluminumCoil>> bsAl = new HashMap<>();
|
|
|
- for (AluminumCoil aluminumCoil : process.getAluminumCoils()) {
|
|
|
- if (bsAl.containsKey(aluminumCoil.getBsId())) {
|
|
|
- bsAl.get(aluminumCoil.getBsId()).add(aluminumCoil);
|
|
|
- } else {
|
|
|
- List<AluminumCoil> coils = new ArrayList<>();
|
|
|
- coils.add(aluminumCoil);
|
|
|
- bsAl.put(aluminumCoil.getBsId(), coils);
|
|
|
- }
|
|
|
- }
|
|
|
- bsAl.forEach((k, v) -> {
|
|
|
- ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
|
|
|
- apsProcessOperationProcessEqu.setId(SecurityUtil.getUUID());
|
|
|
- apsProcessOperationProcessEqu.setProcessid(k);
|
|
|
- apsProcessOperationProcessEqu.setBlankid(v.get(0).getBlankid());
|
|
|
- apsProcessOperationProcessEqu.setProcessdeviceid(process.getEquipment().getId());
|
|
|
- apsProcessOperationProcessEqu.setProcessdevice(process.getEquipment().getEquipmentName());
|
|
|
- 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());
|
|
|
- apsProcessOperationProcessEqu.setHasconflict(process.getHasConflict());
|
|
|
- apsProcessOperationProcessEqu.setConflictdes(process.getConflictDes());
|
|
|
- apsProcessOperationProcessEqu.setSoftconflictdes(process.getSoftconflictdes());
|
|
|
- apsProcessOperationProcessEqu.setDeleted("0");
|
|
|
- apsProcessOperationProcessEqu.setUnfinishroll(v.size());
|
|
|
- apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
|
|
|
- });
|
|
|
- }
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- // 是否为最后一个节点
|
|
|
- if (process.getNextProcessesIds() == null || process.getNextProcessesIds().size() == 0) {
|
|
|
- lastProcess.add(process);
|
|
|
- }
|
|
|
+ // 是否为最后一个节点
|
|
|
+ if (process.getNextProcessesIds() == null || process.getNextProcessesIds().size() == 0) {
|
|
|
+ lastProcess.add(process);
|
|
|
}
|
|
|
}
|
|
|
- if (apsProcessOperationProcessEquDos != null && apsProcessOperationProcessEquDos.size() > 0) {
|
|
|
- // 再保存新数据
|
|
|
- processOperationProcessEquService.saveBatch(apsProcessOperationProcessEquDos);
|
|
|
- // 回写订单排程交货期
|
|
|
- Map<String, Date> orderDeliveryTime = new HashMap<>();
|
|
|
- for (ProductionProcesses process : lastProcess) {
|
|
|
- List<ProduceOrder> produceOrder = process.getProduceOrder();
|
|
|
- if (produceOrder != null && produceOrder.size() > 0) {
|
|
|
- for (ProduceOrder order : produceOrder) {
|
|
|
- Date endDate = Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant());
|
|
|
- ApsBlankOrderDo blankOrder = this.getById(order.getId());
|
|
|
- if (orderDeliveryTime.containsKey(blankOrder.getProductionorderid())) {
|
|
|
- // 对比取最大值
|
|
|
- if (endDate.compareTo(orderDeliveryTime.get(blankOrder.getProductionorderid())) > 0) {
|
|
|
- orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
|
|
|
- }
|
|
|
- } else {
|
|
|
+ }
|
|
|
+ if (apsProcessOperationProcessEquDos != null && apsProcessOperationProcessEquDos.size() > 0) {
|
|
|
+ // 再保存新数据
|
|
|
+ processOperationProcessEquService.saveBatch(apsProcessOperationProcessEquDos);
|
|
|
+ // 回写订单排程交货期
|
|
|
+ Map<String, Date> orderDeliveryTime = new HashMap<>();
|
|
|
+ for (ProductionProcesses process : lastProcess) {
|
|
|
+ List<ProduceOrder> produceOrder = process.getProduceOrder();
|
|
|
+ if (produceOrder != null && produceOrder.size() > 0) {
|
|
|
+ for (ProduceOrder order : produceOrder) {
|
|
|
+ Date endDate = Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+ ApsBlankOrderDo blankOrder = this.getById(order.getId());
|
|
|
+ if (orderDeliveryTime.containsKey(blankOrder.getProductionorderid())) {
|
|
|
+ // 对比取最大值
|
|
|
+ if (endDate.compareTo(orderDeliveryTime.get(blankOrder.getProductionorderid())) > 0) {
|
|
|
orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
|
|
|
}
|
|
|
+ } else {
|
|
|
+ orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- // 更新订单的排程交货期、排程状态
|
|
|
- if (orderDeliveryTime.size() > 0) {
|
|
|
- orderDeliveryTime.forEach((k, v) -> {
|
|
|
- ApsProductionOrderDo productionOrderDo = apsProductionOrderService.getById(k);
|
|
|
- ApsProductionOrderDo apsProductionOrderDo = new ApsProductionOrderDo();
|
|
|
- apsProductionOrderDo.setId(k);
|
|
|
- apsProductionOrderDo.setScheduledeliverydate(v);
|
|
|
- if (productionOrderDo.getDeliverytime() != null && productionOrderDo.getDeliverytime() > 0 && v != null) {
|
|
|
- apsProductionOrderDo.setScheduledeliverydate(DateUtil.offsetHour(v, productionOrderDo.getDeliverytime()));
|
|
|
- }
|
|
|
- // 排程状态更新为待发布
|
|
|
+ }
|
|
|
+ // 更新订单的排程交货期、排程状态
|
|
|
+ if (orderDeliveryTime.size() > 0) {
|
|
|
+ orderDeliveryTime.forEach((k, v) -> {
|
|
|
+ ApsProductionOrderDo productionOrderDo = apsProductionOrderService.getById(k);
|
|
|
+ ApsProductionOrderDo apsProductionOrderDo = new ApsProductionOrderDo();
|
|
|
+ apsProductionOrderDo.setId(k);
|
|
|
+ apsProductionOrderDo.setScheduledeliverydate(v);
|
|
|
+ if (productionOrderDo.getDeliverytime() != null && productionOrderDo.getDeliverytime() > 0 && v != null) {
|
|
|
+ apsProductionOrderDo.setScheduledeliverydate(DateUtil.offsetHour(v, productionOrderDo.getDeliverytime()));
|
|
|
+ }
|
|
|
+ // 排程状态更新为待发布
|
|
|
// apsProductionOrderDo.setSchedulstatus(SCHEDULSTATUS_TORELEASE);
|
|
|
- apsProductionOrderService.updateById(apsProductionOrderDo);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
+ apsProductionOrderService.updateById(apsProductionOrderDo);
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
- backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses());
|
|
|
- } catch (Exception e) {
|
|
|
- throw e;
|
|
|
- } finally {
|
|
|
- rLock.unlock();
|
|
|
}
|
|
|
+
|
|
|
+ backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -673,6 +641,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
*/
|
|
|
@Override
|
|
|
public ProductionScheduleVo apsPlanModelSet(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();
|
|
@@ -701,6 +671,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
} else {
|
|
|
productionScheduleVo.setApsPlanStartDate(DateUtil.date().offset(DateField.HOUR, a));
|
|
|
}
|
|
|
+ productionScheduleVo.setWashingtime(apsScheduleConfig.getWashingtime());
|
|
|
+ productionScheduleVo.setStandingtime(apsScheduleConfig.getStandingtime());
|
|
|
} else {
|
|
|
throw new CustomException("排程参数缺失");
|
|
|
}
|
|
@@ -716,7 +688,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
// 排程计划工序任务集合
|
|
|
List<ProductionProcesses> processesList = new ArrayList<>();
|
|
|
// 坯料计划ID和所属工序作业ID对应关系
|
|
|
- Map<String,List<String>> blankProcessIds = new HashMap<>();
|
|
|
+ Map<String, List<String>> blankProcessIds = new HashMap<>();
|
|
|
// 待合并生产的订单工序
|
|
|
List<ApsProcessOperationVo> processOperationMs = new ArrayList<>();
|
|
|
if (apsBlankOrders != null && apsBlankOrders.size() > 0) {
|
|
@@ -729,7 +701,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
List<ApsProcessOperationDo> operationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
|
|
|
.eq(ApsProcessOperationDo::getBlankid, apsBlankOrderVo.getId()));
|
|
|
// 锁定的合并工序缓存
|
|
|
- Map<String,ProductionProcesses> lockHbPp = new HashMap<>();
|
|
|
+ Map<String, ProductionProcesses> lockHbPp = new HashMap<>();
|
|
|
// 转换工序模型数据
|
|
|
for (ApsProcessOperationDo operationDo : operationDos) {
|
|
|
processIdss.add(operationDo.getId());
|
|
@@ -757,15 +729,18 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
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)
|
|
|
);
|
|
@@ -829,8 +804,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
// 设备日历不可用时间段
|
|
|
List<ApsEquipmentCalendarDo> equipmentCalendarDos = apsEquipmentCalendarService.list(
|
|
|
new LambdaQueryWrapper<ApsEquipmentCalendarDo>().ge(ApsEquipmentCalendarDo::getSdstarttime, productionScheduleVo.getApsPlanStartDate())
|
|
|
- .eq(ApsEquipmentCalendarDo::getProcessdeviceid,equipment.getBsEquipmentId()));
|
|
|
- if(equipmentCalendarDos != null && equipmentCalendarDos.size()>0){
|
|
|
+ .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());
|
|
@@ -849,14 +824,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
|
|
|
if (SaveConstans.ProcessWay.PROCESS_WAY_MERGE.equals(productprocess)) {
|
|
|
// 锁定的作业
|
|
|
- if(LOCKMARK_Y.equals(operationDo.getLockmark())){
|
|
|
+ if (LOCKMARK_Y.equals(operationDo.getLockmark())) {
|
|
|
// List<ApsProcessOperationProcessEquDo> popes = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
// .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId()));
|
|
|
List<ApsProcessOperationProcessEquDo> popes = apsBlankOrderDao.getGroupProcessOperationProcessEqus(operationDo.getId());
|
|
|
- if(popes != null && popes.size()>0){
|
|
|
+ if (popes != null && popes.size() > 0) {
|
|
|
for (ApsProcessOperationProcessEquDo pope : popes) {
|
|
|
// 已存在的合并工序则添加上下道工序
|
|
|
- if(lockHbPp.containsKey(pope.getProcessdeviceid())){
|
|
|
+ if (lockHbPp.containsKey(pope.getProcessdeviceid())) {
|
|
|
ProductionProcesses processes1 = lockHbPp.get(pope.getProcessdeviceid());
|
|
|
// 上道工序
|
|
|
if (StringUtils.isNotBlank(operationDo.getPreviousprocessid())) {
|
|
@@ -874,7 +849,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
}
|
|
|
}
|
|
|
// 不存在此合并工序则新增一个合并作业
|
|
|
- else{
|
|
|
+ else {
|
|
|
ProductionProcesses processeshb = new ProductionProcesses();
|
|
|
// 模型ID
|
|
|
processeshb.setId(SecurityUtil.getUUID());
|
|
@@ -914,12 +889,12 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
processes.setNextProcessesIds(nexts);
|
|
|
}
|
|
|
|
|
|
- lockHbPp.put(pope.getProcessdeviceid(),processes);
|
|
|
+ lockHbPp.put(pope.getProcessdeviceid(), processes);
|
|
|
processesList.add(processes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
// 合并生产工序
|
|
|
ApsProcessOperationVo processOperationVo = new ApsProcessOperationVo();
|
|
|
BeanUtil.copyProperties(operationDo, processOperationVo);
|
|
@@ -952,6 +927,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
if (operationDo.getMaxflowwaitmin() != null) {
|
|
|
processes.setMaxWaitTime(operationDo.getMaxflowwaitmin().intValue());
|
|
|
}
|
|
|
+ // 合金
|
|
|
+ processes.setVolumeMetal(operationDo.getMetal());
|
|
|
// 上道工序
|
|
|
if (StringUtils.isNotBlank(operationDo.getPreviousprocessid())) {
|
|
|
processes.setPreviousProcessesIds(Arrays.asList(operationDo.getPreviousprocessid().split(",")));
|
|
@@ -974,22 +951,24 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
processes.setPrepressworkmin(operationDo.getPrepressworkmin() == null ? null : operationDo.getPrepressworkmin().intValue());
|
|
|
processes.setCutfinishmin(operationDo.getCutfinishmin() == null ? null : operationDo.getCutfinishmin().intValue());
|
|
|
// 锁定的作业加上锁定标识
|
|
|
- if(LOCKMARK_Y.equals(operationDo.getLockmark())){
|
|
|
+ if (LOCKMARK_Y.equals(operationDo.getLockmark())) {
|
|
|
ApsProcessOperationProcessEquDo processEquServiceOne = processOperationProcessEquService.getOne(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
.eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId()));
|
|
|
- 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());
|
|
|
+ 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());
|
|
|
+ }
|
|
|
}
|
|
|
processesList.add(processes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- blankProcessIds.put(apsBlankOrderVo.getId(),processIdss);
|
|
|
+ blankProcessIds.put(apsBlankOrderVo.getId(), processIdss);
|
|
|
}
|
|
|
}
|
|
|
// 合并生产工序
|
|
@@ -1046,6 +1025,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
aspCheckItemUse.put(aspCheckItemsDo.getId(), 0);
|
|
|
// 退火炉套筒间隙扣除
|
|
|
if (apsScheduleConfig != null) {
|
|
|
+ if(aspCheckItemsDo.getEquipmentwidth() == null){
|
|
|
+ throw new CustomException("退火炉的宽度没有维护");
|
|
|
+ }
|
|
|
aspCheckItemsDo.setEquipmentwidth(aspCheckItemsDo.getEquipmentwidth().subtract(apsScheduleConfig.getLooseness()));
|
|
|
}
|
|
|
}
|
|
@@ -1454,11 +1436,11 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
haveProductDetail = true;
|
|
|
|
|
|
if (apsProductDetailDo.getInputmaterialdescription().equals(apsProcessOutputProductDo.getProductname())) {
|
|
|
- //如果输出单卷重<单卷重(起)或 输出单卷重>单卷重(止),错误提示:输出成品:{订单产品} 输出单卷重不符合订单要求
|
|
|
- if (apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProductDetailDo.getSinglerollweightstart()) < 0
|
|
|
- || apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProductDetailDo.getSinglerollweightend()) > 0) {
|
|
|
- return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 输出单卷重不符合订单要求");
|
|
|
- }
|
|
|
+// //如果输出单卷重<单卷重(起)或 输出单卷重>单卷重(止),错误提示:输出成品:{订单产品} 输出单卷重不符合订单要求
|
|
|
+//// if (apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProductDetailDo.getSinglerollweightstart()) < 0
|
|
|
+//// || apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProductDetailDo.getSinglerollweightend()) > 0) {
|
|
|
+//// return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 输出单卷重不符合订单要求");
|
|
|
+//// }
|
|
|
} else {//如果对应订单产品明细的订单产品字段值不等于输出成品的订单产品字段值,错误提示:输出成品:{订单产品} 对应订单产品已修改或已删除,请重新选择订单产品
|
|
|
return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 对应订单产品已修改或已删除,请重新选择订单产品");
|
|
|
}
|
|
@@ -1492,10 +1474,19 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
if (apsBlankOrderDo.getNumberunit().equals(SaveConstans.CountUnit.TON)) {
|
|
|
blankWeight = apsBlankOrderDo.getSinglerollweight().multiply(new BigDecimal(1000));
|
|
|
}
|
|
|
+ //校验 输出单卷重 必须小于等于坯料单卷重,必须大于等于单卷重(起),必须小于等于单卷重(止)
|
|
|
//输出单卷重>坯料单卷重
|
|
|
if (outputWeight.compareTo(blankWeight) > 0) {
|
|
|
return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 输出单卷重不能超过坯料单卷重");
|
|
|
}
|
|
|
+ //输出单卷重<单卷重(起)
|
|
|
+ if (apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProcessOutputProductDo.getOnerollweigthstart()) < 0) {
|
|
|
+ return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 输出单卷重必须大于等于单卷重(起)");
|
|
|
+ }
|
|
|
+ //输出单卷重>单卷重(止)
|
|
|
+ if (apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProcessOutputProductDo.getOnerollweigthend()) > 0) {
|
|
|
+ return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 输出单卷重必须小于等于单卷重(止)");
|
|
|
+ }
|
|
|
} else {//不存在对应的产品明细
|
|
|
return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 对应订单产品已修改或已删除,请重新选择订单产品");
|
|
|
}
|
|
@@ -1661,11 +1652,11 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
haveProductDetail = true;
|
|
|
|
|
|
if (apsProductDetailDo.getInputmaterialdescription().equals(apsProcessOutputProductDo.getProductname())) {
|
|
|
- //如果输出单卷重<单卷重(起)或 输出单卷重>单卷重(止),错误提示:输出成品:{订单产品} 输出单卷重不符合订单要求
|
|
|
- if (apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProductDetailDo.getSinglerollweightstart()) < 0
|
|
|
- || apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProductDetailDo.getSinglerollweightend()) > 0) {
|
|
|
- return R.error("第" + j + "个坯料计划 输出成品:" + apsProcessOutputProductDo.getProductname() + " 输出单卷重不符合订单要求");
|
|
|
- }
|
|
|
+// //如果输出单卷重<单卷重(起)或 输出单卷重>单卷重(止),错误提示:输出成品:{订单产品} 输出单卷重不符合订单要求
|
|
|
+// if (apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProductDetailDo.getSinglerollweightstart()) < 0
|
|
|
+// || apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProductDetailDo.getSinglerollweightend()) > 0) {
|
|
|
+// return R.error("第" + j + "个坯料计划 输出成品:" + apsProcessOutputProductDo.getProductname() + " 输出单卷重不符合订单要求");
|
|
|
+// }
|
|
|
} else {//如果对应订单产品明细的订单产品字段值不等于输出成品的订单产品字段值,错误提示:输出成品:{订单产品} 对应订单产品已修改或已删除,请重新选择订单产品
|
|
|
return R.error("第" + j + "个坯料计划 输出成品:" + apsProcessOutputProductDo.getProductname() + " 对应订单产品已修改或已删除,请重新选择订单产品");
|
|
|
}
|