Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

‘linchangsheng’ 3 tygodni temu
rodzic
commit
c97554bdd1

+ 24 - 7
mall-server-api/src/main/java/com/gree/mall/manager/controller/material/stock/WebsitStockController.java

@@ -7,12 +7,11 @@ import com.gree.mall.manager.bean.listvo.material.WebsitStockAccPVO;
 import com.gree.mall.manager.bean.listvo.material.WebsitStockAccVO;
 import com.gree.mall.manager.bean.listvo.material.WebsitStockPVO;
 import com.gree.mall.manager.bean.listvo.material.WebsitStockVO;
-import com.gree.mall.manager.bean.material.base.MaterialCategoryVO;
-import com.gree.mall.manager.bean.material.base.WebsitGoodsMVO;
+import com.gree.mall.manager.constant.Constant;
 import com.gree.mall.manager.enums.material.WebsitGoodsTypeEnum;
+import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.helper.ResponseHelper;
 import com.gree.mall.manager.logic.material.stock.WebsitStockLogic;
-import com.gree.mall.manager.plus.entity.WebsitStockAcc;
 import com.gree.mall.manager.utils.excel.ExcelUtils;
 import com.gree.mall.manager.zfire.bean.ZfireParamBean;
 import com.gree.mall.manager.zfire.util.FieldUtils;
@@ -20,6 +19,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.integration.redis.util.RedisLockRegistry;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -27,10 +27,13 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
 
 @Slf4j
 @RestController
@@ -41,6 +44,8 @@ public class WebsitStockController {
 
     @Autowired
     WebsitStockLogic websitStockLogic;
+    @Resource
+    RedisLockRegistry redisLockRegistry;
 
     @ZfireList
     @PostMapping("list")
@@ -93,10 +98,22 @@ public class WebsitStockController {
 
     @PostMapping("importM")
     @ApiOperation("辅材网点库存-导入(模板名称:辅材网点库存.xlsx)")
-    public ResponseHelper importData(MultipartFile file) throws IOException {
-        List<Object> objects = ExcelUtils.importExcel(file);
-        websitStockLogic.importData(objects, WebsitGoodsTypeEnum.M);
-        return ResponseHelper.success();
+    public ResponseHelper importData(MultipartFile file) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + 1);
+        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("导入冻结中");
+        }
+        try {
+            List<Object> objects = ExcelUtils.importExcel(file);
+            websitStockLogic.importData(objects, WebsitGoodsTypeEnum.M);
+            return ResponseHelper.success();
+        } catch (Exception e) {
+            log.error("【导入处理】失败", e);
+            throw e;
+        } finally {
+            obtain.unlock();
+        }
+
     }
 
 

+ 59 - 49
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/stock/WebsitStockLogic.java

@@ -26,6 +26,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -103,6 +104,7 @@ public class WebsitStockLogic {
      * 导入网点库存(各个商品只能导第一次)
      * @param datas
      */
+    @Transactional
     public void importData(List<Object> datas, WebsitGoodsTypeEnum websitGoodsTypeEnum){
         AdminUserCom adminUser = commonLogic.getAdminUser();
         List<WebsitStock> websitStocks = new ArrayList<>();
@@ -197,6 +199,15 @@ public class WebsitStockLogic {
             websitStockAccs.add(websitStockAcc);
         }
 
+        Map<String, List<WebsitStock>> stockGroupMap = websitStocks.stream().collect(Collectors.groupingBy(WebsitStock::getGoodsId));
+
+        for (Map.Entry<String, List<WebsitStock>> entry : stockGroupMap.entrySet()) {
+            if (entry.getValue().size() > 1) {
+                throw new RemoteServiceException(entry.getKey() + " 有重复的辅材编号");
+            }
+        }
+
+
         // 辅材价格表初始化
         if (websitGoodsTypeEnum.getKey().equals(WebsitGoodsTypeEnum.M.getKey())
                 && CollectionUtil.isNotEmpty(websitStocks)) {
@@ -241,64 +252,63 @@ public class WebsitStockLogic {
                     price.setRemark("初始化");
 
                     priceList.add(price);
-
-                    // 初始化采购明细
-                    WebsitPurchaseItem purchaseItem = new WebsitPurchaseItem();
-                    purchaseItem.setPurchaseId(purchaseId)
-                            .setCompanyWechatId(websitStocks.get(0).getCompanyWechatId())
-                            .setWebsitId(websitStocks.get(0).getWebsitId())
-                            .setWebsitName(websitStocks.get(0).getWebsitName())
-                            .setGoodsType(WebsitGoodsTypeEnum.M.getKey())
-                            .setGoodsId(stock.getGoodsId())
-                            .setGoodsName(stock.getGoodsName())
-                            .setApplyCost(stock.getLastCost())
-                            .setApplyCostValue(stock.getLastCost().multiply(stock.getQty()))
-                            .setApplyQty(stock.getQty())
-                            .setCheckQty(stock.getQty())
-                            .setCost(stock.getLastCost())
-                            .setCostValue(stock.getLastCost().multiply(stock.getQty()))
-                            .setRecQty(stock.getQty())
-                            .setNote("库存初始化")
-                            .setInStockQty(stock.getQty())
-                            .setInStockCost(stock.getLastCost());
-
-                    purchaseTotalAmount = purchaseTotalAmount.add(purchaseItem.getCostValue());
-
-                    purchaseItemList.add(purchaseItem);
                 }
-            }
 
-            if (CollectionUtil.isNotEmpty(priceList)) {
-                websitGoodsPriceService.saveBatch(priceList);
-            }
-
-            if (CollectionUtil.isNotEmpty(purchaseItemList)) {
-                // 初始化辅材采购入库
-                WebsitPurchase purchase = new WebsitPurchase();
-                purchase.setPurchaseId(purchaseId)
+                // 初始化采购明细
+                WebsitPurchaseItem purchaseItem = new WebsitPurchaseItem();
+                purchaseItem.setPurchaseId(purchaseId)
                         .setCompanyWechatId(websitStocks.get(0).getCompanyWechatId())
-                        .setCompanyWechatName(websitStocks.get(0).getCompanyWechatName())
                         .setWebsitId(websitStocks.get(0).getWebsitId())
                         .setWebsitName(websitStocks.get(0).getWebsitName())
                         .setGoodsType(WebsitGoodsTypeEnum.M.getKey())
-                        .setPurchaseTime(websitStocks.get(0).getCreateTime())
-                        .setVenderId("1010")
-                        .setVenderName("其他")
-                        .setFlag(ExamineStatusEnum.OK.getKey())
-                        .setIsRecheck(IsYesNoEnum.YES.getKey())
-                        .setConfirmRemark("库存初始化")
-                        .setStorageId(websitStocks.get(0).getStorageId())
-                        .setStorageName("默认")
-                        .setConfirmBy(adminUser.getNickName())
-                        .setConfirmTime(websitStocks.get(0).getCreateTime())
-                        .setCheckTime(websitStocks.get(0).getCreateTime())
-                        .setSubmitTime(websitStocks.get(0).getCreateTime())
-                        .setTotalAmount(purchaseTotalAmount);
-                websitPurchaseService.save(purchase);
-                websitPurchaseItemService.saveBatch(purchaseItemList);
+                        .setGoodsId(stock.getGoodsId())
+                        .setGoodsName(stock.getGoodsName())
+                        .setApplyCost(stock.getLastCost())
+                        .setApplyCostValue(stock.getLastCost().multiply(stock.getQty()))
+                        .setApplyQty(stock.getQty())
+                        .setCheckQty(stock.getQty())
+                        .setCost(stock.getLastCost())
+                        .setCostValue(stock.getLastCost().multiply(stock.getQty()))
+                        .setRecQty(stock.getQty())
+                        .setNote("库存初始化")
+                        .setInStockQty(stock.getQty())
+                        .setInStockCost(stock.getLastCost());
+
+                purchaseTotalAmount = purchaseTotalAmount.add(purchaseItem.getCostValue());
+
+                purchaseItemList.add(purchaseItem);
             }
 
+            if (CollectionUtil.isEmpty(purchaseItemList)) {
+                throw new RemoteServiceException("初始化采购明细失败");
+            }
+            // 初始化辅材采购入库
+            WebsitPurchase purchase = new WebsitPurchase();
+            purchase.setPurchaseId(purchaseId)
+                    .setCompanyWechatId(websitStocks.get(0).getCompanyWechatId())
+                    .setCompanyWechatName(websitStocks.get(0).getCompanyWechatName())
+                    .setWebsitId(websitStocks.get(0).getWebsitId())
+                    .setWebsitName(websitStocks.get(0).getWebsitName())
+                    .setGoodsType(WebsitGoodsTypeEnum.M.getKey())
+                    .setPurchaseTime(websitStocks.get(0).getCreateTime())
+                    .setVenderId("1010")
+                    .setVenderName("其他")
+                    .setFlag(ExamineStatusEnum.OK.getKey())
+                    .setIsRecheck(IsYesNoEnum.YES.getKey())
+                    .setConfirmRemark("库存初始化")
+                    .setStorageId(websitStocks.get(0).getStorageId())
+                    .setStorageName("默认")
+                    .setConfirmBy(adminUser.getNickName())
+                    .setConfirmTime(websitStocks.get(0).getCreateTime())
+                    .setCheckTime(websitStocks.get(0).getCreateTime())
+                    .setSubmitTime(websitStocks.get(0).getCreateTime())
+                    .setTotalAmount(purchaseTotalAmount);
+            websitPurchaseService.save(purchase);
+            websitPurchaseItemService.saveBatch(purchaseItemList);
 
+            if (CollectionUtil.isNotEmpty(priceList)) {
+                websitGoodsPriceService.saveBatch(priceList);
+            }
         }
         websitStockService.saveBatch(websitStocks);
         websitStockAccService.saveBatch(websitStockAccs);