24282 il y a 2 ans
Parent
commit
2f68a07bce

+ 2 - 0
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/enums/stock/OutTypeEnum.java

@@ -25,6 +25,8 @@ public enum OutTypeEnum {
     // ======== 手动出库明细 ========
 
     TRANSFER(7, "调仓出库"),
+    UNQUALIFIED_QUALITY_INSPECTION(8, "质检不合格出库"),
+
 
     ;
 

+ 4 - 2
hx-service/victoriatourist/src/main/java/com/fjhx/controller/quality/QualityDetailsController.java

@@ -9,6 +9,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * <p>
  * 质检明细 前端控制器
@@ -37,8 +39,8 @@ public class QualityDetailsController {
     // }
     //
     @PostMapping("/edit")
-    public R edit(@RequestBody QualityDetails qualityDetails) {
-        qualityDetailsService.edit(qualityDetails);
+    public R edit(@RequestBody List<QualityDetails> qualityDetailsList) {
+        qualityDetailsService.edit(qualityDetailsList);
         return R.success();
     }
     //

+ 1 - 1
hx-service/victoriatourist/src/main/java/com/fjhx/service/logistics/impl/LogisticsInfoServiceImpl.java

@@ -369,7 +369,7 @@ public class LogisticsInfoServiceImpl extends ServiceImpl<LogisticsInfoMapper, L
             // 添加发货数量
             logisticsDetail.setReceiptQuantity(receiptQuantity.add(bigDecimal));
         }
-        logisticsDetailsService.saveBatch(logisticsDetails);
+        logisticsDetailsService.updateBatchById(logisticsDetails);
 
         // 修改入库状态
         LogisticsInfo logisticsInfo = getById(logisticsInfoId);

+ 2 - 1
hx-service/victoriatourist/src/main/java/com/fjhx/service/quality/QualityDetailsService.java

@@ -5,6 +5,7 @@ import com.fjhx.base.BaseService;
 import com.fjhx.entity.quality.QualityDetails;
 import com.fjhx.params.quality.QualityDetailsVo;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -21,7 +22,7 @@ public interface QualityDetailsService extends BaseService<QualityDetails> {
 
     void add(QualityDetailsVo qualityDetailsVo);
 
-    void edit(QualityDetails qualityDetails);
+    void edit(List<QualityDetails> qualityDetailsList);
 
     void delete(QualityDetailsVo qualityDetailsVo);
 

+ 90 - 2
hx-service/victoriatourist/src/main/java/com/fjhx/service/quality/impl/QualityDetailsServiceImpl.java

@@ -1,15 +1,29 @@
 package com.fjhx.service.quality.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.BaseIdEntity;
 import com.fjhx.entity.quality.QualityDetails;
+import com.fjhx.entity.stock.Stock;
+import com.fjhx.enums.stock.OutTypeEnum;
 import com.fjhx.mapper.quality.QualityDetailsMapper;
 import com.fjhx.params.quality.QualityDetailsVo;
+import com.fjhx.params.stock.InStockAdd;
+import com.fjhx.params.stock.StockChangeVo;
 import com.fjhx.service.quality.QualityDetailsService;
+import com.fjhx.service.stock.StockService;
 import com.fjhx.utils.wrapperUtil.IWrapper;
+import org.springblade.core.log.exception.ServiceException;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -22,6 +36,9 @@ import java.util.Map;
 @Service
 public class QualityDetailsServiceImpl extends ServiceImpl<QualityDetailsMapper, QualityDetails> implements QualityDetailsService {
 
+    @Autowired
+    private StockService stockService;
+
     @Override
     public Page<QualityDetails> getPage(Map<String, Object> condition) {
 
@@ -36,10 +53,81 @@ public class QualityDetailsServiceImpl extends ServiceImpl<QualityDetailsMapper,
     }
 
     @Override
-    public void edit(QualityDetails qualityDetails) {
-        updateById(qualityDetails);
+    public synchronized void edit(List<QualityDetails> qualityDetailsList) {
+        List<Long> idList = qualityDetailsList.stream().map(BaseIdEntity::getId).collect(Collectors.toList());
+        List<QualityDetails> oldQualityDetailsList = listByIds(idList);
+        Map<Long, QualityDetails> oldMap = oldQualityDetailsList.stream().collect(Collectors.toMap(BaseIdEntity::getId, item -> item));
+
+        // 出库id
+        Long warehouseId = oldQualityDetailsList.get(0).getWarehouseId();
+        // map<产品id,库存变更数量>
+        Map<Long, BigDecimal> map = new HashMap<>();
+
+        List<InStockAdd.InStockAddDetails> list = new ArrayList<>();
+
+        for (QualityDetails qualityDetails : qualityDetailsList) {
+            QualityDetails oldQualityDetails = oldMap.get(qualityDetails.getId());
+
+            // 产品id
+            Long productInfoId = oldQualityDetails.getProductInfoId();
+
+            // 原合格数量
+            BigDecimal oldQualifiedQuantity = oldQualityDetails.getQualifiedQuantity();
+            // 现合格数量
+            BigDecimal qualifiedQuantity = qualityDetails.getQualifiedQuantity();
+
+            if (oldQualifiedQuantity.add(qualifiedQuantity).compareTo(oldQualityDetails.getTotalQuantity()) > 0) {
+                throw new ServiceException("合格数量加不合格数量不能大于需要质检的总数量");
+            }
+
+            // 原不合格数量
+            BigDecimal oldDisqualificationQuantity = oldQualityDetails.getDisqualificationQuantity();
+            // 现不合格数量
+            BigDecimal disqualificationQuantity = qualityDetails.getDisqualificationQuantity();
+            // 改变不合格数量
+            BigDecimal changeDisqualificationQuantity = disqualificationQuantity.subtract(oldDisqualificationQuantity);
+            // 改变不合格数量
+            if (changeDisqualificationQuantity.compareTo(BigDecimal.ZERO) > 0) {
+                InStockAdd.InStockAddDetails inStockAddDetails = new InStockAdd.InStockAddDetails();
+                inStockAddDetails.setBusinessId(oldQualityDetails.getId());
+                inStockAddDetails.setWarehouseId(oldQualityDetails.getWarehouseId());
+                inStockAddDetails.setGoodsId(productInfoId);
+                inStockAddDetails.setChangeQuantity(changeDisqualificationQuantity);
+                list.add(inStockAddDetails);
+            }
 
+            // 改变合格数量
+            BigDecimal changeQualifiedQuantity = oldQualifiedQuantity.subtract(qualifiedQuantity);
+            if (changeQualifiedQuantity.compareTo(BigDecimal.ZERO) > 0) {
+                BigDecimal bigDecimal = ObjectUtil.defaultIfNull(map.get(productInfoId), BigDecimal.ZERO);
+                map.put(productInfoId, bigDecimal.add(changeQualifiedQuantity));
+            }
 
+        }
+        // 质检不合格数量走出库,减少锁定库存
+        if (list.size() > 0) {
+            StockChangeVo stockChangeVo = new StockChangeVo();
+            stockChangeVo.setTypeEnum(OutTypeEnum.UNQUALIFIED_QUALITY_INSPECTION);
+            stockChangeVo.setDefaultRemarks("质检不合格出库");
+            stockChangeVo.setChangeDetailsList(list);
+            stockService.changeQuantity(stockChangeVo);
+        }
+        // 质检合格减少锁定库存,增加库存
+        if (map.size() > 0) {
+            List<Stock> stockList = stockService.list(q -> q.eq(Stock::getWarehouseId, warehouseId).in(Stock::getGoodsId, map.keySet()));
+            for (Stock stock : stockList) {
+                // 产品id
+                Long goodsId = stock.getGoodsId();
+                // 改变数量
+                BigDecimal bigDecimal = map.get(goodsId);
+                // 新增库存数量
+                stock.setQuantity(stock.getQuantity().add(bigDecimal));
+                // 减少锁定库存数量
+                stock.setFrozenQuantity(stock.getFrozenQuantity().subtract(bigDecimal));
+            }
+            stockService.updateBatchById(stockList);
+        }
+        updateBatchById(qualityDetailsList);
     }
 
     @Override

+ 8 - 3
hx-service/victoriatourist/src/main/java/com/fjhx/service/stock/impl/StockServiceImpl.java

@@ -13,6 +13,7 @@ import com.fjhx.entity.stock.Stock;
 import com.fjhx.entity.stock.StockJournal;
 import com.fjhx.entity.warehouse.Warehouse;
 import com.fjhx.enums.stock.InTypeEnum;
+import com.fjhx.enums.stock.OutTypeEnum;
 import com.fjhx.mapper.stock.StockMapper;
 import com.fjhx.params.stock.*;
 import com.fjhx.service.product.ProductCombinationService;
@@ -75,7 +76,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
     @Transactional(rollbackFor = Exception.class)
     @Override
     public List<StockJournal> changeQuantity(StockChangeVo stockChangeVo) {
-        Assert.notEmpty(stockChangeVo.getChangeDetailsList(), "变更数量数量列表为空");
+        Assert.notEmpty(stockChangeVo.getChangeDetailsList(), "变更数量列表为空");
         // 合并变更数量
         Map<String, Stock> map = mergeChangeQuantity(stockChangeVo);
         // 变更数量
@@ -97,8 +98,8 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         IWrapper<Object> wrapper = IWrapper.getWrapper(condition);
 
         wrapper.keyword(new KeywordData("w", Warehouse::getName),
-                new KeywordData("p", ProductInfo::getCode),
-                new KeywordData("p", ProductInfo::getName)
+                new KeywordData("pi", ProductInfo::getCode),
+                new KeywordData("pi", ProductInfo::getName)
         );
 
         return baseMapper.pageByWarehouse(condition.getPage(), wrapper);
@@ -187,6 +188,8 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
                 stock.setGoodsId(goodsId);
                 if (typeEnum.equals(InTypeEnum.PURCHASE)) {
                     stock.setFrozenQuantity(changeQuantity);
+                } else if (typeEnum.equals(OutTypeEnum.UNQUALIFIED_QUALITY_INSPECTION)) {
+                    stock.setFrozenQuantity(BigDecimal.ZERO);
                 } else {
                     stock.setQuantity(changeQuantity);
                 }
@@ -194,6 +197,8 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
             } else {
                 if (typeEnum.equals(InTypeEnum.PURCHASE)) {
                     stock.setFrozenQuantity(stock.getFrozenQuantity().add(changeQuantity));
+                } else if (typeEnum.equals(OutTypeEnum.UNQUALIFIED_QUALITY_INSPECTION)) {
+                    stock.setFrozenQuantity(stock.getFrozenQuantity().subtract(changeQuantity));
                 } else {
                     stock.setQuantity(stock.getQuantity().add(changeQuantity));
                 }