Browse Source

维多利亚

24282 2 years ago
parent
commit
dcb4813d08

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

@@ -27,7 +27,6 @@ public enum OutTypeEnum {
     TRANSFER(7, "调仓出库"),
     UNQUALIFIED_QUALITY_INSPECTION(8, "质检不合格出库"),
 
-
     ;
 
     private final int key;

+ 40 - 24
hx-service/victoriatourist/src/main/java/com/fjhx/service/quality/impl/QualityDetailsServiceImpl.java

@@ -5,6 +5,7 @@ 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.quality.QualityInfo;
 import com.fjhx.entity.stock.Stock;
 import com.fjhx.enums.stock.OutTypeEnum;
 import com.fjhx.mapper.quality.QualityDetailsMapper;
@@ -12,11 +13,13 @@ 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.quality.QualityInfoService;
 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 org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -39,6 +42,9 @@ public class QualityDetailsServiceImpl extends ServiceImpl<QualityDetailsMapper,
     @Autowired
     private StockService stockService;
 
+    @Autowired
+    private QualityInfoService qualityInfoService;
+
     @Override
     public Page<QualityDetails> getPage(Map<String, Object> condition) {
 
@@ -52,6 +58,7 @@ public class QualityDetailsServiceImpl extends ServiceImpl<QualityDetailsMapper,
         save(qualityDetailsVo);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public synchronized void edit(List<QualityDetails> qualityDetailsList) {
         List<Long> idList = qualityDetailsList.stream().map(BaseIdEntity::getId).collect(Collectors.toList());
@@ -60,50 +67,58 @@ public class QualityDetailsServiceImpl extends ServiceImpl<QualityDetailsMapper,
 
         // 出库id
         Long warehouseId = oldQualityDetailsList.get(0).getWarehouseId();
+        // 质检id
+        Long qualityInfoId = oldQualityDetailsList.get(0).getQualityInfoId();
         // map<产品id,库存变更数量>
         Map<Long, BigDecimal> map = new HashMap<>();
-
+        // 不合格出库逻辑列表
         List<InStockAdd.InStockAddDetails> list = new ArrayList<>();
+        // 是否完成质检标记
+        boolean qualityFlag = true;
+        // 质检结果标记
+        boolean resultTypeFlag = true;
 
         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) {
+            BigDecimal disqualificationQuantity = qualityDetails.getDisqualificationQuantity();
+            if (disqualificationQuantity.compareTo(BigDecimal.ZERO) > 0) {
                 InStockAdd.InStockAddDetails inStockAddDetails = new InStockAdd.InStockAddDetails();
                 inStockAddDetails.setBusinessId(oldQualityDetails.getId());
                 inStockAddDetails.setWarehouseId(oldQualityDetails.getWarehouseId());
                 inStockAddDetails.setGoodsId(productInfoId);
-                inStockAddDetails.setChangeQuantity(changeDisqualificationQuantity);
+                inStockAddDetails.setChangeQuantity(disqualificationQuantity);
                 list.add(inStockAddDetails);
             }
 
             // 改变合格数量
-            BigDecimal changeQualifiedQuantity = oldQualifiedQuantity.subtract(qualifiedQuantity);
-            if (changeQualifiedQuantity.compareTo(BigDecimal.ZERO) > 0) {
+            BigDecimal qualifiedQuantity = qualityDetails.getQualifiedQuantity();
+            if (qualifiedQuantity.compareTo(BigDecimal.ZERO) > 0) {
                 BigDecimal bigDecimal = ObjectUtil.defaultIfNull(map.get(productInfoId), BigDecimal.ZERO);
-                map.put(productInfoId, bigDecimal.add(changeQualifiedQuantity));
+                map.put(productInfoId, bigDecimal.add(qualifiedQuantity));
+            }
+            qualityDetails.setQualifiedQuantity(oldQualityDetails.getQualifiedQuantity().add(qualityDetails.getQualifiedQuantity()));
+            qualityDetails.setDisqualificationQuantity(oldQualityDetails.getDisqualificationQuantity().add(qualityDetails.getDisqualificationQuantity()));
+            int compareTo = qualityDetails.getQualifiedQuantity().add(qualityDetails.getDisqualificationQuantity()).compareTo(qualityDetails.getTotalQuantity());
+            if (compareTo > 0) {
+                throw new ServiceException("合格数量加不合格数量不能大于需要质检的总数量");
+            }
+            if (oldQualityDetails.getDisqualificationQuantity().compareTo(BigDecimal.ZERO) > 0) {
+                resultTypeFlag = false;
+            }
+            if (compareTo != 0) {
+                qualityFlag = false;
             }
-
         }
+        // 修改质检未完成状态
+        QualityInfo qualityInfo = new QualityInfo();
+        qualityInfo.setId(qualityInfoId);
+        qualityInfo.setStatus(qualityFlag ? 3 : 2);
+        qualityInfo.setResultType(resultTypeFlag ? 1 : 2);
+        qualityInfoService.updateById(qualityInfo);
+
         // 质检不合格数量走出库,减少锁定库存
         if (list.size() > 0) {
             StockChangeVo stockChangeVo = new StockChangeVo();
@@ -112,6 +127,7 @@ public class QualityDetailsServiceImpl extends ServiceImpl<QualityDetailsMapper,
             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()));

+ 14 - 1
hx-service/victoriatourist/src/main/java/com/fjhx/service/quality/impl/QualityInfoServiceImpl.java

@@ -18,6 +18,7 @@ import com.fjhx.utils.wrapperUtil.KeywordData;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -41,7 +42,9 @@ public class QualityInfoServiceImpl extends ServiceImpl<QualityInfoMapper, Quali
     @Override
     public Page<QualityInfoPageVo> getPage(QualityInfoPageDto dto) {
 
-        IWrapper<Object> wrapper = IWrapper.getWrapper(dto).keyword(new KeywordData("p", Purchase::getCode), new KeywordData("s", Supplier::getName)).eq("qi", QualityInfo::getStatus, dto.getStatus());
+        IWrapper<Object> wrapper = IWrapper.getWrapper(dto)
+                .keyword(new KeywordData("p", Purchase::getCode), new KeywordData("s", Supplier::getName))
+                .eq("qi", QualityInfo::getStatus, dto.getStatus());
 
         Page<QualityInfoPageVo> page = baseMapper.getPage(dto.getPage(), wrapper);
         List<QualityInfoPageVo> records = page.getRecords();
@@ -77,6 +80,16 @@ public class QualityInfoServiceImpl extends ServiceImpl<QualityInfoMapper, Quali
     @Override
     public List<QualityDetailsVo> getDetailsList(GetDetailsListDto dto) {
         List<QualityDetails> list = qualityDetailsService.list(q -> q.eq(QualityDetails::getQualityInfoId, dto.getQualityInfoId()));
+
+        for (QualityDetails qualityDetails : list) {
+            qualityDetails.setTotalQuantity(qualityDetails.getTotalQuantity()
+                    .subtract(qualityDetails.getDisqualificationQuantity())
+                    .subtract(qualityDetails.getQualifiedQuantity()));
+
+            qualityDetails.setDisqualificationQuantity(BigDecimal.ZERO);
+            qualityDetails.setQualifiedQuantity(BigDecimal.ZERO);
+        }
+
         List<QualityDetailsVo> result = BeanUtil.copyToList(list, QualityDetailsVo.class);
 
         productInfoService.attributeAssign(result, QualityDetails::getProductInfoId, (item, product) -> {

+ 11 - 4
hx-service/victoriatourist/src/main/java/com/fjhx/service/stock/impl/StockServiceImpl.java

@@ -198,7 +198,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
                 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));
+                    stock.setFrozenQuantity(stock.getFrozenQuantity().add(changeQuantity));
                 } else {
                     stock.setQuantity(stock.getQuantity().add(changeQuantity));
                 }
@@ -226,9 +226,16 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
                     changeStock.setQuantity(stock.getQuantity().add(changeStock.getQuantity()));
                 }
             } else {
-                BigDecimal quantity = stock.getQuantity().subtract(changeStock.getQuantity());
-                Assert.geZero(quantity, "产品库存不足,出库失败");
-                changeStock.setQuantity(quantity);
+                // 质检不合格出库,扣减锁定库存
+                if (typeEnum.equals(OutTypeEnum.UNQUALIFIED_QUALITY_INSPECTION)) {
+                    changeStock.setFrozenQuantity(changeStock.getFrozenQuantity().subtract(stock.getFrozenQuantity()));
+                }
+                // 其他出库扣减库存
+                else {
+                    BigDecimal subtract = changeStock.getQuantity().subtract(stock.getQuantity());
+                    Assert.eqTrue(subtract.compareTo(BigDecimal.ZERO) < 0, "产品库存不足,出库失败");
+                    changeStock.setQuantity(subtract);
+                }
             }
         }
         saveOrUpdateBatch(new ArrayList<>(map.values()));