|
|
|
|
@ -8,10 +8,14 @@ import jakarta.annotation.Resource; |
|
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
|
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.desk.produce.pojo.entity.WorkOrder; |
|
|
|
|
import org.springblade.wms.excel.StGlassCakeOutExcel; |
|
|
|
|
import org.springblade.wms.mapper.StGlassCakeOutMapper; |
|
|
|
|
import org.springblade.wms.mapper.StOtherReceiptRecordMapper; |
|
|
|
|
import org.springblade.wms.mapper.StRealtimeStockMapper; |
|
|
|
|
import org.springblade.wms.pojo.dto.StGlassCakeOutDTO; |
|
|
|
|
import org.springblade.wms.pojo.entity.*; |
|
|
|
|
@ -23,6 +27,7 @@ import org.springframework.util.CollectionUtils; |
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @version 1.0 |
|
|
|
|
@ -47,6 +52,10 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap |
|
|
|
|
IStStorehouseService stStorehouseService; |
|
|
|
|
@Resource |
|
|
|
|
IStStorageLocationService stStorageLocationService; |
|
|
|
|
@Resource |
|
|
|
|
StOtherReceiptRecordMapper stOtherReceiptRecordMapper; |
|
|
|
|
@Resource |
|
|
|
|
IPartClient partClient; |
|
|
|
|
// @Resource
|
|
|
|
|
// IDsPartService dsPartService;
|
|
|
|
|
// @Resource
|
|
|
|
|
@ -75,60 +84,60 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap |
|
|
|
|
// Long userId = Long.valueOf(user.getUserId());
|
|
|
|
|
Date now = new Date(); |
|
|
|
|
|
|
|
|
|
WorkOrder workOrder = stOtherReceiptRecordMapper.getByWoCode(dto.getWoCode()); |
|
|
|
|
YieldOrder yieldOrder = stOtherReceiptRecordMapper.getByYoId(workOrder.getYoId()); |
|
|
|
|
|
|
|
|
|
DsPartEntity partOne = partClient.getPart(workOrder.getPartCode(),yieldOrder.getPartVersion()); |
|
|
|
|
List<DsPartRelationEntity> partRelationEntityList = partClient.getSubPart(partOne.getId()); |
|
|
|
|
|
|
|
|
|
// WorkOrder workOrder = workOrderMapper.getWorkOrderByCardNo(dto.getCardNo(),s1);
|
|
|
|
|
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 -> Boolean.TRUE.equals(part.getIsGlassCake())) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// WorkOrder workOrder = new WorkOrder();
|
|
|
|
|
// workOrder.setCardNo(dto.getCardNo()); // 卡号(与DTO的cardNo一致)
|
|
|
|
|
// workOrder.setWoCode("WO-202602110001"); // 工单号
|
|
|
|
|
// workOrder.setPartCode("PART-MAIN001"); // 主零件编码
|
|
|
|
|
// workOrder.setMakeQty(3.0); // 生产数量:100台
|
|
|
|
|
//
|
|
|
|
|
// DsPartEntity partOne = dsPartService.selectDsPartByPatCodeAndVersion(workOrder.getPartCode());
|
|
|
|
|
// List<DsPartRelationEntity> partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partOne.getId());
|
|
|
|
|
// DsPartEntity partOne = new DsPartEntity();
|
|
|
|
|
// partOne.setId(1001L); // 主零件ID
|
|
|
|
|
// partOne.setPartCode(workOrder.getPartCode()); // 与工单主零件编码一致
|
|
|
|
|
// partOne.setPartName("XX设备-主组装件");
|
|
|
|
|
//
|
|
|
|
|
// 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 = dsPartService.selectDsPartByIds(childPartIdList);
|
|
|
|
|
// List<DsPartEntity> glassCakePartList = new ArrayList<>();
|
|
|
|
|
//
|
|
|
|
|
// // 步骤3:筛选出IS_CLASS_CAKE为"玻璃饼"的记录(核心过滤)
|
|
|
|
|
// if (!CollectionUtils.isEmpty(allChildPartList)) {
|
|
|
|
|
// glassCakePartList = allChildPartList.stream()
|
|
|
|
|
// .filter(part -> Boolean.TRUE.equals(part.getIsClassCake()))
|
|
|
|
|
// .collect(Collectors.toList());
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
WorkOrder workOrder = new WorkOrder(); |
|
|
|
|
workOrder.setCardNo(dto.getCardNo()); // 卡号(与DTO的cardNo一致)
|
|
|
|
|
workOrder.setWoCode("WO-202602110001"); // 工单号
|
|
|
|
|
workOrder.setPartCode("PART-MAIN001"); // 主零件编码
|
|
|
|
|
workOrder.setMakeQty(3.0); // 生产数量:100台
|
|
|
|
|
|
|
|
|
|
DsPartEntity partOne = new DsPartEntity(); |
|
|
|
|
partOne.setId(1001L); // 主零件ID
|
|
|
|
|
partOne.setPartCode(workOrder.getPartCode()); // 与工单主零件编码一致
|
|
|
|
|
partOne.setPartName("XX设备-主组装件"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<DsPartEntity> glassCakePartList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
// 玻璃饼1:印字Y,粉重500g,材料号MAT001,厚度5mm,定额0.5/台
|
|
|
|
|
DsPartEntity cake1 = new DsPartEntity(); |
|
|
|
|
cake1.setId(2001L); |
|
|
|
|
cake1.setPartCode("03-07-65-39-B3"); |
|
|
|
|
cake1.setPartName("玻璃饼-500g-印字Y-5mm"); |
|
|
|
|
cake1.setIsPrint("1"); // 印字
|
|
|
|
|
cake1.setPowderWeight(new BigDecimal("2.5")); // 粉重
|
|
|
|
|
cake1.setMaterial("kk1"); // 材料号
|
|
|
|
|
cake1.setFormingThickness(new BigDecimal("3.5")); // 成型厚度
|
|
|
|
|
cake1.setQuota(5.0); // 定额:每台产品用0.5个
|
|
|
|
|
glassCakePartList.add(cake1); |
|
|
|
|
// // 玻璃饼1:印字Y,粉重500g,材料号MAT001,厚度5mm,定额0.5/台
|
|
|
|
|
// DsPartEntity cake1 = new DsPartEntity();
|
|
|
|
|
// cake1.setId(2001L);
|
|
|
|
|
// cake1.setPartCode("03-07-65-39-B3");
|
|
|
|
|
// cake1.setPartName("玻璃饼-500g-印字Y-5mm");
|
|
|
|
|
// cake1.setIsPrint("1"); // 印字
|
|
|
|
|
// cake1.setPowderWeight(new BigDecimal("2.5")); // 粉重
|
|
|
|
|
// cake1.setMaterial("kk1"); // 材料号
|
|
|
|
|
// cake1.setFormingThickness(new BigDecimal("3.5")); // 成型厚度
|
|
|
|
|
// cake1.setQuota(5.0); // 定额:每台产品用0.5个
|
|
|
|
|
// glassCakePartList.add(cake1);
|
|
|
|
|
|
|
|
|
|
// 3. 初始化预出库列表(收集所有库存充足的预出库实体)
|
|
|
|
|
List<StGlassCakeOut> preOutStockList = new ArrayList<>(); |
|
|
|
|
|