|
@@ -587,53 +587,59 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
|
|
// 已经完成保养的保养项关联的 设备id 集合
|
|
// 已经完成保养的保养项关联的 设备id 集合
|
|
Set<Long> deviceIds = new HashSet<>();
|
|
Set<Long> deviceIds = new HashSet<>();
|
|
workOrderMaterials.forEach(material -> {
|
|
workOrderMaterials.forEach(material -> {
|
|
- IotMainWorkOrderBomMaterialDO tempMaterial = BeanUtils.toBean(material, IotMainWorkOrderBomMaterialDO.class);
|
|
|
|
- tempMaterial.setWorkOrderId(mainWorkOrder.getId());
|
|
|
|
- workOrderBomMaterialDOS.add(tempMaterial);
|
|
|
|
|
|
+ if (ObjUtil.isEmpty(material.getId())) {
|
|
|
|
+ // 兼容保养工单中部分保养项保养完成 部分保养项 延期保养的情况 这里只新增延期保养 或正常 保养的物料
|
|
|
|
+ IotMainWorkOrderBomMaterialDO tempMaterial = BeanUtils.toBean(material, IotMainWorkOrderBomMaterialDO.class);
|
|
|
|
+ tempMaterial.setWorkOrderId(mainWorkOrder.getId());
|
|
|
|
+ workOrderBomMaterialDOS.add(tempMaterial);
|
|
|
|
|
|
- if ("本地库存".equals(material.getMaterialSource())) {
|
|
|
|
- if (ObjUtil.isNotEmpty(material.getFactoryId())) {
|
|
|
|
- factoryIds.add(material.getFactoryId());
|
|
|
|
- }
|
|
|
|
- if (ObjUtil.isNotEmpty(material.getCostCenterId())) {
|
|
|
|
- costCenterIds.add(material.getCostCenterId());
|
|
|
|
- }
|
|
|
|
- if (ObjUtil.isNotEmpty(material.getStorageLocationId())) {
|
|
|
|
- storageLocationIds.add(material.getStorageLocationId());
|
|
|
|
- }
|
|
|
|
- if (ObjUtil.isNotEmpty(material.getMaterialCode())) {
|
|
|
|
- materialCodes.add(material.getMaterialCode());
|
|
|
|
- }
|
|
|
|
- String tempKey = material.getFactoryId() + String.valueOf(material.getCostCenterId())
|
|
|
|
- + material.getMaterialCode();
|
|
|
|
- if (lockStockPair.containsKey(tempKey)) {
|
|
|
|
- BigDecimal tempQuantity = lockStockPair.get(tempKey);
|
|
|
|
- BigDecimal totalQuantity = tempQuantity.add(material.getQuantity());
|
|
|
|
- lockStockPair.put(tempKey, totalQuantity);
|
|
|
|
- } else {
|
|
|
|
- lockStockPair.put(tempKey, material.getQuantity());
|
|
|
|
|
|
+ if ("本地库存".equals(material.getMaterialSource())) {
|
|
|
|
+ if (ObjUtil.isNotEmpty(material.getFactoryId())) {
|
|
|
|
+ factoryIds.add(material.getFactoryId());
|
|
|
|
+ }
|
|
|
|
+ if (ObjUtil.isNotEmpty(material.getCostCenterId())) {
|
|
|
|
+ costCenterIds.add(material.getCostCenterId());
|
|
|
|
+ }
|
|
|
|
+ if (ObjUtil.isNotEmpty(material.getStorageLocationId())) {
|
|
|
|
+ storageLocationIds.add(material.getStorageLocationId());
|
|
|
|
+ }
|
|
|
|
+ if (ObjUtil.isNotEmpty(material.getMaterialCode())) {
|
|
|
|
+ materialCodes.add(material.getMaterialCode());
|
|
|
|
+ }
|
|
|
|
+ String tempKey = material.getFactoryId() + String.valueOf(material.getCostCenterId())
|
|
|
|
+ + material.getMaterialCode();
|
|
|
|
+ if (lockStockPair.containsKey(tempKey)) {
|
|
|
|
+ BigDecimal tempQuantity = lockStockPair.get(tempKey);
|
|
|
|
+ BigDecimal totalQuantity = tempQuantity.add(material.getQuantity());
|
|
|
|
+ lockStockPair.put(tempKey, totalQuantity);
|
|
|
|
+ } else {
|
|
|
|
+ lockStockPair.put(tempKey, material.getQuantity());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
// 添加 工单消耗的物料记录
|
|
// 添加 工单消耗的物料记录
|
|
iotMainWorkOrderBomMaterialMapper.insertBatch(workOrderBomMaterialDOS);
|
|
iotMainWorkOrderBomMaterialMapper.insertBatch(workOrderBomMaterialDOS);
|
|
workOrderBOMs.forEach(bom -> {
|
|
workOrderBOMs.forEach(bom -> {
|
|
- IotMainWorkOrderBomDO tempBom = BeanUtils.toBean(bom, IotMainWorkOrderBomDO.class);
|
|
|
|
- // 如果工单明细中任何一个保养项设置了 任何一种推迟保养规则 工单结果 不能设置为 已执行
|
|
|
|
- if (bom.getDelayKilometers().compareTo(BigDecimal.ZERO)>0
|
|
|
|
- || bom.getDelayDuration().compareTo(BigDecimal.ZERO)>0 || bom.getDelayNaturalDate().compareTo(BigDecimal.ZERO)>0) {
|
|
|
|
- tempBom.setStatus(0);
|
|
|
|
- mainCompleted.set(false);
|
|
|
|
- }
|
|
|
|
- if (bom.getDelayKilometers().compareTo(BigDecimal.ZERO)==0
|
|
|
|
- && bom.getDelayDuration().compareTo(BigDecimal.ZERO)==0 && bom.getDelayNaturalDate().compareTo(BigDecimal.ZERO)==0) {
|
|
|
|
- // 如果保养项没有设置延时保养 则查询当前设备的 累计运行公里数 累计运行时间 当前时间日期 赋值到 关联保养计划 明细 的 对应保养规则数据上
|
|
|
|
- deviceIds.add(bom.getDeviceId());
|
|
|
|
- // 保养项下如果已经添加了物料 说明该保养项已经保养完成
|
|
|
|
- bomNodeIds.add(bom.getBomNodeId());
|
|
|
|
- tempBom.setStatus(1);
|
|
|
|
|
|
+ if (0 == bom.getStatus()) {
|
|
|
|
+ // 兼容保养工单中部分保养项保养完成 部分保养项 延期保养的情况 这里只更新延期保养 或正常 保养的物料
|
|
|
|
+ IotMainWorkOrderBomDO tempBom = BeanUtils.toBean(bom, IotMainWorkOrderBomDO.class);
|
|
|
|
+ // 如果工单明细中任何一个保养项设置了 任何一种推迟保养规则 工单结果 不能设置为 已执行
|
|
|
|
+ if (bom.getDelayKilometers().compareTo(BigDecimal.ZERO)>0
|
|
|
|
+ || bom.getDelayDuration().compareTo(BigDecimal.ZERO)>0 || bom.getDelayNaturalDate().compareTo(BigDecimal.ZERO)>0) {
|
|
|
|
+ tempBom.setStatus(0);
|
|
|
|
+ mainCompleted.set(false);
|
|
|
|
+ }
|
|
|
|
+ if (bom.getDelayKilometers().compareTo(BigDecimal.ZERO)==0
|
|
|
|
+ && bom.getDelayDuration().compareTo(BigDecimal.ZERO)==0 && bom.getDelayNaturalDate().compareTo(BigDecimal.ZERO)==0) {
|
|
|
|
+ // 如果保养项没有设置延时保养 则查询当前设备的 累计运行公里数 累计运行时间 当前时间日期 赋值到 关联保养计划 明细 的 对应保养规则数据上
|
|
|
|
+ deviceIds.add(bom.getDeviceId());
|
|
|
|
+ // 保养项下如果已经添加了物料 说明该保养项已经保养完成
|
|
|
|
+ bomNodeIds.add(bom.getBomNodeId());
|
|
|
|
+ tempBom.setStatus(1);
|
|
|
|
+ }
|
|
|
|
+ workOrderBomDOS.add(tempBom);
|
|
}
|
|
}
|
|
- workOrderBomDOS.add(tempBom);
|
|
|
|
});
|
|
});
|
|
iotMainWorkOrderBomMapper.updateBatch(workOrderBomDOS);
|
|
iotMainWorkOrderBomMapper.updateBatch(workOrderBomDOS);
|
|
// 只有工单明细中所有保养项的物料都选择完成,才会将工单结果设置为 ‘已执行’
|
|
// 只有工单明细中所有保养项的物料都选择完成,才会将工单结果设置为 ‘已执行’
|
|
@@ -686,14 +692,16 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ // 查询关联的保养工单
|
|
|
|
+ IotMainWorkOrderPageReqVO orderReqVO = new IotMainWorkOrderPageReqVO();
|
|
|
|
+ orderReqVO.setOrderGroupId(updateObj.getOrderGroupId());
|
|
|
|
+ List<IotMainWorkOrderDO> associateOrders = iotMainWorkOrderMapper.selectList(orderReqVO);
|
|
|
|
+ List<IotMainWorkOrderDO> filteredOrders = associateOrders.stream()
|
|
|
|
+ .filter(order -> !order.getId().equals(updateObj.getId()))
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+
|
|
// 如果当前工单已经关闭,需要同时将当前工单的关联工单 一并关闭 是否需要将当前工单选择的物料及费用也复制到 关联工单?
|
|
// 如果当前工单已经关闭,需要同时将当前工单的关联工单 一并关闭 是否需要将当前工单选择的物料及费用也复制到 关联工单?
|
|
if (2 == updateObj.getResult()) {
|
|
if (2 == updateObj.getResult()) {
|
|
- IotMainWorkOrderPageReqVO orderReqVO = new IotMainWorkOrderPageReqVO();
|
|
|
|
- orderReqVO.setOrderGroupId(updateObj.getOrderGroupId());
|
|
|
|
- List<IotMainWorkOrderDO> associateOrders = iotMainWorkOrderMapper.selectList(orderReqVO);
|
|
|
|
- List<IotMainWorkOrderDO> filteredOrders = associateOrders.stream()
|
|
|
|
- .filter(order -> !order.getId().equals(updateObj.getId()))
|
|
|
|
- .collect(Collectors.toList());
|
|
|
|
if (CollUtil.isNotEmpty(filteredOrders)) {
|
|
if (CollUtil.isNotEmpty(filteredOrders)) {
|
|
// 将关联工单设置为 已执行 直接删除
|
|
// 将关联工单设置为 已执行 直接删除
|
|
filteredOrders.forEach(order -> {order.setResult(2); order.setDeleted(true);});
|
|
filteredOrders.forEach(order -> {order.setResult(2); order.setDeleted(true);});
|
|
@@ -709,6 +717,20 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
|
|
iotMainWorkOrderBomMapper.updateBatch(associateOrderBomS);
|
|
iotMainWorkOrderBomMapper.updateBatch(associateOrderBomS);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ // todo 如果关联工单中的一个工单进行了保养(有2个保养项) 其中一个保养项已经保养完成 另外一个保养项 延期保养
|
|
|
|
+ // todo 此时应该将当前保养工单的保养数据(保养起止时间 保养费用 其他费用 备注...保养项信息...)同步到 所有关联的 保养工单
|
|
|
|
+ if (1 == updateObj.getResult()) {
|
|
|
|
+ if (CollUtil.isNotEmpty(filteredOrders)) {
|
|
|
|
+ filteredOrders.forEach(order -> {
|
|
|
|
+ order.setActualStartTime(updateObj.getActualStartTime());
|
|
|
|
+ order.setActualEndTime(updateObj.getActualEndTime());
|
|
|
|
+ order.setCost(updateObj.getCost());
|
|
|
|
+ order.setOtherCost(updateObj.getOtherCost());
|
|
|
|
+ order.setLaborCost(updateObj.getLaborCost());
|
|
|
|
+ order.setRemark(updateObj.getRemark());
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
// 只扣减本地库存 不处理SAP库存
|
|
// 只扣减本地库存 不处理SAP库存
|
|
if (CollUtil.isNotEmpty(factoryIds) && CollUtil.isNotEmpty(costCenterIds) && CollUtil.isNotEmpty(materialCodes)) {
|
|
if (CollUtil.isNotEmpty(factoryIds) && CollUtil.isNotEmpty(costCenterIds) && CollUtil.isNotEmpty(materialCodes)) {
|
|
IotLockStockPageReqVO reqVO = new IotLockStockPageReqVO();
|
|
IotLockStockPageReqVO reqVO = new IotLockStockPageReqVO();
|