From 971d450e8627d7d8116c741a0306cce05ad5f57c Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期四, 14 五月 2026 14:46:01 +0800
Subject: [PATCH] fix(customer): 修复客户分配逻辑
---
src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java | 96 ++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 89 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
index 437f804..609d0fd 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
@@ -12,21 +12,20 @@
import com.ruoyi.basic.pojo.Product;
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.basic.service.IProductService;
+import com.ruoyi.basic.vo.ProductModelVo;
import com.ruoyi.common.utils.bean.BeanUtils;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.stock.mapper.WarehouseInfoMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
@Service
@AllArgsConstructor
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService {
+ private final WarehouseInfoMapper warehouseInfoMapper;
private ProductMapper productMapper;
private ProductModelMapper productModelMapper;
@@ -40,6 +39,12 @@
// 濡傛灉鏈変骇鍝佸悕绉版潯浠讹紝娣诲姞鍒版煡璇腑
if (productDto.getProductName() != null && !productDto.getProductName().isEmpty()) {
queryWrapper.like(Product::getProductName, productDto.getProductName());
+ }
+ // 娴疆鐢ㄤ簬鍖哄垎鎴愬搧鍜岀墿鏂�
+ if (productDto.getProductType() != null && !productDto.getProductType().isEmpty()) {
+ if (productDto.getProductType().equals("鎴愬搧")){
+ queryWrapper.eq(Product::getProductName, productDto.getProductType());
+ }else queryWrapper.ne(Product::getProductName, "鎴愬搧");
}
// 鏌ヨ鏍硅妭鐐瑰垪琛�
@@ -56,10 +61,87 @@
}
@Override
- public IPage<ProductModel> listPageProductModel(Page<ProductModel> page, ProductModel productModel) {
+ public IPage<ProductModelVo> listPageProductModel(Page<ProductModelVo> page, ProductModel productModel) {
return productModelMapper.listPageProductModel(page, productModel);
}
+ @Override
+ public IPage<ProductModelVo> pageModelAndQua(Page<ProductModelVo> page, ProductModel productModel) {
+ IPage<ProductModelVo> result = productModelMapper.pageModelAndQua(page, productModel);
+ fillBatchNoMaps(result.getRecords());
+ return result;
+ }
+
+ private void fillBatchNoMaps(List<ProductModelVo> records) {
+ if (records == null || records.isEmpty()) {
+ return;
+ }
+
+ List<Long> productModelIds = records.stream()
+ .map(ProductModelVo::getId)
+ .filter(Objects::nonNull)
+ .toList();
+ if (productModelIds.isEmpty()) {
+ return;
+ }
+
+ List<Map<String, Object>> batchRows = productModelMapper.selectBatchNoQtyByProductModelIds(productModelIds);
+ Map<Long, HashMap<String, HashMap<String, BigDecimal>>> batchNoQtyMapsByProductModelId = new HashMap<>();
+ for (Map<String, Object> batchRow : batchRows) {
+ Long productModelId = toLong(batchRow.get("productModelId"));
+ Long warehouseId = toLong(batchRow.get("warehouseId"));
+ String batchNo = (String) batchRow.get("batchNo");
+ if (productModelId == null || warehouseId == null || batchNo == null || batchNo.isBlank()) {
+ continue;
+ }
+
+ batchNoQtyMapsByProductModelId
+ .computeIfAbsent(productModelId, key -> new HashMap<>())
+ .computeIfAbsent(String.valueOf(warehouseId), key -> new HashMap<>())
+ .merge(batchNo, toBigDecimal(batchRow.get("qty")), BigDecimal::add);
+ }
+
+ for (ProductModelVo record : records) {
+ HashMap<String, List<Map<String, BigDecimal>>> batchNoMaps = new HashMap<>();
+ HashMap<String, HashMap<String, BigDecimal>> stockBatchNoQtyMaps =
+ batchNoQtyMapsByProductModelId.getOrDefault(record.getId(), new HashMap<>());
+
+ for (Map.Entry<String, HashMap<String, BigDecimal>> entry : stockBatchNoQtyMaps.entrySet()) {
+ List<Map<String, BigDecimal>> batchList = new ArrayList<>();
+ for (Map.Entry<String, BigDecimal> batchEntry : entry.getValue().entrySet()) {
+ Map<String, BigDecimal> batchItem = new HashMap<>();
+ batchItem.put(batchEntry.getKey(), batchEntry.getValue());
+ batchList.add(batchItem);
+ }
+ batchNoMaps.put(entry.getKey(), batchList);
+ }
+
+ record.setBatchNoMaps(batchNoMaps);
+ }
+ }
+
+ private Long toLong(Object value) {
+ if (value instanceof Number number) {
+ return number.longValue();
+ }
+ if (value instanceof String str && !str.isBlank()) {
+ return Long.parseLong(str);
+ }
+ return null;
+ }
+
+ private BigDecimal toBigDecimal(Object value) {
+ if (value instanceof BigDecimal bigDecimal) {
+ return bigDecimal;
+ }
+ if (value instanceof Number number) {
+ return BigDecimal.valueOf(number.doubleValue());
+ }
+ if (value instanceof String str && !str.isBlank()) {
+ return new BigDecimal(str);
+ }
+ return BigDecimal.ZERO;
+ }
// 閫掑綊鏋勫缓瀛愯妭鐐�
private List<ProductTreeDto> buildChildrenNodes(Long parentId) {
--
Gitblit v1.9.3