|
@@ -1,5 +1,6 @@
|
|
package com.fjhx.service.quality.impl;
|
|
package com.fjhx.service.quality.impl;
|
|
|
|
|
|
|
|
+import cn.hutool.core.convert.Convert;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
@@ -10,13 +11,19 @@ import com.fjhx.base.StorageBaseEntity;
|
|
import com.fjhx.constants.StatusConstant;
|
|
import com.fjhx.constants.StatusConstant;
|
|
import com.fjhx.entity.material.Material;
|
|
import com.fjhx.entity.material.Material;
|
|
import com.fjhx.entity.quality.QualityTesting;
|
|
import com.fjhx.entity.quality.QualityTesting;
|
|
|
|
+import com.fjhx.entity.quality.QualityTestingDetails;
|
|
import com.fjhx.entity.water.WaterBatch;
|
|
import com.fjhx.entity.water.WaterBatch;
|
|
import com.fjhx.entity.water.WaterTag;
|
|
import com.fjhx.entity.water.WaterTag;
|
|
|
|
+import com.fjhx.enums.CheckJudgmentEnum;
|
|
import com.fjhx.enums.PurchaseProgressEnum;
|
|
import com.fjhx.enums.PurchaseProgressEnum;
|
|
import com.fjhx.mapper.quality.QualityTestingMapper;
|
|
import com.fjhx.mapper.quality.QualityTestingMapper;
|
|
|
|
+import com.fjhx.service.flow.CheckQuantityCorrectFlowService;
|
|
import com.fjhx.service.material.MaterialService;
|
|
import com.fjhx.service.material.MaterialService;
|
|
|
|
+import com.fjhx.service.quality.QualityTestingDetailsService;
|
|
import com.fjhx.service.quality.QualityTestingService;
|
|
import com.fjhx.service.quality.QualityTestingService;
|
|
import com.fjhx.service.water.WaterBatchService;
|
|
import com.fjhx.service.water.WaterBatchService;
|
|
|
|
+import com.fjhx.service.water.WaterTagService;
|
|
|
|
+import com.fjhx.utils.Assert;
|
|
import com.fjhx.utils.BigDecimalUtil;
|
|
import com.fjhx.utils.BigDecimalUtil;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -43,10 +50,21 @@ public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper,
|
|
@Autowired
|
|
@Autowired
|
|
private WaterBatchService waterBatchService;
|
|
private WaterBatchService waterBatchService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private QualityTestingDetailsService qualityTestingDetailsService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private WaterTagService waterTagService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private CheckQuantityCorrectFlowService checkQuantityCorrectFlowService;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public Page<Map<String, Object>> getPage(Condition condition) {
|
|
public Page<Map<String, Object>> getPage(Condition condition) {
|
|
|
|
|
|
- QueryWrapper<Object> wrapper = Wrappers.query();
|
|
|
|
|
|
+ // 未完成质检
|
|
|
|
+ QueryWrapper<Object> wrapper = Wrappers.query()
|
|
|
|
+ .eq("qt.complete_status", StatusConstant.NO);
|
|
|
|
|
|
return baseMapper.getPage(condition.getPage(), wrapper);
|
|
return baseMapper.getPage(condition.getPage(), wrapper);
|
|
}
|
|
}
|
|
@@ -89,18 +107,19 @@ public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper,
|
|
|
|
|
|
// 质检单
|
|
// 质检单
|
|
List<QualityTesting> qualityTestingList = new ArrayList<>();
|
|
List<QualityTesting> qualityTestingList = new ArrayList<>();
|
|
- waterBatchIdMaterialIdMap.forEach((k, v) -> {
|
|
|
|
|
|
+ waterBatchIdMaterialIdMap.forEach((batchId, materialId) -> {
|
|
|
|
|
|
QualityTesting qualityTesting = new QualityTesting();
|
|
QualityTesting qualityTesting = new QualityTesting();
|
|
qualityTesting.setCode(getCode());
|
|
qualityTesting.setCode(getCode());
|
|
- qualityTesting.setWaterBatchId(k);
|
|
|
|
|
|
+ qualityTesting.setWaterBatchId(batchId);
|
|
qualityTesting.setCompleteStatus(StatusConstant.NO);
|
|
qualityTesting.setCompleteStatus(StatusConstant.NO);
|
|
|
|
+ qualityTesting.setMaterialId(batchId);
|
|
|
|
|
|
// 获取质检比例
|
|
// 获取质检比例
|
|
- BigDecimal checkRate = materialCheckRateMap.get(v);
|
|
|
|
|
|
+ BigDecimal checkRate = materialCheckRateMap.get(materialId);
|
|
|
|
|
|
// 入库数量
|
|
// 入库数量
|
|
- Integer tagCount = waterBatchIdTagCountMap.get(k);
|
|
|
|
|
|
+ Integer tagCount = waterBatchIdTagCountMap.get(batchId);
|
|
|
|
|
|
int checkNum = BigDecimalUtil.multiply(checkRate, tagCount, 0, RoundingMode.CEILING).intValue();
|
|
int checkNum = BigDecimalUtil.multiply(checkRate, tagCount, 0, RoundingMode.CEILING).intValue();
|
|
qualityTesting.setCheckNum(checkNum);
|
|
qualityTesting.setCheckNum(checkNum);
|
|
@@ -119,6 +138,116 @@ public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper,
|
|
waterBatchService.updateShipmentStatus(waterBatchIdMaterialIdMap.keySet());
|
|
waterBatchService.updateShipmentStatus(waterBatchIdMaterialIdMap.keySet());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public synchronized void edit(int changeNum, Long qualityTestingId) {
|
|
|
|
+ // 质检单
|
|
|
|
+ QualityTesting qualityTesting = getById(qualityTestingId);
|
|
|
|
+
|
|
|
|
+ // 已质检卷数
|
|
|
|
+ qualityTesting.setHadCheckNum(qualityTesting.getHadCheckNum() + changeNum);
|
|
|
|
+
|
|
|
|
+ updateById(qualityTesting);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Map<String, Object> details(Condition condition) {
|
|
|
|
+ Long qualityTestingId = condition.getLong("qualityTestingId", "质检id不能为空");
|
|
|
|
+
|
|
|
|
+ QualityTesting qualityTesting = getById(qualityTestingId);
|
|
|
|
+ Assert.notEmpty(qualityTesting, "没有找到质检单");
|
|
|
|
+
|
|
|
|
+ // 已质检卷数
|
|
|
|
+ Integer hadCheckNum = qualityTesting.getHadCheckNum();
|
|
|
|
+
|
|
|
|
+ // 需质检总卷数
|
|
|
|
+ Integer checkNum = qualityTesting.getCheckNum();
|
|
|
|
+
|
|
|
|
+ // 批次id
|
|
|
|
+ Long waterBatchId = qualityTesting.getWaterBatchId();
|
|
|
|
+
|
|
|
|
+ // 查看本批次在库的标签
|
|
|
|
+ List<WaterTag> list = waterTagService.list(Wrappers.<WaterTag>lambdaQuery()
|
|
|
|
+ .select(StorageBaseEntity::getId)
|
|
|
|
+ .eq(WaterTag::getWaterBatchId, waterBatchId)
|
|
|
|
+ .eq(WaterTag::getInHouse, StatusConstant.YES));
|
|
|
|
+
|
|
|
|
+ // 质检明细列表
|
|
|
|
+ List<QualityTestingDetails> qualityTestingDetailsList =
|
|
|
|
+ qualityTestingDetailsService.list(QualityTestingDetails::getQualityTestingId, qualityTestingId);
|
|
|
|
+
|
|
|
|
+ // 在库且未质检标签数量
|
|
|
|
+ int qualityInspectionTagNum;
|
|
|
|
+
|
|
|
|
+ // 排除已质检标签,算出还有多少标签可以质检
|
|
|
|
+ if (qualityTestingDetailsList.size() == 0) {
|
|
|
|
+ qualityInspectionTagNum = list.size();
|
|
|
|
+ } else {
|
|
|
|
+ // 已质检的标签id
|
|
|
|
+ List<Long> waterTagIdList = qualityTestingDetailsList.stream()
|
|
|
|
+ .map(QualityTestingDetails::getWaterTagId).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ qualityInspectionTagNum = Convert.toInt(list.stream().filter(item -> !waterTagIdList.contains(item.getId())).count());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
|
+ result.put("checkNum", checkNum);
|
|
|
|
+ result.put("needCheckNum", Math.max(checkNum - hadCheckNum, 0));
|
|
|
|
+ result.put("qualityInspectionTagNum", qualityInspectionTagNum);
|
|
|
|
+ result.put("inHouseTagNum", list.size());
|
|
|
|
+ result.put("qualityTestingDetailsList", qualityTestingDetailsList);
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void submit(Condition condition) {
|
|
|
|
+ Long qualityTestingId = condition.getLong("qualityTestingId", "质检id不能为空");
|
|
|
|
+
|
|
|
|
+ Date date = new Date();
|
|
|
|
+
|
|
|
|
+ // 质检
|
|
|
|
+ QualityTesting qualityTesting = getById(qualityTestingId);
|
|
|
|
+
|
|
|
|
+ // 质检明细列表
|
|
|
|
+ List<QualityTestingDetails> qualityTestingDetailsList =
|
|
|
|
+ qualityTestingDetailsService.list(QualityTestingDetails::getQualityTestingId, qualityTestingId);
|
|
|
|
+
|
|
|
|
+ // 物料门幅
|
|
|
|
+ BigDecimal width = materialService.getById(qualityTesting.getMaterialId()).getWidth();
|
|
|
|
+ // 质检米数
|
|
|
|
+ BigDecimal checkQuantity = BigDecimal.ZERO;
|
|
|
|
+ // 质检判定
|
|
|
|
+ Integer checkJudgment = CheckJudgmentEnum.QUALIFIED.getType();
|
|
|
|
+ // 短少总数量
|
|
|
|
+ BigDecimal lakeNumSum = BigDecimal.ZERO;
|
|
|
|
+
|
|
|
|
+ for (QualityTestingDetails qualityTestingDetails : qualityTestingDetailsList) {
|
|
|
|
+ // 质检数量
|
|
|
|
+ checkQuantity = checkQuantity.add(qualityTestingDetails.getQuantity());
|
|
|
|
+ // 短少数量
|
|
|
|
+ lakeNumSum = lakeNumSum.add(qualityTestingDetails.getLakeNum());
|
|
|
|
+ // 基本判定
|
|
|
|
+ if (CheckJudgmentEnum.UNQUALIFIED.equals(CheckJudgmentEnum.get(qualityTestingDetails.getCheckJudgment()))) {
|
|
|
|
+ checkJudgment = CheckJudgmentEnum.UNQUALIFIED.getType();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // TODO 未完成
|
|
|
|
+ qualityTesting.setCompleteStatus(StatusConstant.YES);
|
|
|
|
+ qualityTesting.setCheckTime(date);
|
|
|
|
+ qualityTesting.setCheckQuantity(checkQuantity);
|
|
|
|
+ qualityTesting.setCheckArea(checkQuantity.multiply(width).divide(new BigDecimal(100), RoundingMode.HALF_UP));
|
|
|
|
+ qualityTesting.setCheckJudgment(checkJudgment);
|
|
|
|
+// qualityTesting.setAdjustRate(lakeNumSum.divide());
|
|
|
|
+// qualityTesting.setCheckInvalidRatio();
|
|
|
|
+
|
|
|
|
+ // 短少总数量大于0,发起 质检数量修正申请 审批流
|
|
|
|
+ if (lakeNumSum.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
|
+ checkQuantityCorrectFlowService.create(qualityTestingId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
|
|
private static String getCode() {
|
|
private static String getCode() {
|
|
try {
|
|
try {
|