From f4f830d7ff03d70ddd40368b67969dee2b940026 Mon Sep 17 00:00:00 2001 From: sxu <602087911@qq.com> Date: Fri, 8 Nov 2024 15:51:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E8=B4=AD=E5=88=97=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/PurchaseCheckDetailsMapper.java | 4 +- .../impl/PurchaseCheckInfoServiceImpl.java | 90 ++++++++----------- .../purchase/PurchaseCheckDetailsMapper.xml | 18 +++- 3 files changed, 55 insertions(+), 57 deletions(-) diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseCheckDetailsMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseCheckDetailsMapper.java index f3c0bfc3..ceb0bb82 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseCheckDetailsMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseCheckDetailsMapper.java @@ -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 selectPurchaseCheckDetailsListByTaskId(Long taskId); + List selectPurchaseCheckDetailsListByTaskId(@Param("taskId") Long taskId, @Param("status") String status); /** * 根据任务id查询新购验收任务详细列表--Join查询 diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseCheckInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseCheckInfoServiceImpl.java index f7088aca..422b7cf4 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseCheckInfoServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseCheckInfoServiceImpl.java @@ -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 selectPurchaseCheckInfoList(PurchaseCheckInfo purchaseCheckInfoDto) { - // 查询新购info列表,并用stream流过滤掉info列表中空的对象 或 taskId为空的对象 - List purchaseCheckInfos = purchaseCheckInfoMapper.selectPurchaseCheckInfoJoinList(purchaseCheckInfoDto) - .stream() - .filter(Objects::nonNull) - .filter(purchaseCheckInfo -> purchaseCheckInfo.getTaskId() != null) - .collect(Collectors.toList()); + public List selectPurchaseCheckInfoList(PurchaseCheckInfo purchaseCheckInfo) { + List purchaseCheckInfoResult = new ArrayList<>(); + List 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 = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(purchaseCheckInfo.getTaskId()) - .stream() - .filter(Objects::nonNull) - .collect(Collectors.toList()); - - // 定义初始化统计变量,使用 AtomicLong 和 AtomicBigDecimal 来替代同步块,提高性能。 - // 采购物资数量 - AtomicLong purchaseMaTotalNumber = new AtomicLong(0L); - // 采购物资不含税价格 - AtomicReference 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 = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(purchaseInfo.getTaskId(), purchaseCheckInfo.getTaskStatus()) + .stream() + .filter(Objects::nonNull) + .collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(purchaseCheckDetails)) { + AtomicLong purchaseMaTotalNumber = new AtomicLong(0L); + AtomicReference 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 = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(taskId); + List purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(taskId, null); // 过滤掉空数据 purchaseCheckDetails.removeIf(Objects::isNull); result.setMaterialList(purchaseCheckDetails); diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseCheckDetailsMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseCheckDetailsMapper.xml index 2a8b42c0..6280c4c4 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseCheckDetailsMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseCheckDetailsMapper.xml @@ -85,9 +85,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} - - where pcd.task_id = #{taskId} + where 1=1 + + and pcd.status = #{status} + + + and pcd.task_id = #{taskId} +