新购列表接口优化
This commit is contained in:
parent
9411a2777f
commit
f4f830d7ff
|
|
@ -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查询
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue