This commit is contained in:
mashuai 2025-09-22 16:37:06 +08:00
parent 471c867c13
commit a73ca331cb
4 changed files with 21 additions and 11 deletions

View File

@ -299,7 +299,7 @@ public interface MaterialLeaseInfoMapper {
* @param bean * @param bean
* @return * @return
*/ */
BmAgreementInfo getAgreeId(MaterialLeaseApplyInfo bean); List<BmAgreementInfo> getAgreeId(MaterialLeaseApplyInfo bean);
/** /**
* 二维码出库根据qrcode查询在库机具信息 * 二维码出库根据qrcode查询在库机具信息

View File

@ -1359,7 +1359,7 @@ public class MaterialLeaseInfoServiceImpl implements MaterialLeaseInfoService {
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(listL5)) { if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(listL5)) {
// 优化预先查询班组和协议信息避免在循环中重复查询 // 优化预先查询班组和协议信息避免在循环中重复查询
BmTeam team = null; BmTeam team = null;
BmAgreementInfo agreementInfo = null; List<BmAgreementInfo> agreementInfo = null;
if (StringUtils.isNotBlank(bean.getTeamName())) { if (StringUtils.isNotBlank(bean.getTeamName())) {
team = getTeamByNameCached(bean.getTeamName()); team = getTeamByNameCached(bean.getTeamName());
@ -1372,14 +1372,19 @@ public class MaterialLeaseInfoServiceImpl implements MaterialLeaseInfoService {
// 优化如果有协议信息批量查询所有类型的使用数量 // 优化如果有协议信息批量查询所有类型的使用数量
Map<Long, BigDecimal> useNumMap = new HashMap<>(); Map<Long, BigDecimal> useNumMap = new HashMap<>();
if (agreementInfo != null && !listL5.isEmpty()) { if (!CollectionUtils.isEmpty(agreementInfo) && !listL5.isEmpty()) {
// 收集所有需要查询的typeId // 收集所有需要查询的typeId
List<Long> typeIds = listL5.stream() List<Long> typeIds = listL5.stream()
.map(TypeTreeNode::getTypeId) .map(TypeTreeNode::getTypeId)
.collect(Collectors.toList()); .collect(Collectors.toList());
// 获取agreementInfo中的协议id
List<Long> agreementIds = agreementInfo.stream()
.map(BmAgreementInfo::getAgreementId)
.distinct()
.collect(Collectors.toList());
// 批量查询使用数量 - 性能优化关键点 // 批量查询使用数量 - 性能优化关键点
List<Type> batchResults = typeMapper.getNumListBatch(agreementInfo.getAgreementId(), typeIds); List<Type> batchResults = typeMapper.getNumListBatch(agreementIds, typeIds);
// 转换为Map // 转换为Map
if (!CollectionUtils.isEmpty(batchResults)) { if (!CollectionUtils.isEmpty(batchResults)) {
@ -1437,7 +1442,7 @@ public class MaterialLeaseInfoServiceImpl implements MaterialLeaseInfoService {
* @param bean 查询参数 * @param bean 查询参数
* @return 协议信息 * @return 协议信息
*/ */
private BmAgreementInfo getAgreementInfoCached(MaterialLeaseApplyInfo bean) { private List<BmAgreementInfo> getAgreementInfoCached(MaterialLeaseApplyInfo bean) {
return materialLeaseInfoMapper.getAgreeId(bean); return materialLeaseInfoMapper.getAgreeId(bean);
} }

View File

@ -214,11 +214,11 @@ public interface TypeMapper {
/** /**
* 批量查询数量 - 性能优化 * 批量查询数量 - 性能优化
* @param agreementId 协议ID * @param agreementIds 协议ID
* @param typeIds 类型ID列表 * @param typeIds 类型ID列表
* @return 类型使用数量列表 * @return 类型使用数量列表
*/ */
List<Type> getNumListBatch(@Param("agreementId") Long agreementId, @Param("typeIds") List<Long> typeIds); List<Type> getNumListBatch(@Param("agreementIds") List<Long> agreementIds, @Param("typeIds") List<Long> typeIds);
/** /**
* 查询物资类型管理绑定的用户列表 * 查询物资类型管理绑定的用户列表

View File

@ -1128,19 +1128,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getNumListBatch" resultType="com.bonus.material.ma.domain.Type"> <select id="getNumListBatch" resultType="com.bonus.material.ma.domain.Type">
SELECT SELECT
mt.type_id as typeId, mt.type_id as typeId,
SUM( CASE WHEN sai.agreement_id = #{agreementId} AND sai.STATUS = '0' THEN sai.num ELSE 0 END ) AS useNum SUM(sai.num) AS useNum
FROM FROM
ma_type mt ma_type mt
LEFT JOIN clz_slt_agreement_info sai ON mt.type_id = sai.type_id LEFT JOIN clz_slt_agreement_info sai ON mt.type_id = sai.type_id
WHERE WHERE
mt.type_id IN sai.STATUS = '0'
AND mt.type_id IN
<foreach collection="typeIds" item="typeId" open="(" separator="," close=")"> <foreach collection="typeIds" item="typeId" open="(" separator="," close=")">
#{typeId} #{typeId}
</foreach> </foreach>
AND EXISTS ( SELECT 1 FROM clz_slt_agreement_info sai2 WHERE sai2.type_id = mt.type_id AND sai2.agreement_id = #{agreementId} AND sai.agreement_id in
AND sai2.STATUS = '0' and sai2.num > 0) <foreach item="id" collection="agreementIds" open="(" separator="," close=")">
#{id}
</foreach>
GROUP BY GROUP BY
mt.type_id mt.type_id
HAVING
useNum > 0
</select> </select>
<select id="getUserList" resultType="com.bonus.material.ma.domain.vo.MaTypeVo"> <select id="getUserList" resultType="com.bonus.material.ma.domain.vo.MaTypeVo">