From 4dbf61c9189796ec46d39ac4b839cfc064e70411 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 12 八月 2021 16:11:16 +0800
Subject: [PATCH] Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity

---
 service-store/src/main/java/com/java110/store/bmo/collection/impl/ResourceOutBMOImpl.java |  124 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 117 insertions(+), 7 deletions(-)

diff --git a/service-store/src/main/java/com/java110/store/bmo/collection/impl/ResourceOutBMOImpl.java b/service-store/src/main/java/com/java110/store/bmo/collection/impl/ResourceOutBMOImpl.java
index 4e4d751..dab6229 100755
--- a/service-store/src/main/java/com/java110/store/bmo/collection/impl/ResourceOutBMOImpl.java
+++ b/service-store/src/main/java/com/java110/store/bmo/collection/impl/ResourceOutBMOImpl.java
@@ -1,20 +1,28 @@
 package com.java110.store.bmo.collection.impl;
 
 import com.java110.core.annotation.Java110Transactional;
-import com.java110.intf.common.IPurchaseApplyUserInnerServiceSMO;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.dto.resourceStore.ResourceStoreDto;
+import com.java110.dto.userStorehouse.UserStorehouseDto;
 import com.java110.intf.store.IPurchaseApplyDetailInnerServiceSMO;
+import com.java110.intf.store.IPurchaseApplyInnerServiceSMO;
 import com.java110.intf.store.IResourceStoreInnerServiceSMO;
+import com.java110.intf.store.IUserStorehouseInnerServiceSMO;
 import com.java110.po.purchase.PurchaseApplyDetailPo;
 import com.java110.po.purchase.PurchaseApplyPo;
 import com.java110.po.purchase.ResourceStorePo;
+import com.java110.po.userStorehouse.UserStorehousePo;
 import com.java110.store.bmo.collection.IResourceOutBMO;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
-
 
 @Service("resourceOutBMOImpl")
 public class ResourceOutBMOImpl implements IResourceOutBMO {
@@ -24,25 +32,127 @@
 
 
     @Autowired
-    private IPurchaseApplyUserInnerServiceSMO purchaseApplyUserInnerServiceSMOImpl;
-
-    @Autowired
     private IResourceStoreInnerServiceSMO resourceStoreInnerServiceSMOImpl;
 
+    @Autowired
+    private IUserStorehouseInnerServiceSMO userStorehouseInnerServiceSMOImpl;
+
+    @Autowired
+    private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
 
     @Override
     @Java110Transactional
     public ResponseEntity<String> out(PurchaseApplyPo purchaseApplyPo) {
-
+        PurchaseApplyDto purchaseApplyDto = new PurchaseApplyDto();
+        purchaseApplyDto.setApplyOrderId(purchaseApplyPo.getApplyOrderId());
+        List<PurchaseApplyDto> purchaseApplyDtos = purchaseApplyInnerServiceSMOImpl.queryPurchaseApplys(purchaseApplyDto);
+        Assert.listOnlyOne(purchaseApplyDtos, "鍑哄簱鍗曚笉瀛樺湪");
         List<PurchaseApplyDetailPo> purchaseApplyDetailPos = purchaseApplyPo.getPurchaseApplyDetailPos();
         for (PurchaseApplyDetailPo purchaseApplyDetailPo : purchaseApplyDetailPos) {
             purchaseApplyDetailInnerServiceSMOImpl.updatePurchaseApplyDetail(purchaseApplyDetailPo);
+            //鏌ヨ鐗╁搧璧勬簮淇℃伅
+            ResourceStoreDto resourceStore = new ResourceStoreDto();
+            resourceStore.setResId(purchaseApplyDetailPo.getResId());
+            List<ResourceStoreDto> resourceStores = resourceStoreInnerServiceSMOImpl.queryResourceStores(resourceStore);
+            Assert.listOnlyOne(resourceStores, "鏌ヨ鐗╁搧璧勬簮淇℃伅閿欒锛�");
             ResourceStorePo resourceStorePo = new ResourceStorePo();
             resourceStorePo.setResId(purchaseApplyDetailPo.getResId());
             resourceStorePo.setStock("-" + purchaseApplyDetailPo.getPurchaseQuantity());
+            resourceStorePo.setResOrderType(PurchaseApplyDto.RES_ORDER_TYPE_OUT);
+            //鑾峰彇鍘熺墿鍝佹渶灏忚閲忔�绘暟
+            if (StringUtil.isEmpty(resourceStores.get(0).getMiniStock())) {
+                throw new IllegalArgumentException("鏈�灏忚閲忔�绘暟涓嶈兘涓虹┖锛�");
+            }
+            BigDecimal miniStock1 = new BigDecimal(resourceStores.get(0).getMiniStock());
+            BigDecimal purchaseQuantity = new BigDecimal(purchaseApplyDetailPo.getPurchaseQuantity());
+            if (StringUtil.isEmpty(resourceStores.get(0).getMiniUnitStock())) {
+                throw new IllegalArgumentException("鏈�灏忚閲忓崟浣嶆暟閲忎笉鑳戒负绌猴紒");
+            }
+            //鑾峰彇鐗╁搧鏈�灏忚閲忓崟浣嶆暟閲�
+            BigDecimal miniUnitStock1 = new BigDecimal(resourceStores.get(0).getMiniUnitStock());
+            //璁$畻棰嗙敤鐗╁搧鐨勬渶灏忚閲忔�绘暟
+            BigDecimal applyQuantity = purchaseQuantity.multiply(miniUnitStock1);
+            //璁$畻鐗╁搧棰嗙敤鍚庡墿浣欑殑鏈�灏忚閲忔�绘暟
+            BigDecimal newMiniStock = miniStock1.subtract(applyQuantity);
+            if (newMiniStock.compareTo(BigDecimal.ZERO) == -1) {
+                throw new IllegalArgumentException("鐗╁搧搴撳瓨宸茬粡涓嶈冻锛岃纭鐗╁搧搴撳瓨锛�");
+            }
+            resourceStorePo.setMiniStock(String.valueOf(newMiniStock));
             resourceStoreInnerServiceSMOImpl.updateResourceStore(resourceStorePo);
+            ResourceStoreDto resourceStoreDto = new ResourceStoreDto();
+            resourceStoreDto.setResId(purchaseApplyDetailPo.getResId());
+            //鏌ヨ鐗╁搧璧勬簮
+            List<ResourceStoreDto> resourceStoreDtos = resourceStoreInnerServiceSMOImpl.queryResourceStores(resourceStoreDto);
+            if (resourceStoreDtos == null || resourceStoreDtos.size() < 1) {
+                continue;
+            }
+            //鑾峰彇鐗╁搧鍗曚綅
+            String unitCode = resourceStoreDtos.get(0).getUnitCode();
+            //鑾峰彇鐗╁搧鏈�灏忚閲忓崟浣�
+            String miniUnitCode = resourceStoreDtos.get(0).getMiniUnitCode();
+            //鑾峰彇鐗╁搧鏈�灏忚閲忓崟浣嶆暟閲�
+            String miniUnitStock = resourceStoreDtos.get(0).getMiniUnitStock();
+            //鍏ュ簱鍒颁釜浜轰粨搴撲腑
+            UserStorehousePo userStorehousePo = new UserStorehousePo();
+            userStorehousePo.setUsId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_usId));
+            userStorehousePo.setResId(resourceStoreDtos.get(0).getResId());
+            userStorehousePo.setResName(resourceStoreDtos.get(0).getResName());
+            userStorehousePo.setStoreId(resourceStoreDtos.get(0).getStoreId());
+            userStorehousePo.setUserId(purchaseApplyDtos.get(0).getUserId());
+            //鏌ヨ鐗╁搧 鏄惁宸茬粡瀛樺湪
+            UserStorehouseDto userStorehouseDto = new UserStorehouseDto();
+            userStorehouseDto.setResId(resourceStoreDtos.get(0).getResId());
+            userStorehouseDto.setUserId(purchaseApplyDtos.get(0).getUserId());
+            userStorehouseDto.setStoreId(resourceStoreDtos.get(0).getStoreId());
+            List<UserStorehouseDto> userStorehouseDtos = userStorehouseInnerServiceSMOImpl.queryUserStorehouses(userStorehouseDto);
+            if (userStorehouseDtos == null || userStorehouseDtos.size() < 1) {
+                userStorehousePo.setStock(purchaseApplyDetailPo.getPurchaseQuantity());
+                if (!StringUtil.isEmpty(unitCode) && !StringUtil.isEmpty(miniUnitCode) && !StringUtil.isEmpty(miniUnitStock) && !unitCode.equals(miniUnitCode)) {
+                    //鑾峰彇棰嗗彇鏁伴噺
+                    BigDecimal purchaseQuantity2 = new BigDecimal(purchaseApplyDetailPo.getPurchaseQuantity());
+                    BigDecimal miniUnitStock2 = new BigDecimal(miniUnitStock);
+                    //璁$畻涓汉鐗╁搧鏈�灏忚閲忔�绘暟
+                    BigDecimal quantity = purchaseQuantity2.multiply(miniUnitStock2);
+                    userStorehousePo.setMiniStock(String.valueOf(quantity));
+                } else {
+                    userStorehousePo.setMiniStock(purchaseApplyDetailPo.getPurchaseQuantity());
+                }
+                userStorehouseInnerServiceSMOImpl.saveUserStorehouses(userStorehousePo);
+            } else {
+                //鑾峰彇涓汉鐗╁搧棰嗙敤鍚庣殑搴撳瓨
+                BigDecimal purchaseQuantity3 = new BigDecimal(purchaseApplyDetailPo.getPurchaseQuantity());
+                BigDecimal stock3 = new BigDecimal(userStorehouseDtos.get(0).getStock());
+                BigDecimal total = purchaseQuantity3.add(stock3);
+                userStorehousePo.setStock(total.toString());
+                userStorehousePo.setUsId(userStorehouseDtos.get(0).getUsId());
+                if (!StringUtil.isEmpty(unitCode) && !StringUtil.isEmpty(miniUnitCode) && !StringUtil.isEmpty(miniUnitStock) && !unitCode.equals(miniUnitCode)) {
+                    //鑾峰彇鏈棰嗗彇鏁伴噺
+                    BigDecimal miniUnitStock3 = new BigDecimal(miniUnitStock);
+                    //璁$畻鏈棰嗗彇鐨勪釜浜虹墿鍝佹渶灏忚閲忔�绘暟
+                    BigDecimal quantity = purchaseQuantity3.multiply(miniUnitStock3);
+                    BigDecimal miniStock = new BigDecimal(0);
+                    //鑾峰彇涓汉鐗╁搧鍘熷厛鐨勬渶灏忚閲忔�绘暟
+                    if (StringUtil.isEmpty(userStorehouseDtos.get(0).getMiniStock())) {
+                        throw new IllegalArgumentException("淇℃伅閿欒锛屼釜浜虹墿鍝佹渶灏忚閲忔�绘暟涓嶈兘涓虹┖锛�");
+                    } else {
+                        miniStock = new BigDecimal(userStorehouseDtos.get(0).getMiniStock());
+                    }
+                    //璁$畻棰嗙敤鍚庝釜浜虹墿鍝佹�荤殑鏈�灏忚閲忔�绘暟
+                    BigDecimal miniQuantity = quantity.add(miniStock);
+                    userStorehousePo.setMiniStock(String.valueOf(miniQuantity));
+                } else {
+                    userStorehousePo.setMiniStock(String.valueOf(total));
+                }
+                userStorehouseInnerServiceSMOImpl.updateUserStorehouses(userStorehousePo);
+            }
         }
-
+        //鑾峰彇璁㈠崟鍙�
+        String applyOrderId = purchaseApplyPo.getApplyOrderId();
+        PurchaseApplyPo purchaseApply = new PurchaseApplyPo();
+        purchaseApply.setApplyOrderId(applyOrderId);
+        purchaseApply.setState(PurchaseApplyDto.STATE_AUDITED);
+        purchaseApply.setStatusCd("0");
+        purchaseApplyInnerServiceSMOImpl.updatePurchaseApply(purchaseApply);
         return ResultVo.createResponseEntity(ResultVo.CODE_OK, "鍑哄簱鎴愬姛");
     }
 }

--
Gitblit v1.8.0