|
@@ -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
|