Browse Source

库存导出调整和领用分类查询调整

徐滕 5 days ago
parent
commit
db4603c217

+ 28 - 20
jeeplus-modules/jeeplus-psi-management/src/main/java/com/jeeplus/psimanage/psiWareHouse/mapper/xml/PsiWareHouseBasicMapper.xml

@@ -155,7 +155,7 @@
 			IFNULL(loss_after.loss_number, 0) AS afterLossNumber,
 			IFNULL(after_pmwd.trade_number, 0) AS afterTradeNumber,
 			IFNULL(after_pmcdra.not_surplus_stock, 0) AS afterNotSurplusStock,
-			sum(a.current_inventory) AS tradeNumber,
+			a.current_inventory AS tradeNumber,
 			all_stock.allCurrentInventory,
 			a.warn_num,
 			a.warn_flag,
@@ -172,6 +172,7 @@
 				select
 					sum(collect_number) as collect_number,
 					goods_name,
+					collect_type,
 					status
 				from psi_management_collect_detailed e
 						 left join psi_management_collect_basics f on e.basic_id = f.id and f.del_flag = 0
@@ -181,14 +182,15 @@
 				<if test="dto != null and dto.dateRange != null and dto.dateRange.length == 2">
 					and f.collect_date &gt;= #{dto.dateRange[0]} AND f.collect_date &lt;= #{dto.dateRange[1]}
 				</if>
-				GROUP BY e.goods_name
+				GROUP BY e.goods_name, e.collect_type
 			) b
-			on a.trade_name = b.goods_name
+			on a.trade_name = b.goods_name AND a.ware_house_type = b.collect_type
 				left join
 			(
 				select
 					sum(loss_number) as loss_number,
 					goods_name,
+					collect_type,
 					status
 				from psi_management_loss_detailed e
 						 left join psi_management_loss_basics f on e.basic_id = f.id and f.del_flag = 0
@@ -197,13 +199,14 @@
 				<if test="dto != null and dto.dateRange != null and dto.dateRange.length == 2">
 					and f.collect_date &gt;= #{dto.dateRange[0]} AND f.collect_date &lt;= #{dto.dateRange[1]}
 				</if>
-				GROUP BY e.goods_name
+				GROUP BY e.goods_name, e.collect_type
 			) loss
-			on a.trade_name = loss.goods_name
+			on a.trade_name = loss.goods_name AND a.ware_house_type = loss.collect_type
 			left join(
 				select
 				sum(loss_number) as loss_number,
 				goods_name,
+				collect_type,
 				status
 				from psi_management_loss_detailed e
 				left join psi_management_loss_basics f on e.basic_id = f.id and f.del_flag = 0
@@ -212,15 +215,16 @@
 				<if test="dto != null and dto.dateRange != null and dto.dateRange.length == 2">
 				and f.collect_date  &gt;= #{dto.dateRange[1]}
 				</if>
-				GROUP BY e.goods_name
+				GROUP BY e.goods_name, e.collect_type
 			) loss_after
-			on a.trade_name = loss_after.goods_name
+			on a.trade_name = loss_after.goods_name AND a.ware_house_type = loss_after.collect_type
 				left join
 			(
 				select
 					sum(returned_num) AS returned_num,
 					sum(not_surplus_stock) AS not_surplus_stock,
-					goods_name
+					goods_name,
+					collect_type
 				from psi_management_collect_detailed_record e
 						 left join psi_management_collect_basics pmcba on e.basic_id = pmcba.id and pmcba.del_flag = 0
 				WHERE pmcba.`status` = 5
@@ -228,14 +232,15 @@
 				<if test=" dto != null and dto.dateRange != null and dto.dateRange.length == 2">
 					and pmcba.collect_date &gt;= #{dto.dateRange[0]} AND pmcba.collect_date &lt;= #{dto.dateRange[1]}
 				</if>
-				group BY e.goods_name
+				group BY e.goods_name, e.collect_type
 			) pmcdra
-			on a.trade_name = pmcdra.goods_name
+			on a.trade_name = pmcdra.goods_name AND a.ware_house_type = pmcdra.collect_type
 		LEFT JOIN (
 				select
 					sum(returned_num) AS returned_num,
 					sum(not_surplus_stock) AS not_surplus_stock,
-					goods_name
+					goods_name,
+					collect_type
 				from psi_management_collect_detailed_record e
 					left join psi_management_collect_basics pmcba on e.basic_id = pmcba.id and pmcba.del_flag = 0
 					WHERE pmcba.`status` = 5
@@ -243,20 +248,22 @@
 				<if test=" dto != null and dto.dateRange != null and dto.dateRange.length == 2">
 					and pmcba.collect_date &gt;= #{dto.dateRange[1]}
 				</if>
-				group BY e.goods_name
+				group BY e.goods_name, e.collect_type
 			) after_pmcdra
-		on a.trade_name = after_pmcdra.goods_name
+		on a.trade_name = after_pmcdra.goods_name AND a.ware_house_type = after_pmcdra.collect_type
 			LEFT JOIN (
 				SELECT
 				trade_name,
+				ware_house_type,
 				SUM(current_inventory) AS allCurrentInventory
 				FROM psi_management_warehouse_detailed
 				WHERE del_flag = 0
-				GROUP BY trade_name
-			) all_stock ON a.trade_name = all_stock.trade_name
+				GROUP BY trade_name, ware_house_type
+			) all_stock ON a.trade_name = all_stock.trade_name AND a.ware_house_type = all_stock.ware_house_type
 			LEFT JOIN (
 				SELECT
 					pwd.trade_name,
+					pwd.ware_house_type,
 					SUM(pwd.trade_number) AS trade_number
 				FROM psi_management_warehouse_detailed pwd
 				left join psi_management_warehouse_basics pmcba on pwd.basic_id = pmcba.id and pmcba.del_flag = 0
@@ -264,11 +271,12 @@
 					<if test=" dto != null and dto.dateRange != null and dto.dateRange.length == 2">
 						and pmcba.ware_house_date &gt;= #{dto.dateRange[0]} AND pmcba.ware_house_date &lt;= #{dto.dateRange[1]}
 					</if>
-					GROUP BY pwd.trade_name
-			) his_detail ON a.trade_name = his_detail.trade_name
+					GROUP BY pwd.trade_name, pwd.ware_house_type
+			) his_detail ON a.trade_name = his_detail.trade_name AND a.ware_house_type = his_detail.ware_house_type
 			LEFT JOIN (
 				SELECT
 					ab.trade_name,
+					ab.ware_house_type,
 					SUM(ab.trade_number) AS trade_number
 				FROM psi_management_warehouse_detailed ab
 				left join psi_management_warehouse_basics pmcba on ab.basic_id = pmcba.id and pmcba.del_flag = 0
@@ -276,8 +284,8 @@
 				<if test="dto != null and dto.dateRange != null and dto.dateRange.length == 2">
 					and pmcba.ware_house_date  &gt;= #{dto.dateRange[1]}
 				</if>
-				GROUP BY ab.trade_name
-			) after_pmwd ON a.trade_name = after_pmwd.trade_name
+				GROUP BY ab.trade_name, ab.ware_house_type
+			) after_pmwd ON a.trade_name = after_pmwd.trade_name AND a.ware_house_type = after_pmwd.ware_house_type
 				LEFT JOIN psi_management_warehouse_basics bas on a.basic_id = bas.id
 				left join psi_management_type c on a.ware_house_type = c.id
 			${ew.customSqlSegment}
@@ -428,7 +436,7 @@
 			a.collect_date,
 			b.goods_name,
 			b.collect_number,
-			pmwd.current_inventory,
+			b.current_inventory,
 			pmwd.spec,
 			pmcdr.not_surplus_stock as notSurplusStock,
 			b.collect_type as collectType

+ 79 - 50
jeeplus-modules/jeeplus-psi-management/src/main/java/com/jeeplus/psimanage/psiWareHouse/service/PsiWareHouseBasicService.java

@@ -48,6 +48,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.ZoneId;
 import java.time.temporal.ChronoUnit;
@@ -129,6 +130,11 @@ public class PsiWareHouseBasicService {
             queryWrapper.eq("b.trade_name", dto.getTradeName());
         }
 
+
+        if (StringUtils.isNotEmpty(dto.getWareHouseType())) {
+            queryWrapper.eq("b.ware_house_type", dto.getWareHouseType());
+        }
+
         if (StringUtils.isNotEmpty(dto.getWareHouseNumber())) {
             queryWrapper.eq("a.ware_house_number", dto.getWareHouseNumber());
         }
@@ -172,6 +178,11 @@ public class PsiWareHouseBasicService {
             queryWrapper.eq("a.collect_no", dto.getCollectNo());
         }
 
+
+        if (StringUtils.isNotEmpty(dto.getWareHouseType())) {
+            queryWrapper.eq("b.ware_house_type", dto.getWareHouseType());
+        }
+
         String[] collectDates = dto.getCollectDates();
         if (collectDates != null) {
 
@@ -179,11 +190,11 @@ public class PsiWareHouseBasicService {
         }
         IPage<PsiWareHouseDto> iPage = basicMapper.collectHistoryList(page, queryWrapper);
         //根据时间查询当前库存
-        //iPage.getRecords().stream().forEach(i->{
-        //    //根据商品名称,物品类型,时间查当前库存
-        //    String d = basicMapper.getCollectInfoByTime(i.getGoodsName(),i.getCollectType(),i.getDateTest2());
-        //    i.setCurrentInventory(d);
-        //});
+        iPage.getRecords().stream().forEach(i->{
+            //根据商品名称,物品类型,时间查当前库存
+            String d = basicMapper.getCollectInfoByTime(i.getGoodsName(),i.getCollectType(),i.getDateTest2());
+            i.setCurrentInventory(d);
+        });
         return iPage;
     }
 
@@ -1054,22 +1065,40 @@ public class PsiWareHouseBasicService {
                 item.setLossNumber("0");
             }
 
-            if (StringUtils.isNotBlank(item.getNotSurplusStock())) {
+            /*if (StringUtils.isNotBlank(item.getNotSurplusStock())) {
                 String notSurplusStockStr = item.getNotSurplusStock();
                 String specStr = item.getSpec();
 
                 if (StringUtils.isBlank(notSurplusStockStr) || StringUtils.isBlank(specStr)) {
                     item.setNotSurplusStock(item.getNotSurplusStock());
                 }else{
-                    double notSurplusStock = Double.parseDouble(notSurplusStockStr);
-                    double spec = Double.parseDouble(specStr);
+                    BigDecimal notSurplusStockBD = new BigDecimal(notSurplusStockStr);
+                    BigDecimal specBD = new BigDecimal(specStr);
 
-                    if (spec == 0) {
+                    if (specBD.compareTo(BigDecimal.ZERO) == 0) {
                         item.setNotSurplusStock(item.getNotSurplusStock());
                     }else{
-                        double total = notSurplusStock / spec;
-                        String totalStr = String.valueOf( total);
-                        item.setNotSurplusStock(totalStr);
+                        BigDecimal totalBD = notSurplusStockBD.divide(specBD, 4, RoundingMode.HALF_UP).stripTrailingZeros();
+                        item.setNotSurplusStock(totalBD.toPlainString());
+                    }
+                }
+            }*/
+
+            if (StringUtils.isNotBlank(item.getBorrowNumber())) {
+                String notSurplusStockStr = item.getBorrowNumber();
+                String specStr = item.getSpec();
+
+                if (StringUtils.isBlank(notSurplusStockStr) || StringUtils.isBlank(specStr)) {
+                    item.setBorrowNumber(item.getBorrowNumber());
+                }else{
+                    BigDecimal notSurplusStockBD = new BigDecimal(notSurplusStockStr);
+                    BigDecimal specBD = new BigDecimal(specStr);
+
+                    if (specBD.compareTo(BigDecimal.ZERO) == 0) {
+                        item.setBorrowNumber(item.getBorrowNumber());
+                    }else{
+                        BigDecimal totalBD = notSurplusStockBD.divide(specBD, 4, RoundingMode.HALF_UP).stripTrailingZeros();
+                        item.setBorrowNumber(totalBD.toPlainString());
                     }
                 }
             }
@@ -1081,52 +1110,52 @@ public class PsiWareHouseBasicService {
                 if (StringUtils.isBlank(specStr)) {
                     item.setLossNumber(item.getLossNumber());
                 }else{
-                    double spec = Double.parseDouble(specStr);
-                    double lossNumber = Double.parseDouble(lossNumberStr);
-                    if (spec == 0) {
+                    BigDecimal specBD = new BigDecimal(specStr);
+                    BigDecimal lossNumberBD = new BigDecimal(lossNumberStr);
+                    if (specBD.compareTo(BigDecimal.ZERO) == 0) {
                         item.setLossNumber(item.getLossNumber());
                     }else{
-                        double total = lossNumber / spec;
-                        String totalStr = String.valueOf( total);
-                        item.setLossNumber(totalStr);
+                        BigDecimal totalBD = lossNumberBD.divide(specBD, 4, RoundingMode.HALF_UP).stripTrailingZeros();
+                        item.setLossNumber(totalBD.toPlainString());
                     }
                 }
             }
 
             // 历史库存
             if(StringUtils.isNotBlank(item.getTradeNumber()) && dateRange != null && dateRange.length == 2){
-                double spec = StringUtils.isNotBlank(item.getSpec())
-                        ? Double.parseDouble(item.getSpec()) : 0;
-
-                double allCurrentInventory = StringUtils.isNotBlank(item.getAllCurrentInventory())
-                        ? Double.parseDouble(item.getAllCurrentInventory()) : 0;
-
-                double notSurplusStock = StringUtils.isNotBlank(item.getNotSurplusStock())
-                        ? Double.parseDouble(item.getNotSurplusStock()) : 0;
-
-                double lossNumber = StringUtils.isNotBlank(item.getLossNumber())
-                        ? Double.parseDouble(item.getLossNumber()) : 0;
-
-                double tradeNumber = StringUtils.isNotBlank(item.getAllNumber())
-                        ? Double.parseDouble(item.getAllNumber()) : 0;
-
-
-                //日期范围之后的领用数据
-                double afterNotSurplusStock = StringUtils.isNotBlank(item.getAfterNotSurplusStock())
-                        ? Double.parseDouble(item.getAfterNotSurplusStock()) : 0;
-                //日期范围之后的报损数据
-                double afterLossNumber = StringUtils.isNotBlank(item.getAfterLossNumber())
-                        ? Double.parseDouble(item.getAfterLossNumber()) : 0;
-                //日期范围之后的入库数据
-                double afterTradeNumber = StringUtils.isNotBlank(item.getAfterTradeNumber())
-                        ? Double.parseDouble(item.getAfterTradeNumber()) : 0;
-
                 //计算历史库存时,需要对时间范围之后的入库,领用,报损进行处理
-                double historyInventory = allCurrentInventory - tradeNumber + notSurplusStock + lossNumber - afterTradeNumber + (afterNotSurplusStock/spec)  + (afterLossNumber/spec);
-                if(historyInventory < 0){
-                    historyInventory = 0;
+                //当前库存
+                BigDecimal bdCurrentInv = new BigDecimal(item.getAllCurrentInventory() != null ? item.getAllCurrentInventory() : "0");
+                //当月入库
+                BigDecimal bdTradeNum = new BigDecimal(item.getAllNumber() != null ? item.getAllNumber() : "0");
+                //当月领取
+                //BigDecimal bdNotSurplus = new BigDecimal(item.getNotSurplusStock() != null ? item.getNotSurplusStock() : "0");
+                //当月领取
+                BigDecimal borrowNumber = new BigDecimal(item.getBorrowNumber() != null ? item.getBorrowNumber() : "0");
+                //当月报损
+                BigDecimal bdLoss = new BigDecimal(item.getLossNumber() != null ? item.getLossNumber() : "0");
+                //日期范围之后的入库数据
+                BigDecimal bdAfterTrade = new BigDecimal(item.getAfterTradeNumber() != null ? item.getAfterTradeNumber() : "0");
+                //日期范围之后的无剩余库存
+                BigDecimal bdAfterNotSurplus = new BigDecimal(item.getAfterNotSurplusStock() != null ? item.getAfterNotSurplusStock() : "0");
+                //日期范围之后的报损数据
+                BigDecimal bdAfterLoss = new BigDecimal(item.getAfterLossNumber() != null ? item.getAfterLossNumber() : "0");
+                //规格
+                BigDecimal bdSpec = new BigDecimal(item.getSpec() != null && !item.getSpec().isEmpty() ? item.getSpec() : "0");
+                //历史库存 = 当前库存 - 入库 + 领取 + 报损 - 日期范围之后的入库数据 + 日期范围之后无剩余库存 + 日期范围之后的报损数据
+                BigDecimal historyInventoryBD;
+                if (bdSpec.compareTo(BigDecimal.ZERO) == 0) {
+                    historyInventoryBD = bdCurrentInv.subtract(bdTradeNum).add(borrowNumber).add(bdLoss).subtract(bdAfterTrade);
+                } else {
+                    historyInventoryBD = bdCurrentInv.subtract(bdTradeNum).add(borrowNumber).add(bdLoss).subtract(bdAfterTrade)
+                            .add(bdAfterNotSurplus.divide(bdSpec, 4, RoundingMode.HALF_UP))
+                            .add(bdAfterLoss.divide(bdSpec, 4, RoundingMode.HALF_UP));
+                }
+                historyInventoryBD = historyInventoryBD.setScale(4, RoundingMode.HALF_UP).stripTrailingZeros();
+                if(historyInventoryBD.compareTo(BigDecimal.ZERO) < 0){
+                    historyInventoryBD = BigDecimal.ZERO;
                 }
-                item.setHisTradeNumber(String.valueOf(historyInventory));
+                item.setHisTradeNumber(historyInventoryBD.toPlainString());
                 item.setDateRange(dateRange[0] + "至" + dateRange[1]);
             }else{
                 item.setHisTradeNumber("0");
@@ -1484,10 +1513,10 @@ public class PsiWareHouseBasicService {
     }
 
 
-    // 去除小数点后无效的0
+    // 四舍五入最多保留小数点后四位,并去除末尾无效的0
     public String convertByBigDecimal(String value) {
         BigDecimal bigDecimal = new BigDecimal(value);
-        BigDecimal res = bigDecimal.stripTrailingZeros();
+        BigDecimal res = bigDecimal.setScale(4, RoundingMode.HALF_UP).stripTrailingZeros();
         return res.toPlainString();
     }
 

+ 5 - 1
jeeplus-modules/jeeplus-psi-management/src/main/java/com/jeeplus/psimanage/psiWareHouse/service/dto/PsiWareSummaryExportDto.java

@@ -27,9 +27,13 @@ public class PsiWareSummaryExportDto {
     @ExcelProperty("当月入库")
     private String allNumber;
 
+    /*@ColumnWidth(15)
+    @ExcelProperty("当月领取")
+    private String notSurplusStock;*/
+
     @ColumnWidth(15)
     @ExcelProperty("当月领取")
-    private String notSurplusStock;
+    private String borrowNumber;
 
     @ColumnWidth(15)
     @ExcelProperty("当月报损")