| | |
| | | import com.ruoyi.production.pojo.*; |
| | | import com.ruoyi.production.service.ProductOrderService; |
| | | import com.ruoyi.quality.mapper.QualityInspectMapper; |
| | | import com.ruoyi.stock.dto.StockInventoryDto; |
| | | import com.ruoyi.stock.mapper.StockInventoryMapper; |
| | | import com.ruoyi.stock.pojo.StockInventory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | |
| | | |
| | | @Override |
| | | public List<SelectOptionDTO<String>> getProductOrderBatchNo() { |
| | | List<ProductOrder> productOrders = productOrderMapper.selectList(null); |
| | | return productOrders.stream().map(productOrder -> new SelectOptionDTO<>(productOrder.getBatchNo(), productOrder.getBatchNo())).collect(Collectors.toList()); |
| | | } |
| | | |
| | | @Override |
| | | public List<StockInventoryDto> getByBomId(Long bomId) { |
| | | List<ProductStructureDto> structureList = productStructureMapper.listBybomId(bomId); |
| | | |
| | | if (CollectionUtils.isEmpty(structureList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | Set<Long> allNodeIds = structureList.stream() |
| | | .map(ProductStructureDto::getId) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | Set<Long> parentIds = structureList.stream() |
| | | .filter(node -> node.getParentId() != null && node.getParentId() != 0) |
| | | .map(ProductStructureDto::getParentId) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | Set<Long> leafNodeIds = new HashSet<>(allNodeIds); |
| | | leafNodeIds.removeAll(parentIds); |
| | | |
| | | // 获取叶子节点的 productModelId |
| | | List<Long> productModelIds = structureList.stream() |
| | | .filter(node -> leafNodeIds.contains(node.getId())) |
| | | .map(ProductStructureDto::getProductModelId) |
| | | .filter(Objects::nonNull) |
| | | .distinct() |
| | | .collect(Collectors.toList()); |
| | | |
| | | if (productModelIds.isEmpty()) { |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | return stockInventoryMapper.getStockInventory(productModelIds); |
| | | //查询库存批号 |
| | | List<StockInventory> stockInventoryList = stockInventoryMapper.selectList(null); |
| | | return stockInventoryList.stream().map(stockInventory -> new SelectOptionDTO<>(stockInventory.getBatchNo(), stockInventory.getBatchNo())).collect(Collectors.toList()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | if (CollectionUtils.isEmpty(drawMaterialsList)) { |
| | | throw new RuntimeException("领料明细不能为空"); |
| | | } |
| | | // 如果有数据先加库存 |
| | | ProductOrder productOrder = productOrderMapper.selectById(productOrderDto.getId()); |
| | | if (productOrder != null) { |
| | | List<DrawMaterialDto> materialDtoList = JSON.parseArray(productOrder.getDrawMaterials(), DrawMaterialDto.class); |
| | | for (DrawMaterialDto drawMaterialDto : materialDtoList) { |
| | | stockUtils.addStock(drawMaterialDto.getProductModelId(), drawMaterialDto.getRequisitionQty(), null, productOrderDto.getId(), |
| | | drawMaterialDto.getBatchNo(), drawMaterialDto.getCustomer() |
| | | ); |
| | | } |
| | | } |
| | | |
| | | // 处理领料(扣减库存) |
| | | try { |
| | |
| | | if (drawMaterialDto.getProductModelId() == null) { |
| | | throw new RuntimeException("产品型号ID不能为空"); |
| | | } |
| | | stockUtils.substractStock(drawMaterialDto.getProductModelId(), drawMaterialDto.getRequisitionQty(), StockOutQualifiedRecordTypeEnum.DRAW_MATERIALS_STOCK_OUT.getCode(), productOrderDto.getId()); |
| | | stockUtils.substractStock(drawMaterialDto.getProductModelId(), drawMaterialDto.getRequisitionQty(), |
| | | StockOutQualifiedRecordTypeEnum.DRAW_MATERIALS_STOCK_OUT.getCode(), productOrderDto.getId(), |
| | | drawMaterialDto.getBatchNo(),drawMaterialDto.getCustomer()); |
| | | } |
| | | } catch (Exception e) { |
| | | throw new RuntimeException("领料失败:" + e.getMessage()); |