|
|
|
|
@ -10,7 +10,6 @@ import org.springblade.core.mp.base.BaseServiceImpl; |
|
|
|
|
import org.springblade.core.secure.BladeUser; |
|
|
|
|
import org.springblade.desk.dashboard.feign.IPartClient; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.DsPartRelationEntity; |
|
|
|
|
import org.springblade.desk.order.pojo.entity.YieldOrder; |
|
|
|
|
import org.springblade.wms.excel.StGlassCakeOutExcel; |
|
|
|
|
import org.springblade.wms.mapper.StGlassCakeOutMapper; |
|
|
|
|
@ -26,7 +25,6 @@ import org.springframework.util.CollectionUtils; |
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @version 1.0 |
|
|
|
|
@ -86,41 +84,47 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap |
|
|
|
|
// throw new RuntimeException("工单【" + dto.getWoCode() + "】未查到生产订单ID");
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
YieldOrder yieldOrder = baseMapper.getByYieldOrder(dto.getYoCode()); |
|
|
|
|
if (yieldOrder == null) { |
|
|
|
|
YieldOrder faYieldOrder = baseMapper.getByYieldOrder(dto.getYoCode()); |
|
|
|
|
if (faYieldOrder == null) { |
|
|
|
|
throw new RuntimeException("根据生产订单ID【" + dto.getYoCode() + "】未查询到生产订单信息"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
DsPartEntity partOne = partClient.getPart(yieldOrder.getPartCode(),yieldOrder.getPartVersion()); |
|
|
|
|
if (partOne == null) { |
|
|
|
|
throw new RuntimeException("根据零件编号【" + yieldOrder.getPartCode() + "】未查询到零件信息"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
List<DsPartRelationEntity> partRelationEntityList = partClient.getSubPart(partOne.getId()); |
|
|
|
|
List<YieldOrder> yieldOrderList = baseMapper.getYieldOrderList(faYieldOrder.getId(),"12003"); |
|
|
|
|
|
|
|
|
|
List<DsPartEntity> glassCakePartList = new ArrayList<>(); |
|
|
|
|
if (!CollectionUtils.isEmpty(partRelationEntityList)) { |
|
|
|
|
// 步骤1:提取所有非空的childPartId并去重(避免null和重复ID,减少查询压力)
|
|
|
|
|
List<Long> childPartIdList = partRelationEntityList.stream() |
|
|
|
|
.map(DsPartRelationEntity::getChildPartId) // 提取子件ID
|
|
|
|
|
.filter(Objects::nonNull) // 过滤null的ID
|
|
|
|
|
.distinct() // 去重,避免重复查询
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
// 步骤2:批量查询DS_PART表(一次SQL,性能最优)
|
|
|
|
|
if (!CollectionUtils.isEmpty(childPartIdList)) { |
|
|
|
|
// 调用dsPartService的批量查询方法(根据ID列表查DS_PART)
|
|
|
|
|
List<DsPartEntity> allChildPartList = partClient.batchParts(childPartIdList); |
|
|
|
|
|
|
|
|
|
// 步骤3:筛选出IS_CLASS_CAKE为"玻璃饼"的记录(核心过滤)
|
|
|
|
|
if (!CollectionUtils.isEmpty(allChildPartList)) { |
|
|
|
|
glassCakePartList = allChildPartList.stream() |
|
|
|
|
.filter(part -> "1".equals(part.getIsGlassCake())) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
for (YieldOrder order : yieldOrderList) { |
|
|
|
|
DsPartEntity partOne = partClient.getPart(order.getPartCode(),order.getPartVersion()); |
|
|
|
|
if (partOne == null) { |
|
|
|
|
throw new RuntimeException("根据零件编号【" + order.getPartCode() + "】未查询到零件信息"); |
|
|
|
|
} |
|
|
|
|
glassCakePartList.add(partOne); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// List<DsPartRelationEntity> partRelationEntityList = partClient.getSubPart(partOne.getId());
|
|
|
|
|
//
|
|
|
|
|
// List<DsPartEntity> glassCakePartList = new ArrayList<>();
|
|
|
|
|
// if (!CollectionUtils.isEmpty(partRelationEntityList)) {
|
|
|
|
|
// // 步骤1:提取所有非空的childPartId并去重(避免null和重复ID,减少查询压力)
|
|
|
|
|
// List<Long> childPartIdList = partRelationEntityList.stream()
|
|
|
|
|
// .map(DsPartRelationEntity::getChildPartId) // 提取子件ID
|
|
|
|
|
// .filter(Objects::nonNull) // 过滤null的ID
|
|
|
|
|
// .distinct() // 去重,避免重复查询
|
|
|
|
|
// .collect(Collectors.toList());
|
|
|
|
|
//
|
|
|
|
|
// // 步骤2:批量查询DS_PART表(一次SQL,性能最优)
|
|
|
|
|
// if (!CollectionUtils.isEmpty(childPartIdList)) {
|
|
|
|
|
// // 调用dsPartService的批量查询方法(根据ID列表查DS_PART)
|
|
|
|
|
// List<DsPartEntity> allChildPartList = partClient.batchParts(childPartIdList);
|
|
|
|
|
//
|
|
|
|
|
// // 步骤3:筛选出IS_CLASS_CAKE为"玻璃饼"的记录(核心过滤)
|
|
|
|
|
// if (!CollectionUtils.isEmpty(allChildPartList)) {
|
|
|
|
|
// glassCakePartList = allChildPartList.stream()
|
|
|
|
|
// .filter(part -> "1".equals(part.getIsGlassCake()))
|
|
|
|
|
// .collect(Collectors.toList());
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// WorkOrder workOrder = new WorkOrder();
|
|
|
|
|
// workOrder.setCardNo(dto.getCardNo()); // 卡号(与DTO的cardNo一致)
|
|
|
|
|
// workOrder.setWoCode("WO-202602110001"); // 工单号
|
|
|
|
|
@ -189,7 +193,7 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap |
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
Double requireQty = yieldOrder.getYpQty()*glassCake.getQuota(); |
|
|
|
|
Double requireQty = faYieldOrder.getYpQty()*glassCake.getQuota(); |
|
|
|
|
System.out.println("玻璃饼编码:" + goodsCode + ",总需求:" + requireQty); |
|
|
|
|
|
|
|
|
|
// =====================【校验】总可用库存是否足够 =====================
|
|
|
|
|
@ -253,11 +257,11 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap |
|
|
|
|
StGlassCakeOut preOutStock = new StGlassCakeOut(); |
|
|
|
|
// 关联玻璃饼信息
|
|
|
|
|
// preOutStock.setWoCode(workOrder.getWoCode());
|
|
|
|
|
preOutStock.setYoCode(yieldOrder.getYoCode()); |
|
|
|
|
preOutStock.setYoCode(faYieldOrder.getYoCode()); |
|
|
|
|
preOutStock.setCardNo(dto.getCardNo()); |
|
|
|
|
preOutStock.setQuantity(yieldOrder.getYpQty()); |
|
|
|
|
preOutStock.setPartCode(partOne.getPartCode()); |
|
|
|
|
preOutStock.setPartName(partOne.getPartName()); |
|
|
|
|
preOutStock.setQuantity(faYieldOrder.getYpQty()); |
|
|
|
|
preOutStock.setPartCode(faYieldOrder.getPartCode()); |
|
|
|
|
preOutStock.setPartName(faYieldOrder.getPartName()); |
|
|
|
|
|
|
|
|
|
preOutStock.setOutCode(stStockInoutRecordService.generateCode()); |
|
|
|
|
preOutStock.setRequireQty(requireQty); |
|
|
|
|
|