新购列表接口优化

This commit is contained in:
sxu 2024-11-08 15:51:14 +08:00
parent 9411a2777f
commit f4f830d7ff
3 changed files with 55 additions and 57 deletions

View File

@ -20,7 +20,7 @@ public interface PurchaseCheckDetailsMapper {
* @param taskId * @param type 1-验收2-入库
* @return String类型多个物资类型根据逗号分割
*/
String selectMaTypeNameByTaskId(@Param("taskId") Long taskId, @Param("type") String type);
String selectMaTypeNameByTaskId(@Param("taskId") Long taskId, @Param("status") String status);
/**
@ -35,7 +35,7 @@ public interface PurchaseCheckDetailsMapper {
* 根据任务id查询新购验收任务详细列表--Join查询
* @param taskId 任务id
*/
List<PurchaseCheckDetails> selectPurchaseCheckDetailsListByTaskId(Long taskId);
List<PurchaseCheckDetails> selectPurchaseCheckDetailsListByTaskId(@Param("taskId") Long taskId, @Param("status") String status);
/**
* 根据任务id查询新购验收任务详细列表--Join查询

View File

@ -2,6 +2,7 @@ package com.bonus.material.purchase.service.impl;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@ -82,65 +83,50 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
/**
* 查询新购验收任务列表
*
* @param purchaseCheckInfoDto 新购验收任务请求参数
* @param purchaseCheckInfo 新购验收任务请求参数
* @return 新购验收任务
*/
@Override
public List<PurchaseCheckInfo> selectPurchaseCheckInfoList(PurchaseCheckInfo purchaseCheckInfoDto) {
// 查询新购info列表并用stream流过滤掉info列表中空的对象 taskId为空的对象
List<PurchaseCheckInfo> purchaseCheckInfos = purchaseCheckInfoMapper.selectPurchaseCheckInfoJoinList(purchaseCheckInfoDto)
.stream()
.filter(Objects::nonNull)
.filter(purchaseCheckInfo -> purchaseCheckInfo.getTaskId() != null)
.collect(Collectors.toList());
public List<PurchaseCheckInfo> selectPurchaseCheckInfoList(PurchaseCheckInfo purchaseCheckInfo) {
List<PurchaseCheckInfo> purchaseCheckInfoResult = new ArrayList<>();
List<PurchaseCheckInfo> purchaseCheckInfos = purchaseCheckInfoMapper.selectPurchaseCheckInfoJoinList(purchaseCheckInfo)
.stream()
.filter(Objects::nonNull)
.filter(purchaseInfo -> purchaseInfo.getTaskId() != null)
.collect(Collectors.toList());
// ----------- for循环开始 -------------
for (PurchaseCheckInfo purchaseCheckInfo : purchaseCheckInfos) {
// 查询details表获取详细的采购物资名称
String purchaseMaName = purchaseCheckDetailsMapper.selectMaTypeNameByTaskId(purchaseCheckInfo.getTaskId(), null);
purchaseCheckInfo.setPurchaseMaTypeName(purchaseMaName != null ? purchaseMaName : "");
// 查询details表获取详细的采购物资数量价格
List<PurchaseCheckDetails> purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(purchaseCheckInfo.getTaskId())
.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
// 定义初始化统计变量,使用 AtomicLong AtomicBigDecimal 来替代同步块提高性能
// 采购物资数量
AtomicLong purchaseMaTotalNumber = new AtomicLong(0L);
// 采购物资不含税价格
AtomicReference<BigDecimal> purchaseMaTotalPrice = new AtomicReference<>(BigDecimal.ZERO);
// 执行for循环统计采购物资数量价格
for (PurchaseCheckDetails detail : purchaseCheckDetails) {
if (detail.getPurchaseNum() == null || detail.getPurchasePrice() == null) {
continue;
for (PurchaseCheckInfo purchaseInfo : purchaseCheckInfos) {
String purchaseMaName = purchaseCheckDetailsMapper.selectMaTypeNameByTaskId(purchaseInfo.getTaskId(), purchaseCheckInfo.getTaskStatus());
purchaseInfo.setPurchaseMaTypeName(purchaseMaName != null ? purchaseMaName : "");
List<PurchaseCheckDetails> purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(purchaseInfo.getTaskId(), purchaseCheckInfo.getTaskStatus())
.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(purchaseCheckDetails)) {
AtomicLong purchaseMaTotalNumber = new AtomicLong(0L);
AtomicReference<BigDecimal> purchaseMaTotalPrice = new AtomicReference<>(BigDecimal.ZERO);
// 执行for循环统计采购物资数量价格
for (PurchaseCheckDetails detail : purchaseCheckDetails) {
if (detail.getPurchaseNum() == null || detail.getPurchasePrice() == null) {
continue;
}
if (detail.getPurchaseNum() < 0 || detail.getPurchasePrice().compareTo(BigDecimal.ZERO) < 0) {
throw new IllegalArgumentException("采购数量和价格必须为非负数");
}
purchaseMaTotalNumber.addAndGet(detail.getPurchaseNum());
purchaseMaTotalPrice.updateAndGet(v -> v.add(new BigDecimal(detail.getPurchaseNum()).multiply(detail.getPurchasePrice())));
}
if (detail.getPurchaseNum() < 0 || detail.getPurchasePrice().compareTo(BigDecimal.ZERO) < 0) {
throw new IllegalArgumentException("采购数量和价格必须为非负数");
purchaseInfo.setPurchaseMaNumber(purchaseMaTotalNumber.get());
purchaseInfo.setPurchasePrice(purchaseMaTotalPrice.get());
if (purchaseInfo.getTaxRate() != null && purchaseInfo.getPurchasePrice() != null) {
purchaseInfo.setPurchaseTaxPrice(
calculateTaxPrice(purchaseMaTotalPrice.get(), purchaseInfo.getTaxRate())
);
}
// 原代码块使用sync确保线程安全现更改为AtomicLong来替代同步块
// 统计采购数量
purchaseMaTotalNumber.addAndGet(detail.getPurchaseNum());
// 采购物资数量乘以采购不含税价格
purchaseMaTotalPrice.updateAndGet(v -> v.add(new BigDecimal(detail.getPurchaseNum()).multiply(detail.getPurchasePrice())));
}
// 赋值统计出来的采购物资数量不含税价格
purchaseCheckInfo.setPurchaseMaNumber(purchaseMaTotalNumber.get());
purchaseCheckInfo.setPurchasePrice(purchaseMaTotalPrice.get());
// 通过不含税价格及税率计算出含税价格并赋值
if (purchaseCheckInfo.getTaxRate() != null && purchaseCheckInfo.getPurchasePrice() != null) {
purchaseCheckInfo.setPurchaseTaxPrice(
calculateTaxPrice(purchaseMaTotalPrice.get(), purchaseCheckInfo.getTaxRate())
);
purchaseCheckInfoResult.add(purchaseInfo);
}
}
// ------------- for循环结束 -------------
return purchaseCheckInfos;
return purchaseCheckInfoResult;
}
/**
@ -280,7 +266,7 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
if (result != null) {
// 执行SQL查询内层信息
List<PurchaseCheckDetails> purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(taskId);
List<PurchaseCheckDetails> purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(taskId, null);
// 过滤掉空数据
purchaseCheckDetails.removeIf(Objects::isNull);
result.setMaterialList(purchaseCheckDetails);

View File

@ -85,9 +85,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</select>
<select id="selectPurchaseCheckDetailsListByTaskId" parameterType="Long" resultMap="PurchaseCheckDetailsResult">
<select id="selectPurchaseCheckDetailsListByTaskId" resultMap="PurchaseCheckDetailsResult">
<include refid="selectPurchaseCheckDetailsJoinVo"/>
where pcd.task_id = #{taskId}
where 1=1
<if test="status != null">
and pcd.status = #{status}
</if>
<if test="taskId != null">
and pcd.task_id = #{taskId}
</if>
</select>
<select id="selectPurchaseCheckDetailsListByQueryDto" parameterType="com.bonus.material.purchase.domain.dto.PurchaseQueryDto" resultMap="PurchaseCheckDetailsResult">
@ -239,7 +245,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join
ma_type mt1 on mt.parent_id = mt1.type_id
where
pcd.task_id = #{taskId}
1=1
<if test="status != null">
and pcd.status = #{status}
</if>
<if test="taskId != null">
and pcd.task_id = #{taskId}
</if>
) t
GROUP BY task_id
</select>