瀏覽代碼

Merge remote-tracking branch 'origin/master'

24282 2 年之前
父節點
當前提交
013a102fd5

+ 9 - 8
hx-sale/src/main/resources/mapper/contract/ContractProductMapper.xml

@@ -33,17 +33,18 @@
 
     <select id="getNoPackContractProductById" resultType="com.fjhx.sale.entity.contract.vo.ContractProductVo">
         SELECT
-        *
+            *
         FROM
         (
         SELECT
-        t1.*,
-        t1.`code` AS contractCode,
-        t2.quantity AS cpQuantity,
-        t2.id AS contractProductId,
-        ( SELECT IFNULL( SUM( quantity ), 0 ) FROM pack_detail_product WHERE contract_product_id = t2.id ) AS sumPackQuantity
+            t2.*,
+            t1.id AS contractId,
+            t1.`code` AS contractCode,
+            t2.quantity AS cpQuantity,
+            t2.id AS contractProductId,
+            ( SELECT IFNULL( SUM( quantity ), 0 ) FROM pack_detail_product WHERE contract_product_id = t2.id ) AS sumPackQuantity
         FROM
-        contract t1
+            contract t1
         LEFT JOIN contract_product t2 ON t1.id = t2.contract_id
         <where>
             <if test="customerId neq null and customerId neq '' ">
@@ -53,7 +54,7 @@
         ) t1
         WHERE t1.sumPackQuantity &lt; t1.cpQuantity
         <if test="contractIds neq null and contractIds.size() > 0">
-            <foreach collection="contractIds" item="contractId" open="AND t1.id IN (" separator="," close=")">
+            <foreach collection="contractIds" item="contractId" open="AND contractId IN (" separator="," close=")">
                 #{contractId}
             </foreach>
         </if>

+ 20 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockVo.java

@@ -4,6 +4,8 @@ import com.fjhx.wms.entity.stock.po.Stock;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * 库存列表查询返回值实体
  *
@@ -68,5 +70,23 @@ public class StockVo extends Stock {
      * 产品spu名称
      */
     private String productSpuName;
+    /**
+     * 产品spuID
+     */
+    private Long productSpuId;
+    /**
+     * 产品spu编码
+     */
+    private String productSpuCode;
+
+    /**
+     * spu关联产品数量
+     */
+    private BigDecimal linkProductQuantity;
+
+    /**
+     * 可组合数量
+     */
+    private Long combinationQuantity;
 
 }

+ 50 - 40
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -2,6 +2,7 @@ package com.fjhx.wms.service.stock.impl;
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -205,48 +206,57 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         wrapper.eq(Stock::getWarehouseId, dto.getId());
         wrapper.like(Stock::getQuantity, dto.getKeyword());
         wrapper.eq("pi.definition", dto.getDefinition());
-        wrapper.isNotNull("ps.id");
-        wrapper.groupBy("pi.product_spu_id");
         wrapper.orderByDesc("s", Stock::getId);
-
-
         Page<StockVo> page = this.baseMapper.pageByProductSpu(dto.getPage(), wrapper);
-        List<StockVo> stockVos = page.getRecords();
-
-        //赋值产品名称
-        productInfoService.attributeAssign(stockVos, StockVo::getProductId, (item, productInfo) -> {
-            item.setType(productInfo.getType());
-            item.setProductName(productInfo.getName());
-            item.setProductCode(productInfo.getCode());
-            item.setProductUnit(productInfo.getUnit());
-            item.setProductType(productInfo.getType());
-            item.setProductSpec(productInfo.getSpec());
-            item.setProductClassifyId(productInfo.getProductClassifyId());
-            item.setProductDefinition(productInfo.getDefinition());
-
-            //赋值维多利亚扩展产品信息
-            String victoriatouristJson = item.getVictoriatouristJson();
-            JSONObject json = ObjectUtil.isNotEmpty(victoriatouristJson) ? JSONObject.parseObject(victoriatouristJson) : new JSONObject();
-            json.put("code", productInfo.getCode());
-            json.put("spec", productInfo.getSpec());
-            json.put("unit", productInfo.getUnit());
-            json.put("productSpuName", item.getProductSpuName());
-
-
-            BigDecimal frozenQuantity = json.getBigDecimal("frozenQuantity");
-            frozenQuantity = ObjectUtil.isEmpty(frozenQuantity) ? BigDecimal.ZERO : frozenQuantity;
-            json.put("frozenQuantity", frozenQuantity);
-            BigDecimal defectiveQuantity = json.getBigDecimal("defectiveQuantity");
-            defectiveQuantity = ObjectUtil.isEmpty(defectiveQuantity) ? BigDecimal.ZERO : defectiveQuantity;
-            json.put("defectiveQuantity", defectiveQuantity);
-            item.setVictoriatouristJson(json.toJSONString());
-        });
-
-        //赋值仓库名称
-        warehouseService.attributeAssign(stockVos, StockVo::getWarehouseId, (item, warehouse) -> {
-            item.setWarehouseName(warehouse.getName());
-        });
-
+        //赋值关联产品数
+        List<StockVo> records = page.getRecords();
+        List<Long> spuids = records.stream().map(StockVo::getProductSpuId).collect(Collectors.toList());
+        List<ProductInfo> productInfoList = productInfoService.list(q -> q.in(ProductInfo::getProductSpuId, spuids));
+        Map<Long, List<ProductInfo>> productInfoMap = productInfoList.stream().collect(Collectors.groupingBy(ProductInfo::getProductSpuId));
+        for (StockVo record : records) {
+            List<ProductInfo> productInfoList1 = productInfoMap.get(record.getProductSpuId());
+            record.setLinkProductQuantity(BigDecimal.valueOf(productInfoList1.size()));
+        }
+        //赋值可组合数量
+        List<Long> linkProductIds = new ArrayList<>();
+        for (StockVo record : records) {
+            String victoriatouristJson = record.getVictoriatouristJson();
+            JSONObject json = JSONObject.parseObject(victoriatouristJson);
+            JSONArray productCombinationList = json.getJSONArray("productCombinationList");
+            for (int i = 0; i < productCombinationList.size(); i++) {
+                JSONObject item = productCombinationList.getJSONObject(i);
+                Long linkProductId = item.getLong("linkProductId");
+                linkProductIds.add(linkProductId);
+//                BigDecimal linkQuantity = item.getBigDecimal("linkQuantity");
+            }
+        }
+        //查询关联产品库存
+        List<Stock> list = list(q -> q.in(Stock::getProductId, linkProductIds));
+        Map<Long, BigDecimal> stockMap = list.stream().collect(Collectors.toMap(Stock::getProductId, Stock::getQuantity));
+        for (StockVo record : records) {
+            String victoriatouristJson = record.getVictoriatouristJson();
+            JSONObject json = JSONObject.parseObject(victoriatouristJson);
+            JSONArray productCombinationList = json.getJSONArray("productCombinationList");
+
+            Long min = -1l;
+            for (int i = 0; i < productCombinationList.size(); i++) {
+                JSONObject item = productCombinationList.getJSONObject(i);
+                Long linkProductId = item.getLong("linkProductId");
+                BigDecimal linkQuantity = item.getBigDecimal("linkQuantity");
+
+                BigDecimal stockQuantity = stockMap.getOrDefault(linkProductId,BigDecimal.ZERO);
+
+                BigDecimal divide = stockQuantity.divide(linkQuantity, 0, BigDecimal.ROUND_DOWN);
+
+                //计算最小值
+                if (min == -1) {
+                    min = divide.longValue();
+                } else if (divide.intValue() < min) {
+                    min = divide.longValue();
+                }
+            }
+            record.setCombinationQuantity(min);
+        }
         return page;
     }
 

+ 9 - 9
hx-wms/src/main/resources/mapper/stock/StockMapper.xml

@@ -37,20 +37,20 @@
     <select id="pageByProductSpu" resultType="com.fjhx.wms.entity.stock.vo.StockVo">
         SELECT
             s.id,
+            ps.id productSpuId,
+            ps.`code` productSpuCode,
             ps.`name` productSpuName,
-            pi.product_spu_id,
-            s.warehouse_id,
-            s.product_id,
-            sum( s.quantity ) quantity,
-            s.create_user,
-            s.create_time,
-            s.update_user,
-            s.update_time,
-            JSON_REPLACE(s.victoriatourist_json,'$.frozenQuantity',sum(json_unquote( s.victoriatourist_json -> '$.frozenQuantity' )),'$.defectiveQuantity',sum(json_unquote( s.victoriatourist_json -> '$.defectiveQuantity' ))) victoriatourist_json
+            s.quantity,
+            pi.victoriatourist_json
         FROM
             stock s
                 LEFT JOIN bytesailing_item.product_info pi ON s.product_id = pi.id
                 LEFT JOIN bytesailing_item.product_spu ps ON pi.product_spu_id = ps.id
+        WHERE
+            NOT ps.id IS NULL
+          AND json_unquote( pi.victoriatourist_json -> '$.combination' ) = 1
+        GROUP BY
+            s.id
             ${ew.customSqlSegment}
     </select>