yzc преди 11 месеца
родител
ревизия
55576bb79a

+ 23 - 2
hx-purchase/src/main/resources/mapper/subscribe/SubscribeMapper.xml

@@ -22,10 +22,31 @@
     </select>
     <select id="getSubscribeCountList" resultType="com.fjhx.wms.entity.SubscribeDetailPo">
         SELECT
+            sd.bussiness_id,
             sum( sd.count ) AS `count`,
-            sd.bussiness_id
+            sum( sd.purchaseCount ) AS purchaseCount
         FROM
-            subscribe_detail sd
+            (
+                SELECT
+                    sd.*,
+                    ifnull( t1.quantity, 0 ) AS purchaseCount
+                FROM
+                    subscribe_detail sd
+                        LEFT JOIN (
+                        SELECT
+                            pd.subscribe_detail_id,
+                            sum( pd.count ) AS quantity
+                        FROM
+                            purchase_detail pd
+                                JOIN purchase p ON pd.purchase_id = p.id
+                        WHERE
+                            p.purchase_status IN ( 10, 30 )
+                          AND p.del_flag = 0
+                          AND p.tenant_id = 'wdly'
+                        GROUP BY
+                            pd.subscribe_detail_id
+                    ) t1 ON t1.subscribe_detail_id = sd.id
+            ) sd
                 JOIN subscribe s ON sd.subscribe_id = s.id
             ${ew.customSqlSegment}
     </select>

+ 3 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/SubscribeDetailPo.java

@@ -103,4 +103,7 @@ public class SubscribeDetailPo extends BasePo {
      */
     @TableField(exist = false)
     private Integer productDefinition;
+
+    @TableField(exist = false)
+    private BigDecimal purchaseCount;
 }

+ 12 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockAnalysis.java

@@ -29,6 +29,7 @@ public class StockAnalysis {
     /**
      * 产品类型
      */
+    @ColumnWidth(20)
     @ExcelProperty("商品类型")
     private String productType;
 
@@ -56,6 +57,7 @@ public class StockAnalysis {
     /**
      * 是否是组合
      */
+    @ColumnWidth(20)
     @ExcelProperty("是否组合")
     private String isCombination;
 
@@ -74,48 +76,56 @@ public class StockAnalysis {
     /**
      * 待采购数量
      */
+    @ColumnWidth(20)
     @ExcelProperty("待采购数量")
     private BigDecimal purchaseWaitQuantity;
 
     /**
      * 待入库数量
      */
+    @ColumnWidth(20)
     @ExcelProperty("待入库数量")
     private BigDecimal stockWaitInQuantity;
 
     /**
      * 待出库数量
      */
+    @ColumnWidth(20)
     @ExcelProperty("待出库数量")
     private BigDecimal stockWaitOutQuantity;
 
     /**
      * 可支配数量
      */
+    @ColumnWidth(20)
     @ExcelProperty("可支配库存")
     private BigDecimal disposableQuantity;
 
     /**
      * 库存数量
      */
+    @ColumnWidth(20)
     @ExcelProperty("可用库存")
     private BigDecimal quantity;
 
     /**
      * 冻结数量
      */
+    @ColumnWidth(20)
     @ExcelProperty("冻结库存")
     private BigDecimal frozenQuantity;
 
     /**
      * 次品数量
      */
+    @ColumnWidth(20)
     @ExcelProperty("次品库存")
     private BigDecimal defectiveQuantity;
 
     /**
      * 京东在途数量
      */
+    @ColumnWidth(20)
     @ExcelProperty("京东在途")
     private BigDecimal jdInTransitQuantity;
 
@@ -128,12 +138,14 @@ public class StockAnalysis {
     /**
      * 结存单价
      */
+    @ColumnWidth(20)
     @ExcelProperty("结存单价")
     private BigDecimal unitPrice;
 
     /**
      * 库存金额
      */
+    @ColumnWidth(20)
     @ExcelProperty("库存金额")
     private BigDecimal amount;
 }

+ 23 - 27
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -21,7 +21,6 @@ import com.fjhx.item.util.excel.util.ExcelUtil;
 import com.fjhx.tenant.entity.dict.dto.DictTenantDataSelectDto;
 import com.fjhx.tenant.entity.dict.vo.DictTenantDataVo;
 import com.fjhx.tenant.service.dict.DictTenantDataService;
-import com.fjhx.wms.entity.PurchaseDetailPo;
 import com.fjhx.wms.entity.SubscribeDetailPo;
 import com.fjhx.wms.entity.stock.bo.InOutBo;
 import com.fjhx.wms.entity.stock.dto.StockDto;
@@ -980,24 +979,13 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
     private void stockAnalysisComm(List<StockAnalysis> stockAnalysisList) {
         List<Long> ids = stockAnalysisList.stream().map(StockAnalysis::getProductId).collect(Collectors.toList());
 
-        //获取已采购数量(审批中/审批通过)
-        List<PurchaseDetailPo> purchaseCountList = purService.getPurchaseCountList(IWrapper.<Object>getWrapper()
-                .in("pd.bussiness_id", ids)
-                .in("p.purchase_status", 10, 30)
-                .groupBy("pd.bussiness_id"));
-        purchaseCountList = ObjectUtil.isEmpty(purchaseCountList) ? new ArrayList<>() : purchaseCountList;
-        //获取已申购数量(审批中/审批通过)
+        //获取待采购列表
         List<SubscribeDetailPo> subscribeCountList = purService.getSubscribeCountList(IWrapper.<Object>getWrapper()
                 .in("sd.bussiness_id", ids)
                 .in("s.subcribe_status", 10, 30)
+                .in("sd.status", 15, 30)
                 .groupBy("sd.bussiness_id"));
         subscribeCountList = ObjectUtil.isEmpty(subscribeCountList) ? new ArrayList<>() : subscribeCountList;
-        //获取已采购数量(审批通过)
-        List<PurchaseDetailPo> purchaseCountList1 = purService.getPurchaseCountList(IWrapper.<Object>getWrapper()
-                .in("pd.bussiness_id", ids)
-                .eq("p.purchase_status", 30)
-                .groupBy("pd.bussiness_id"));
-        purchaseCountList1 = ObjectUtil.isEmpty(purchaseCountList1) ? new ArrayList<>() : purchaseCountList1;
         //获取已入库数量
         List<StockWaitDetailsVo> stockWaitList = stockWaitService.getStockWaitList(IWrapper.<Object>getWrapper()
                 .in("swd.product_id", ids)
@@ -1021,26 +1009,34 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
 
         for (StockAnalysis record : stockAnalysisList) {
             //待采购数量(申购数-采购数)
-            BigDecimal subscribeCount = subscribeCountList.stream()
+            BigDecimal purchaseWaitCount = subscribeCountList.stream()
                     .filter(item -> item.getBussinessId().equals(record.getProductId()))
-                    .map(SubscribeDetailPo::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal purchaseCount = purchaseCountList.stream()
-                    .filter(item -> item.getBussinessId().equals(record.getProductId()))
-                    .map(PurchaseDetailPo::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal purchaseWaitCount = subscribeCount.subtract(purchaseCount);
+                    .map(item -> {
+                        BigDecimal subtract = item.getCount().subtract(item.getPurchaseCount());
+                        if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
+                            return BigDecimal.ZERO;
+                        }
+                        return subtract;
+                    }).reduce(BigDecimal.ZERO, BigDecimal::add);
             //待入库数量
-            BigDecimal purchaseCount1 = purchaseCountList1.stream()
-                    .filter(item -> item.getBussinessId().equals(record.getProductId()))
-                    .map(PurchaseDetailPo::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal reduce = stockWaitList.stream()
+            BigDecimal stockWaitInCount = stockWaitList.stream()
                     .filter(item -> item.getProductId().equals(record.getProductId()))
-                    .map(StockWaitDetailsVo::getReceiptQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal stockWaitInCount = purchaseCount1.subtract(reduce);
+                    .map(item -> {
+                        BigDecimal subtract = item.getQuantity().subtract(item.getReceiptQuantity());
+                        if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
+                            return BigDecimal.ZERO;
+                        }
+                        return subtract;
+                    }).reduce(BigDecimal.ZERO, BigDecimal::add);
             //待出库数量
             BigDecimal stockWaitOutCount = stockWaitOutList.stream()
                     .filter(item -> item.getProductId().equals(record.getProductId()))
                     .map(item -> {
-                        return item.getQuantity().subtract(item.getReceiptQuantity());
+                        BigDecimal subtract = item.getQuantity().subtract(item.getReceiptQuantity());
+                        if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
+                            return BigDecimal.ZERO;
+                        }
+                        return subtract;
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
             //可支配库存
             BigDecimal disposableCount = record.getQuantity().subtract(stockWaitOutCount);