Browse Source

库存数量修正

24282 1 year ago
parent
commit
95a6948d0e

+ 10 - 0
sd-business/src/main/java/com/sd/business/controller/inventory/InventoryController.java

@@ -3,6 +3,7 @@ package com.sd.business.controller.inventory;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.annotation.NonInterception;
 import com.ruoyi.common.annotation.NonInterception;
+import com.sd.business.entity.in.dto.CorrectionDto;
 import com.sd.business.entity.inventory.dto.GetQuantityDto;
 import com.sd.business.entity.inventory.dto.GetQuantityDto;
 import com.sd.business.entity.inventory.dto.InventorySelectDto;
 import com.sd.business.entity.inventory.dto.InventorySelectDto;
 import com.sd.business.entity.inventory.dto.QuantityByWarehouseDto;
 import com.sd.business.entity.inventory.dto.QuantityByWarehouseDto;
@@ -11,6 +12,7 @@ import com.sd.business.entity.inventory.vo.QuantityByDepartmentVo;
 import com.sd.business.entity.inventory.vo.QuantityByWarehouseVo;
 import com.sd.business.entity.inventory.vo.QuantityByWarehouseVo;
 import com.sd.business.service.inventory.InventoryService;
 import com.sd.business.service.inventory.InventoryService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
@@ -83,4 +85,12 @@ public class InventoryController {
         inventoryService.add(dto.getString("str"), dto.getLong("warehouseId"), dto.getLong("departmentId"));
         inventoryService.add(dto.getString("str"), dto.getLong("warehouseId"), dto.getLong("departmentId"));
     }
     }
 
 
+    /**
+     * 库存修正
+     */
+    @PostMapping("/correction")
+    public void correction(@Validated @RequestBody CorrectionDto dto) {
+        inventoryService.correction(dto);
+    }
+
 }
 }

+ 32 - 0
sd-business/src/main/java/com/sd/business/entity/in/dto/CorrectionDto.java

@@ -0,0 +1,32 @@
+package com.sd.business.entity.in.dto;
+
+import com.sd.business.entity.in.po.InOutStorageBom;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Getter
+@Setter
+public class CorrectionDto {
+
+    /**
+     * 仓库id
+     */
+    @NotNull(message = "仓库id不能为空")
+    private Long warehouseId;
+
+    /**
+     * 事业部id
+     */
+    @NotNull(message = "事业部id不能为空")
+    private Long departmentId;
+
+    @Valid
+    @NotEmpty(message = "物料信息不能为空")
+    private List<InOutStorageBom> inOutStorageBomList;
+
+}

+ 3 - 1
sd-business/src/main/java/com/sd/business/service/in/InOutStorageService.java

@@ -43,8 +43,10 @@ public interface InOutStorageService extends BaseService<InOutStorage> {
 
 
     /**
     /**
      * 查询bom消耗数量
      * 查询bom消耗数量
+     *
      * @param bomSpecId
      * @param bomSpecId
-     * @param days 天数
+     * @param days      天数
      */
      */
     BigDecimal getOutStorageQuantityByBomSpecIdAndDays(Long bomSpecId, Integer days);
     BigDecimal getOutStorageQuantityByBomSpecIdAndDays(Long bomSpecId, Integer days);
+
 }
 }

+ 6 - 0
sd-business/src/main/java/com/sd/business/service/inventory/InventoryService.java

@@ -2,6 +2,7 @@ package com.sd.business.service.inventory;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
 import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.in.dto.CorrectionDto;
 import com.sd.business.entity.inventory.bo.InOutFun;
 import com.sd.business.entity.inventory.bo.InOutFun;
 import com.sd.business.entity.inventory.dto.GetQuantityDto;
 import com.sd.business.entity.inventory.dto.GetQuantityDto;
 import com.sd.business.entity.inventory.dto.InventorySelectDto;
 import com.sd.business.entity.inventory.dto.InventorySelectDto;
@@ -74,4 +75,9 @@ public interface InventoryService extends BaseService<Inventory> {
      */
      */
     void add(String str, Long warehouseId, Long departmentId);
     void add(String str, Long warehouseId, Long departmentId);
 
 
+    /**
+     * 库存修正
+     */
+    void correction(CorrectionDto dto);
+
 }
 }

+ 68 - 0
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryServiceImpl.java

@@ -9,6 +9,8 @@ import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.bom.po.Bom;
 import com.sd.business.entity.bom.po.Bom;
 import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.bom.po.BomSpec;
+import com.sd.business.entity.in.dto.CorrectionDto;
+import com.sd.business.entity.in.po.InOutStorageBom;
 import com.sd.business.entity.in.po.InOutStorageDetails;
 import com.sd.business.entity.in.po.InOutStorageDetails;
 import com.sd.business.entity.inventory.bo.InOutFun;
 import com.sd.business.entity.inventory.bo.InOutFun;
 import com.sd.business.entity.inventory.dto.GetQuantityDto;
 import com.sd.business.entity.inventory.dto.GetQuantityDto;
@@ -27,6 +29,7 @@ import com.sd.framework.util.excel.util.ExcelUtil;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
@@ -246,6 +249,71 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
         }
         }
     }
     }
 
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void correction(CorrectionDto dto) {
+        List<InOutStorageBom> inOutStorageBomList = dto.getInOutStorageBomList();
+        List<Long> bomSpecIdList = inOutStorageBomList.stream().map(InOutStorageBom::getBomSpecId).collect(Collectors.toList());
+
+        List<Inventory> addInventoryList = new ArrayList<>();
+        List<Inventory> updateInventoryList;
+        List<InOutStorageDetails> addInOutStorageDetailsList = new ArrayList<>();
+
+        synchronized (this) {
+
+            updateInventoryList = getInventoryList(dto.getDepartmentId(), dto.getWarehouseId(), bomSpecIdList);
+            Map<Long, Inventory> map = updateInventoryList.stream().collect(Collectors.toMap(Inventory::getBomSpecId, Function.identity()));
+
+            for (InOutStorageBom inOutStorageBom : inOutStorageBomList) {
+                Long bomSpecId = inOutStorageBom.getBomSpecId();
+                BigDecimal quantity = inOutStorageBom.getQuantity();
+                Inventory inventory = map.get(bomSpecId);
+
+                InOutStorageDetails inOutStorageDetails = new InOutStorageDetails();
+                inOutStorageDetails.setWarehouseId(dto.getWarehouseId());
+                inOutStorageDetails.setDepartmentId(dto.getDepartmentId());
+                inOutStorageDetails.setBomSpecId(bomSpecId);
+                inOutStorageDetails.setQuantity(quantity);
+
+                if (inventory == null) {
+                    Inventory addInventory = new Inventory();
+                    addInventory.setWarehouseId(dto.getWarehouseId());
+                    addInventory.setDepartmentId(dto.getDepartmentId());
+                    addInventory.setBomSpecId(bomSpecId);
+                    addInventory.setQuantity(quantity);
+                    addInventory.setBalanceUnitPrice(BigDecimal.ZERO);
+                    addInventoryList.add(addInventory);
+
+                    inOutStorageDetails.setInUnitPrice(BigDecimal.ZERO);
+                } else {
+                    inventory.setQuantity(quantity);
+
+                    inOutStorageDetails.setInUnitPrice(inventory.getBalanceUnitPrice());
+                }
+
+                addInOutStorageDetailsList.add(inOutStorageDetails);
+            }
+
+            inOutStorageDetailsService.remove(q -> q
+                    .eq(InOutStorageDetails::getWarehouseId, dto.getWarehouseId())
+                    .eq(InOutStorageDetails::getDepartmentId, dto.getDepartmentId())
+                    .in(InOutStorageDetails::getBomSpecId, bomSpecIdList)
+            );
+
+            inOutStorageDetailsService.saveBatch(addInOutStorageDetailsList);
+
+            if (addInventoryList.size() > 0) {
+                saveBatch(addInventoryList);
+            }
+
+            if (updateInventoryList.size() > 0) {
+                updateBatchById(updateInventoryList);
+            }
+
+        }
+
+    }
+
     /**
     /**
      * 通过事业部id和出库id获取bom规格库存
      * 通过事业部id和出库id获取bom规格库存
      */
      */

+ 7 - 120
sd-starter/src/test/java/C2_SyncInventoryTest.java

@@ -41,132 +41,19 @@ public class C2_SyncInventoryTest {
     @Test
     @Test
     public void test() {
     public void test() {
 
 
-        String a = "204010100175 \t2\n" +
-                "204010100176 \t\n" +
-                "204010100184\t69\n" +
-                "204010100185\t54\n" +
-                "204010100186\t9\n" +
-                "204010100187\t55\n" +
-                "204010100189\t48\n" +
-                "204010100190\t93\n" +
-                "204010100191\t120\n" +
-                "204010100192\t152\n" +
-                "204010100193\t107\n" +
-                "204010100218\t1237\n" +
-                "204010100226\t51\n" +
-                "204010100251\t13\n" +
-                "204010100252\t9\n" +
-                "204010100253\t62\n" +
-                "204010100254\t11\n" +
-                "204010100255\t52\n" +
-                "204010100318\t\n" +
-                "204010100319\t\n" +
-                "204010100320\t30\n" +
-                "204010100339\t4\n" +
-                "204010100344\t74\n" +
-                "204010100347\t204\n" +
-                "204010100353\t270\n" +
-                "204010100402\t349\n" +
-                "204010100409\t333\n" +
-                "204010100410\t489\n" +
-                "204010100411\t561\n" +
-                "204010300025\t422\n" +
-                "204010300026\t\n" +
-                "204010300027\t\n" +
-                "204010300028\t\n" +
-                "204010300029\t\n" +
-                "204010300030\t560\n" +
-                "204010300031\t156\n" +
-                "204010300032\t856\n" +
-                "204010300058\t753\n" +
-                "204010300059\t269\n" +
-                "204010300061\t437\n" +
-                "204010300062\t503\n" +
-                "204010300063\t439\n" +
-                "204010300064\t1050\n" +
-                "204010300067\t\n" +
-                "204010300068\t539\n" +
-                "204010300069\t279\n" +
-                "204010400031\t67\n" +
-                "204010400032\t169\n" +
-                "204010400033\t150\n" +
-                "204010400034\t49\n" +
-                "204010400035\t137\n" +
-                "204010400078\t\n" +
-                "204010400089\t50\n" +
-                "204010400090\t125\n" +
-                "204010400092\t237\n" +
-                "204010400104\t19\n" +
-                "204010400111\t1\n" +
-                "204010400120\t45\n" +
-                "204010400121\t102\n" +
-                "204010400124\t32\n" +
-                "204010400125\t31\n" +
-                "204010400126\t3\n" +
-                "204010400127\t17\n" +
-                "204010400192\t2288\n" +
-                "204010400193\t378\n" +
-                "204010400194\t1487\n" +
-                "204010400195\t2627\n" +
-                "204010400196\t3860\n" +
-                "204010400197\t1974\n" +
-                "204010400198\t177\n" +
-                "204010400199\t261\n" +
-                "204010400200\t415\n" +
-                "204010400201\t670\n" +
-                "204010400202\t116\n" +
-                "204010400203\t700\n" +
-                "204010400204\t222\n" +
-                "204010400205\t1502\n" +
-                "204010400206\t683\n" +
-                "204010400207\t758\n" +
-                "204010400208\t369\n" +
-                "204010400209\t484\n" +
-                "204010400210\t639\n" +
-                "204010400211\t1674\n" +
-                "204010400212\t458\n" +
-                "204010400227\t585\n" +
-                "204010400228\t256\n" +
-                "204010400234\t97\n" +
-                "204010400250\t298\n" +
-                "204012300023\t210\n" +
-                "204012300024\t70\n" +
-                "204012300025\t239\n" +
-                "204012300027\t285\n" +
-                "204012300028\t51\n" +
-                "204060200002\t3\n" +
-                "2042103013\t0\n" +
-                "2042103022\t159\n" +
-                "2042103024\t104\n" +
-                "2042103025\t34\n" +
-                "2080101056\t176\n" +
-                "2080101057\t324\n" +
-                "2080101058\t669\n" +
-                "2080101059\t890\n" +
-                "2080101061\t232\n" +
-                "2080101062\t1061\n" +
-                "2080101063\t451\n" +
-                "2080101065\t34\n" +
-                "2080101066\t694\n" +
-                "2080101067\t446\n" +
-                "2080101068\t695\n" +
-                "2080101069\t24\n" +
-                "2080101070\t14\n" +
-                "2080101072\t505\n" +
-                "2080101082\t584\n" +
-                "2080101087\t421\n" +
-                "2080101089\t79\n" +
-                "2080101090\t872\n" +
-                "204010100243 \t7\n" +
-                "204010100239 \t3\n";
+        String a = "204010400192 1442\n" +
+                "204010400195 2170\n" +
+                "204010400198 6\n" +
+                "204010400193 926\n" +
+                "204010400196 4125\n" +
+                "204010400199 2";
 
 
         List<List<String>> list = Arrays.stream(a.split("\n"))
         List<List<String>> list = Arrays.stream(a.split("\n"))
-                .map(item -> Arrays.stream(item.split("\t")).filter(StrUtil::isNotBlank).collect(Collectors.toList()))
+                .map(item -> Arrays.stream(item.split(" ")).filter(StrUtil::isNotBlank).collect(Collectors.toList()))
                 .collect(Collectors.toList());
                 .collect(Collectors.toList());
 
 
         Map<String, Long> bomSpecMap = bomSpecService.mapKV(BomSpec::getCode, BaseIdPo::getId, null);
         Map<String, Long> bomSpecMap = bomSpecService.mapKV(BomSpec::getCode, BaseIdPo::getId, null);
 
 
-
         for (List<String> data : list) {
         for (List<String> data : list) {
 
 
             String code = data.get(0);
             String code = data.get(0);