|
@@ -745,7 +745,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public void apsAfter(ProductionScheduleRetVo productionScheduleRetVo, List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser) {
|
|
|
+ public void apsAfter(ProductionScheduleRetVo productionScheduleRetVo, List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser,ApsTypeVo apsType) {
|
|
|
// 先删除所有作业的明细
|
|
|
List<String> blankids = CollUtil.distinct(productionScheduleRetVo.getProcesses().stream().map(v -> v.getProduceOrder().get(0).getId()).collect(Collectors.toList()));
|
|
|
// List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
|
|
@@ -975,6 +975,164 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses(), currentUser);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 排程结果操作
|
|
|
+ *
|
|
|
+ * @param productionScheduleRetVo
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void ddApsAfter(ProductionScheduleRetVo productionScheduleRetVo, List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser,ApsTypeVo apsType) {
|
|
|
+ // 先删除所有作业的明细
|
|
|
+ List<String> blankids = CollUtil.distinct(productionScheduleRetVo.getProcesses().stream().map(v -> v.getProduceOrder().get(0).getId()).collect(Collectors.toList()));
|
|
|
+ // 查询坯料计划所有已存在的作业明细
|
|
|
+ List<ApsProcessOperationProcessEquDo> equDos = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
+ .in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
|
|
|
+ // 物理删除作业明细
|
|
|
+ String idStrs = CollUtil.join(blankids, "','");
|
|
|
+ idStrs = "'" + idStrs + "'";
|
|
|
+// apsBlankOrderDao.deleteBlankDetail(idStrs);
|
|
|
+// logger.info("作业明细删除结束..: " + blankids);
|
|
|
+ // 排程结果保存
|
|
|
+ List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = new ArrayList<>();
|
|
|
+ // 最后节点集合
|
|
|
+ List<ProductionProcesses> lastProcess = new ArrayList<>();
|
|
|
+ if (productionScheduleRetVo.getProcesses() != null && productionScheduleRetVo.getProcesses().size() > 0) {
|
|
|
+ for (ProductionProcesses process : productionScheduleRetVo.getProcesses()) {
|
|
|
+ ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
|
|
|
+ apsProcessOperationProcessEqu.setId(process.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()));
|
|
|
+ if ("小卷成退".equals(process.getProcessType()) || "小卷包装".equals(process.getProcessType())) {
|
|
|
+ apsProcessOperationProcessEqu.setPlanprocessrall(process.getMinThPcNum());
|
|
|
+ } else {
|
|
|
+ apsProcessOperationProcessEqu.setPlanprocessrall(process.getOpeProducePcNum());
|
|
|
+ }
|
|
|
+ apsProcessOperationProcessEqu.setHasconflict(process.getHasConflict());
|
|
|
+ apsProcessOperationProcessEqu.setConflictdes(process.getConflictDes());
|
|
|
+ apsProcessOperationProcessEqu.setSoftconflictdes(process.getSoftconflictdes());
|
|
|
+ apsProcessOperationProcessEqu.setLockmark("y");
|
|
|
+ apsProcessOperationProcessEqu.setLockmarkdetail("y");
|
|
|
+ if (process.getOptionalEquipmentZg() != null && process.getOptionalEquipmentZg().size() > 0) {
|
|
|
+ apsProcessOperationProcessEqu.setRollerid(process.getOptionalEquipmentZg().get(process.getEquipment().getId()));
|
|
|
+ }
|
|
|
+ apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
|
|
|
+
|
|
|
+ // 是否为最后一个节点
|
|
|
+ if (process.getNextProcessesIds() == null || process.getNextProcessesIds().size() == 0) {
|
|
|
+ lastProcess.add(process);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (apsProcessOperationProcessEquDos != null && apsProcessOperationProcessEquDos.size() > 0) {
|
|
|
+ // 再保存新数据
|
|
|
+ processOperationProcessEquService.updateBatchById(apsProcessOperationProcessEquDos);
|
|
|
+ logger.info("作业明细保存结束..: " + blankids);
|
|
|
+ // 回写订单排程交货期
|
|
|
+ Map<String, Date> orderDeliveryTime = new HashMap<>();
|
|
|
+ // 查询所有坯料计划信息
|
|
|
+ List<ApsBlankOrderDo> apsBlankOrderDos = (List<ApsBlankOrderDo>) apsBlankOrderService.listByIds(blankids);
|
|
|
+ // 坯料计划ID集合
|
|
|
+ List<String> blankKeys = new ArrayList<>();
|
|
|
+ List<ApsBlankOrderDo> blankIds = new ArrayList<>();
|
|
|
+ for (ProductionProcesses process : lastProcess) {
|
|
|
+ List<ProduceOrder> produceOrder = process.getProduceOrder();
|
|
|
+ if (produceOrder != null && produceOrder.size() > 0) {
|
|
|
+ for (ProduceOrder order : produceOrder) {
|
|
|
+ // 坯料计划信息
|
|
|
+ List<ApsBlankOrderDo> orders = apsBlankOrderDos.stream().filter(v -> v.getId().equals(order.getId())).collect(Collectors.toList());
|
|
|
+ ApsBlankOrderDo nowOrder = null;
|
|
|
+ if (orders != null && orders.size() > 0) {
|
|
|
+ nowOrder = orders.get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ Date endDate = Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+ List<ApsBlankOrderDo> hasblanks = blankIds.stream().filter(v -> v.getId().equals(order.getId())).collect(Collectors.toList());
|
|
|
+ if (hasblanks != null && hasblanks.size() > 0) {
|
|
|
+ ApsBlankOrderDo blankOrderDo = hasblanks.get(0);
|
|
|
+ if (blankOrderDo.getScheduledatestart().compareTo(endDate) > 0) {
|
|
|
+ blankOrderDo.setScheduledatestart(endDate);
|
|
|
+ if (nowOrder != null && nowOrder.getPromisedatestart() == null) {
|
|
|
+ blankOrderDo.setPromisedatestart(DateUtil.offsetDay(endDate, 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (blankOrderDo.getScheduledateend().compareTo(endDate) < 0) {
|
|
|
+ blankOrderDo.setScheduledateend(endDate);
|
|
|
+ if (nowOrder != null && nowOrder.getPromisedateend() == null) {
|
|
|
+ blankOrderDo.setPromisedateend(DateUtil.offsetDay(endDate, 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ ApsBlankOrderDo blankOrder = this.getById(order.getId());
|
|
|
+ ApsBlankOrderDo updateBlank = new ApsBlankOrderDo();
|
|
|
+ updateBlank.setId(order.getId());
|
|
|
+ if (StringUtils.isBlank(nowOrder.getSchedulingstatus()) || nowOrder.getSchedulingstatus().equals(TO_BE_SCHEDULED)) {
|
|
|
+ updateBlank.setSchedulingstatus(TO_BE_PUBLISHED);
|
|
|
+ }
|
|
|
+ updateBlank.setScheduledatestart(endDate);
|
|
|
+ updateBlank.setScheduledateend(endDate);
|
|
|
+ if (nowOrder != null && nowOrder.getPromisedatestart() == null) {
|
|
|
+ updateBlank.setPromisedatestart(DateUtil.offsetDay(endDate, 2));
|
|
|
+ }
|
|
|
+ if (nowOrder != null && nowOrder.getPromisedateend() == null) {
|
|
|
+ updateBlank.setPromisedateend(DateUtil.offsetDay(endDate, 2));
|
|
|
+ }
|
|
|
+ // 自动加锁坯料计划
|
|
|
+ updateBlank.setLockmark("y");
|
|
|
+ blankIds.add(updateBlank);
|
|
|
+ blankKeys.add(updateBlank.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()));
|
|
|
+ }
|
|
|
+ // 排程状态更新为待发布
|
|
|
+// apsProductionOrderDo.setSchedulstatus(SCHEDULSTATUS_TORELEASE);
|
|
|
+ apsProductionOrderService.updateById(apsProductionOrderDo);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 坯料计划状态更新
|
|
|
+ /*if (blankIds != null && blankIds.size() > 0) {
|
|
|
+ this.updateBatchById(blankIds);
|
|
|
+ }*/
|
|
|
+
|
|
|
+ //更新生产状态为“待发布”(20)
|
|
|
+ /*List<ApsBlankOrderVo> toupstatus = apsBlankOrders.stream().filter(v ->
|
|
|
+ blankids.contains(v.getId()) && (StringUtils.isBlank(v.getIfcp()) || "N".equals(v.getIfcp())))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ updateProductStatusByOrderIds(toupstatus);*/
|
|
|
+ // 自动加锁坯料计划下的工序作业
|
|
|
+ apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>().in(ApsProcessOperationDo::getBlankid, blankKeys).set(ApsProcessOperationDo::getLockmark, "y"));
|
|
|
+ // 自动加锁坯料计划下的排程作业明细
|
|
|
+// apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankKeys).set(ApsProcessOperationProcessEquDo::getLockmark, "y"));
|
|
|
+ }
|
|
|
+ logger.info("作业加锁结束..: " + blankids);
|
|
|
+// backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses(), currentUser);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 工序作业备份
|
|
|
*
|