Prechádzať zdrojové kódy

库存增加结存单价字段

yzc 1 rok pred
rodič
commit
2b3a3ab6ce

+ 12 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/MyPurchaseServiceImpl.java

@@ -76,4 +76,16 @@ public class MyPurchaseServiceImpl implements MyPurchaseService {
         ArrivalDetailPo arrivalDetailPo = BeanUtil.copyProperties(arrivalDetail, ArrivalDetailPo.class);
         return arrivalDetailPo;
     }
+
+    @Override
+    public List<ArrivalDetailPo> getArrivalDetailList(List<Long> ids) {
+        List<ArrivalDetail> arrivalDetailList = arrivalDetailService.list(q -> q.in(ArrivalDetail::getId, ids));
+        return BeanUtil.copyToList(arrivalDetailList, ArrivalDetailPo.class);
+    }
+
+    @Override
+    public List<PurchaseDetailPo> getPurchaseDetailList(List<Long> ids) {
+        List<PurchaseDetail> arrivalDetailList = purchaseDetailService.list(q -> q.in(PurchaseDetail::getId, ids));
+        return BeanUtil.copyToList(arrivalDetailList, PurchaseDetailPo.class);
+    }
 }

+ 9 - 7
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockWaitController.java

@@ -1,16 +1,19 @@
 package com.fjhx.wms.controller.stock;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.wms.entity.stock.vo.StockWaitVo;
-import com.fjhx.wms.entity.stock.dto.StockWaitSelectDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDto;
-import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.wms.entity.stock.dto.StockWaitSelectDto;
+import com.fjhx.wms.entity.stock.vo.StockWaitVo;
 import com.fjhx.wms.service.stock.StockWaitService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 
 /**
@@ -74,10 +77,9 @@ public class StockWaitController {
      */
     @PostMapping("/addByWdly")
     public void addByWdly(@RequestBody StockWaitDto stockWaitDto) {
-        stockWaitService.addByWdly(stockWaitDto);
+        stockWaitService.add1(stockWaitDto);
     }
 
-
     /**
      * 待出入库编辑
      */

+ 1 - 1
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/Stock.java

@@ -43,6 +43,6 @@ public class Stock extends BasePo {
     /**
      * 结存单价
      */
-    private BigDecimal unitPriceOfBalance;
+    private BigDecimal unitPrice;
 
 }

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

@@ -106,11 +106,6 @@ public class StockVo extends Stock {
     private BigDecimal defectiveQuantity;
 
     /**
-     * 结存单价
-     */
-    private BigDecimal unitPrice;
-
-    /**
      * 产品分类名称列表
      */
     private List<String> productClassifyNameGroup;

+ 11 - 0
hx-wms/src/main/java/com/fjhx/wms/service/MyPurchaseService.java

@@ -4,6 +4,7 @@ import com.fjhx.wms.entity.arrival.po.ArrivalDetailPo;
 import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
 import com.fjhx.wms.entity.purchase.po.PurchasePo;
 
+import java.util.List;
 import java.util.Map;
 
 public interface MyPurchaseService {
@@ -27,4 +28,14 @@ public interface MyPurchaseService {
      * 获取到货明细信息
      */
     ArrivalDetailPo getArrivalDetailInfo(Long id);
+
+    /**
+     * 获取到货明细列表
+     */
+    List<ArrivalDetailPo> getArrivalDetailList(List<Long> ids);
+
+    /**
+     * 获取采购明细列表
+     */
+    List<PurchaseDetailPo> getPurchaseDetailList(List<Long> ids);
 }

+ 1 - 1
hx-wms/src/main/java/com/fjhx/wms/service/monthly/impl/MonthlyInventoryReportServiceImpl.java

@@ -128,7 +128,7 @@ public class MonthlyInventoryReportServiceImpl extends ServiceImpl<MonthlyInvent
                 monthlyInventoryReport.setBalanceQuantity(stock.getQuantity());//结存数量
             }
             monthlyInventoryReport.setBalanceUnitPrice(BigDecimal.ZERO);//结存单价
-            BigDecimal unitPriceOfBalance = stock.getUnitPriceOfBalance();
+            BigDecimal unitPriceOfBalance = stock.getUnitPrice();
             if (ObjectUtil.isNotEmpty(unitPriceOfBalance)) {
                 monthlyInventoryReport.setBalanceUnitPrice(unitPriceOfBalance);//结存单价
             }

+ 2 - 2
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockWaitService.java

@@ -45,9 +45,9 @@ public interface StockWaitService extends BaseService<StockWait> {
     void add(StockWaitDetailsDto stockWaitDetailsDto);
 
     /**
-     * 待出入库新增 维多利亚
+     * 待出入库新增
      */
-    void addByWdly(StockWaitDto stockWaitDto);
+    void add1(StockWaitDto stockWaitDto);
 
     /**
      * 待出入库编辑

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

@@ -93,7 +93,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
             item.setProductDefinition(productInfo.getDefinition());
             item.setProductCustomCode(productInfo.getCustomCode());
             //赋值结存单价
-            item.setUnitPrice(productInfo.getUnitPrice());
+//            item.setUnitPrice(productInfo.getUnitPrice());
         });
         //赋值产品分类
         productClassifyService.attributeAssign(stockVos, StockVo::getProductClassifyId, (item, productClassify) -> {

+ 5 - 1
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitDetailsServiceImpl.java

@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -116,6 +117,7 @@ public class StockWaitDetailsServiceImpl extends ServiceImpl<StockWaitDetailsMap
         List<Long> swdIds = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
         Map<Long, StockWaitDetails> stockWaitDetailsMap = this.mapKEntity(StockWaitDetails::getId, q -> q.in(StockWaitDetails::getId, swdIds));
 
+        List<StockWaitDetails> newStockWaitDetailsList = new ArrayList<>();
         for (StockWaitDetailsDto stockWaitDetailsDto : stockWaitDetailsDtoList1) {
             //更新已入库数量 根据明细id
             StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(stockWaitDetailsDto.getId());
@@ -131,8 +133,10 @@ public class StockWaitDetailsServiceImpl extends ServiceImpl<StockWaitDetailsMap
             } else {
                 stockWaitDetails.setStatus(1);
             }
-            updateById(stockWaitDetails);
+
+            newStockWaitDetailsList.add(stockWaitDetails);
         }
+        updateBatchById(newStockWaitDetailsList);
 
         //更新待出库记录状态
         int statusFlag = 0;

+ 60 - 2
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitServiceImpl.java

@@ -12,8 +12,10 @@ import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.wms.entity.arrival.po.ArrivalDetailPo;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecords;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecordsDetails;
+import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
 import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDto;
@@ -213,7 +215,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         StockWaitDto stockWaitDto = BeanUtil.copyProperties(stockWaitDetailsDto, StockWaitDto.class);
         stockWaitDto.setId(stockWaitDetails.getStockWaitId());
         stockWaitDto.setStockWaitDetailsList(Collections.singletonList(BeanUtil.copyProperties(stockWaitDetailsDto, StockWaitDetails.class)));
-        this.addByWdly(stockWaitDto);
+        this.add1(stockWaitDto);
 
         //如果是采购退货 修改采购退货状态
         StockWait stockWait = this.getById(stockWaitDto.getId());
@@ -226,7 +228,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
 
     @DSTransactional
     @Override
-    public void addByWdly(StockWaitDto stockWaitDto) {
+    public void add1(StockWaitDto stockWaitDto) {
         Assert.notEmpty(stockWaitDto.getId(), "待出入库id不能为空");
         Assert.notEmpty(stockWaitDto.getWarehouseId(), "仓库id不能为空");
 
@@ -245,6 +247,62 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         stockWait.setVictoriatouristJson(JSONObject.toJSONString(json, JSONWriter.Feature.WriteLongAsString));
         updateById(stockWait);
 
+        //如果业务类型是 采购到货入库 计算结存单价[结存单价=(结存单价*库存数量+采购单价*入库数量)/(库存数量+入库数量)]
+        if (StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType().equals(stockWait.getBusinessType())) {
+            //获取待入库明细信息
+            List<Long> swdId = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
+            List<StockWaitDetails> oldStockWaitDetailsList = stockWaitDetailsService.listByIds(swdId);
+            Map<Long, StockWaitDetails> oldStockWaitDetailsMap = oldStockWaitDetailsList.stream()
+                    .collect(Collectors.toMap(StockWaitDetails::getId, Function.identity()));
+
+            List<Long> productIds = oldStockWaitDetailsList.stream().map(StockWaitDetails::getProductId).collect(Collectors.toList());
+            //获取库存消息
+            Map<Long, Stock> stockMap = stockService.mapKEntity(Stock::getProductId, q -> q
+                    .eq(Stock::getWarehouseId, stockWaitDto.getWarehouseId())
+                    .in(Stock::getProductId, productIds));
+            //获取到货明细信息
+            List<Long> arrivalDetailsIds = oldStockWaitDetailsList.stream().map(StockWaitDetails::getBusinessDetailsId).collect(Collectors.toList());
+            List<ArrivalDetailPo> arrivalDetailList = myPurchaseService.getArrivalDetailList(arrivalDetailsIds);
+            Assert.notEmpty(arrivalDetailList, "到货明细信息为空");
+            Map<Long, ArrivalDetailPo> arrivalDetailPoMap = arrivalDetailList.stream().collect(Collectors.toMap(ArrivalDetailPo::getId, Function.identity()));
+            //获取采购明细信息
+            List<Long> purchaseDetailIds = arrivalDetailList.stream().map(ArrivalDetailPo::getPurchaseDetailId).collect(Collectors.toList());
+            List<PurchaseDetailPo> purchaseDetailList = myPurchaseService.getPurchaseDetailList(purchaseDetailIds);
+            Assert.notEmpty(arrivalDetailList, "采购明细信息为空");
+            Map<Long, PurchaseDetailPo> purchaseDetailPoMap = purchaseDetailList.stream().collect(Collectors.toMap(PurchaseDetailPo::getId, Function.identity()));
+
+            List<Stock> stockList1 = new ArrayList<>();
+            for (StockWaitDetails stockWaitDetails : stockWaitDetailsDtoList) {
+                StockWaitDetails oldStockWaitDetails = oldStockWaitDetailsMap.get(stockWaitDetails.getId());
+                Assert.notEmpty(oldStockWaitDetails, "查询不到待入库明细信息");
+                //获取到货信息
+                ArrivalDetailPo arrivalDetailPo = arrivalDetailPoMap.get(oldStockWaitDetails.getBusinessDetailsId());
+                Assert.notEmpty(arrivalDetailPo, "查询不到到货明细信息");
+                //获取采购信息
+                PurchaseDetailPo purchaseDetailPo = purchaseDetailPoMap.get(arrivalDetailPo.getPurchaseDetailId());
+                Assert.notEmpty(arrivalDetailPo, "查询不到采购明细信息");
+                //获取库存信息
+                Stock stock = stockMap.get(oldStockWaitDetails.getProductId());
+                if (ObjectUtil.isEmpty(stock)) {
+                    stock = new Stock();
+                    stock.setWarehouseId(stockWaitDto.getWarehouseId());
+                    stock.setProductId(oldStockWaitDetails.getProductId());
+                    stock.setQuantity(BigDecimal.ZERO);
+                    stock.setUnitPrice(BigDecimal.ZERO);
+                }
+                //计算结存单价 结存单价=(结存单价*库存数量+采购单价*入库数量)/(库存数量+入库数量)
+                BigDecimal multiply = stock.getUnitPrice().multiply(stock.getQuantity());//结存单价*库存数量
+                BigDecimal multiply1 = purchaseDetailPo.getPrice().multiply(stockWaitDetails.getQuantity());//采购单价*入库数量
+                BigDecimal add = multiply.add(multiply1);//(结存单价*库存数量+采购单价*入库数量)
+                BigDecimal add1 = stock.getQuantity().add(stockWaitDetails.getQuantity());//库存数量+入库数量
+                BigDecimal divide = add.divide(add1, 4, BigDecimal.ROUND_HALF_UP);//(结存单价*库存数量+采购单价*入库数量)/(库存数量+入库数量)
+                stock.setUnitPrice(divide);
+
+                stockList1.add(stock);
+            }
+            stockService.saveOrUpdateBatch(stockList1);
+        }
+
         //操作库存
         List<Long> swdIds = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
         Map<Long, StockWaitDetails> oldStockWaitDetailsMap = stockWaitDetailsService.mapKEntity(StockWaitDetails::getId, q -> q.in(StockWaitDetails::getId, swdIds));

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

@@ -2,20 +2,19 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.wms.mapper.stock.StockMapper">
     <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockVo">
-        SELECT
-            s.id,
-            pi.definition,
-            s.warehouse_id,
-            s.product_id,
-            s.quantity,
-            s.create_user,
-            s.create_time,
-            s.update_user,
-            s.update_time,
-            s.victoriatourist_json
-        FROM
-            stock s
-                LEFT JOIN bytesailing_item.product_info pi ON s.product_id = pi.id
+        SELECT s.id,
+               pi.definition,
+               s.warehouse_id,
+               s.product_id,
+               s.quantity,
+               s.create_user,
+               s.create_time,
+               s.update_user,
+               s.update_time,
+               s.victoriatourist_json,
+               s.unit_price
+        FROM stock s
+                 LEFT JOIN bytesailing_item.product_info pi ON s.product_id = pi.id
             ${ew.customSqlSegment}
     </select>
     <select id="pageByProduct" resultType="com.fjhx.wms.entity.stock.vo.StockVo">