Эх сурвалжийг харах

库存盘点添加结存单价计算

yzc 1 жил өмнө
parent
commit
d1513f2810

+ 3 - 1
hx-wms/src/main/java/com/fjhx/wms/entity/stock/emums/JournalType.java

@@ -28,7 +28,9 @@ public enum JournalType {
     PURCHASE_ARRIVAL_IN(InOutType.IN, 18, "待入库 采购到货", ""),
     ARRIVAL_QUALITY(InOutType.IN, 19, "到货质检", "quality_info"),
     PRODUCTION_TASK_OUT(InOutType.OUT, 20, "生产任务待出库出库", "production_task"),
-    WORD_ORDER_OUT(InOutType.OUT, 21, "工单出库待出库出库", "work_order")
+    WORD_ORDER_OUT(InOutType.OUT, 21, "工单出库待出库出库", "work_order"),
+    STOCK_CHECK_IN(InOutType.IN, 22, "库存盘点修正入库", "stock_check"),
+    STOCK_CHECK_OUT(InOutType.OUT, 23, "库存盘点修正出库", "stock_check")
     ;
 
 

+ 3 - 2
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockCheckDetails.java

@@ -6,6 +6,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
 
 /**
  * <p>
@@ -35,12 +36,12 @@ public class StockCheckDetails extends BasePo {
      * 库存数量
      */
     @NotNull(message = "库存数量不能为空")
-    private Long quantity;
+    private BigDecimal quantity;
 
     /**
      * 盘点数量
      */
     @NotNull(message = "盘点数量不能为空")
-    private Long checkQuantity;
+    private BigDecimal checkQuantity;
 
 }

+ 74 - 4
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockCheckServiceImpl.java

@@ -1,19 +1,25 @@
 package com.fjhx.wms.service.stock.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.wms.entity.stock.bo.InOutBo;
 import com.fjhx.wms.entity.stock.dto.StockCheckDto;
 import com.fjhx.wms.entity.stock.dto.StockCheckSelectDto;
+import com.fjhx.wms.entity.stock.emums.InOutType;
+import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.po.StockCheck;
 import com.fjhx.wms.entity.stock.po.StockCheckDetails;
+import com.fjhx.wms.entity.stock.po.StockJournal;
+import com.fjhx.wms.entity.stock.po.StockJournalDetails;
 import com.fjhx.wms.entity.stock.vo.StockCheckDetailsVo;
 import com.fjhx.wms.entity.stock.vo.StockCheckVo;
 import com.fjhx.wms.mapper.stock.StockCheckMapper;
-import com.fjhx.wms.service.stock.StockCheckDetailsService;
-import com.fjhx.wms.service.stock.StockCheckService;
+import com.fjhx.wms.service.stock.*;
 import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.fjhx.wms.utils.CodeEnum;
 import com.ruoyi.common.constant.StatusConstant;
@@ -23,6 +29,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
@@ -46,6 +55,14 @@ public class StockCheckServiceImpl extends ServiceImpl<StockCheckMapper, StockCh
 
     @Autowired
     private WarehouseService warehouseService;
+    @Autowired
+    private StockJournalService stockJournalService;
+    @Autowired
+    private StockJournalDetailsService stockJournalDetailsService;
+    @Autowired
+    private StockWaitService stockWaitService;
+    @Autowired
+    private StockService stockService;
 
     @Override
     public Page<StockCheckVo> getPage(StockCheckSelectDto dto) {
@@ -87,23 +104,76 @@ public class StockCheckServiceImpl extends ServiceImpl<StockCheckMapper, StockCh
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void add(StockCheckDto stockCheckDto) {
+    @DSTransactional
+    public synchronized void add(StockCheckDto stockCheckDto) {
 
         long stockCheckId = IdWorker.getId();
         List<StockCheckDetails> list = stockCheckDto.getList();
         int totalNum = 0, normalNum = 0, anomalyNum = 0;
 
+        Long warehouseId = stockCheckDto.getWarehouseId();
+
+
         for (StockCheckDetails stockCheckDetails : list) {
 
+            stockCheckDetails.setId(IdWorker.getId());
+
             totalNum++;
 
             if (Objects.equals(stockCheckDetails.getQuantity(), stockCheckDetails.getCheckQuantity())) {
                 normalNum++;
             } else {
                 anomalyNum++;
+
+                //盘点数和库存不一样 需要创建流水修正
+                if(stockCheckDetails.getQuantity().compareTo(stockCheckDetails.getCheckQuantity())>0){
+                    //盘亏 出库
+                    BigDecimal subtract = stockCheckDetails.getQuantity().subtract(stockCheckDetails.getCheckQuantity());
+
+                    //创建出库记录
+                    StockJournal stockJournal = new StockJournal();
+                    stockJournal.setOpType(2);
+                    stockJournal.setType(JournalType.STOCK_CHECK_OUT.getDetailType());
+                    stockJournal.setCode(CodeEnum.SOUT_CODE.getCode());
+                    stockJournal.setWarehouseId(warehouseId);
+                    stockJournal.setBusinessId(stockCheckId);;
+                    stockJournalService.save(stockJournal);
+                    //创建出库明细(并计算结存单价)
+                    StockJournalDetails stockJournalDetails = stockWaitService.calculateUnitPrice(InOutType.OUT, stockCheckDetails.getProductId(), warehouseId, subtract, 0, null);
+                    stockJournalDetails.setStockJournalId(stockJournal.getId());
+                    stockJournalDetails.setProductId(stockCheckDetails.getProductId());
+                    stockJournalDetails.setQuantity(subtract);
+                    stockJournalDetails.setBusinessDetailsId(stockCheckDetails.getId());
+                    stockJournalDetailsService.save(stockJournalDetails);
+                    //出库操作
+                    InOutBo inOutBo = new InOutBo(stockCheckDetails.getProductId(),subtract);
+                    stockService.changeStock(Collections.singletonList(inOutBo), warehouseId, JournalType.STOCK_CHECK_OUT);
+                }else{
+                    //盘盈 入库
+                    BigDecimal subtract = stockCheckDetails.getCheckQuantity().subtract(stockCheckDetails.getQuantity());
+
+                    //创建入库记录
+                    StockJournal stockJournal = new StockJournal();
+                    stockJournal.setOpType(1);
+                    stockJournal.setType(JournalType.STOCK_CHECK_IN.getDetailType());
+                    stockJournal.setCode(CodeEnum.SIN_CODE.getCode());
+                    stockJournal.setWarehouseId(warehouseId);
+                    stockJournal.setBusinessId(stockCheckId);;
+                    stockJournalService.save(stockJournal);
+                    //创建入库明细(并计算结存单价)
+                    StockJournalDetails stockJournalDetails = stockWaitService.calculateUnitPrice(InOutType.IN, stockCheckDetails.getProductId(), warehouseId, subtract, 0, null);
+                    stockJournalDetails.setStockJournalId(stockJournal.getId());
+                    stockJournalDetails.setProductId(stockCheckDetails.getProductId());
+                    stockJournalDetails.setQuantity(subtract);
+                    stockJournalDetails.setBusinessDetailsId(stockCheckDetails.getId());
+                    stockJournalDetailsService.save(stockJournalDetails);
+                    //入库操作
+                    InOutBo inOutBo = new InOutBo(stockCheckDetails.getProductId(),subtract);
+                    stockService.changeStock(Collections.singletonList(inOutBo), warehouseId, JournalType.STOCK_CHECK_IN);
+                }
             }
 
+
             stockCheckDetails.setStockCheckId(stockCheckId);
         }