From 0c0bf6426cc33b8a9de3dfd93196308cbd68631c Mon Sep 17 00:00:00 2001 From: syruan <15555146157@163.com> Date: Fri, 22 Aug 2025 18:03:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=B9=E7=94=A8=E6=9C=AA=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=A2=9E=E5=8A=A0=E6=89=B9=E9=87=8F=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=EF=BC=8C=E4=BC=98=E5=8C=96=E6=89=A7=E8=A1=8C=E9=80=9F?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SltAgreementInfoController.java | 59 +++-- .../settlement/domain/SltAgreementInfo.java | 5 + .../settlement/domain/SltAgreementReduce.java | 2 + .../mapper/SltAgreementInfoMapper.java | 16 ++ .../mapper/SltAgreementReduceMapper.java | 7 +- .../service/ISltAgreementInfoService.java | 7 + .../impl/SltAgreementInfoServiceImpl.java | 229 +++++++++++++++++- .../settlement/SltAgreementInfoMapper.xml | 184 ++++++++++++++ .../settlement/SltAgreementReduceMapper.xml | 24 ++ 9 files changed, 502 insertions(+), 31 deletions(-) diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/controller/SltAgreementInfoController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/controller/SltAgreementInfoController.java index a59fdf99..99bb2f61 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/controller/SltAgreementInfoController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/controller/SltAgreementInfoController.java @@ -6,13 +6,16 @@ import java.math.RoundingMode; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.bonus.common.biz.config.ListPagingUtil; import com.bonus.common.biz.config.PoiOutPage; +import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.ServletUtils; import com.bonus.common.log.enums.OperaType; import com.bonus.common.security.utils.SecurityUtils; @@ -1445,32 +1448,42 @@ public class SltAgreementInfoController extends BaseController { // ----------- 定义返回集合 ------------ List resultList = new ArrayList<>(); - // ----------- 查询列表 --------------- - List list = sltAgreementInfoService.getSltReportList(query); + try { + // ----------- 查询列表 --------------- + List list = sltAgreementInfoService.getSltReportList(query); - // ----------- 遍历列表,设置默认值 --------------- - Byte settlementType = sltAgreementInfoService.checkLoginUserHasSettlementPermission(); - // 设置结算权限,控制展示 - list.forEach(info -> info.setSettlementType(settlementType)); + // ----------- 遍历列表,设置默认值 --------------- + Byte settlementType = sltAgreementInfoService.checkLoginUserHasSettlementPermission(); + // 设置结算权限,控制展示 + list.forEach(info -> info.setSettlementType(settlementType)); - List dataList = new ArrayList<>(); - SltInfoVo bean = new SltInfoVo(); - for (SltAgreementInfo info : list) { - SltInfoVo vo = sltAgreementInfoService.getSltInfo(info); - if (vo == null) { continue; } - vo.setAgreementId(info.getAgreementId()); - vo.setAgreementCode(info.getAgreementCode()); - dataList.add(vo); + List dataList = new ArrayList<>(); + SltInfoVo bean = new SltInfoVo(); + + // 把每个对象的agreementId设置成集合,避免重复查询 + list.forEach(info -> { + info.setAgreementIds(list.stream().map(SltAgreementInfo::getAgreementId).collect(Collectors.toList())); + SltInfoVo vo = sltAgreementInfoService.getSltInfoReportBatch(info); + if (vo != null && !ObjectUtil.isEmpty(vo)) { + vo.setAgreementId(info.getAgreementId()); + vo.setAgreementCode(info.getAgreementCode()); + dataList.add(vo); + } + }); + + // 移除领、修、丢、废4项都没有明细的结算信息 + dataList.removeIf(vo -> CollectionUtils.isEmpty(vo.getLeaseList()) + && CollectionUtils.isEmpty(vo.getRepairList()) + && CollectionUtils.isEmpty(vo.getScrapList()) + && CollectionUtils.isEmpty(vo.getLoseList()) + ); + + return getDataTable(dataList); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + sltAgreementInfoService.clearCache(); } - - // 移除领、修、丢、废4项都没有明细的结算信息 - dataList.removeIf(vo -> CollectionUtils.isEmpty(vo.getLeaseList()) - && CollectionUtils.isEmpty(vo.getRepairList()) - && CollectionUtils.isEmpty(vo.getScrapList()) - && CollectionUtils.isEmpty(vo.getLoseList()) - ); - - return getDataTable(dataList); } /** diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/domain/SltAgreementInfo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/domain/SltAgreementInfo.java index 944da680..68afb5bb 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/domain/SltAgreementInfo.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/domain/SltAgreementInfo.java @@ -32,6 +32,11 @@ public class SltAgreementInfo extends BaseEntity { @ApiModelProperty(value = "协议id") private Long agreementId; + /** + * 协议id集合,用作查询一次性查多个协议的数据 + */ + private List agreementIds; + /** * 协议编号 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/domain/SltAgreementReduce.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/domain/SltAgreementReduce.java index 266eecc8..91d1dc71 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/domain/SltAgreementReduce.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/domain/SltAgreementReduce.java @@ -33,6 +33,8 @@ public class SltAgreementReduce extends BaseEntity { @ApiModelProperty(value = "协议id") private Long agreementId; + private List agreementIds; + /** 结算单号(例如:JM202402-1) */ @Excel(name = "减免单号", readConverterExp = "例=如:JM202402-1") private String code; diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/mapper/SltAgreementInfoMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/mapper/SltAgreementInfoMapper.java index bd9cba5f..08eb5000 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/mapper/SltAgreementInfoMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/mapper/SltAgreementInfoMapper.java @@ -91,14 +91,30 @@ public interface SltAgreementInfoMapper { int insSltInfo(@Param("record") LeaseOutDetails record, @Param("agreementId")String agreementId, @Param("ma") Type ma); + // 查询一个协议号的领料详情 List getLeaseList(SltAgreementInfo bean); + // 查询多个协议号的领料详情 + List getLeaseListBatch(SltAgreementInfo bean); + + // 查询一个协议号的维修详情(根据taskIds) List getRepairDetailsList(@Param("info") SltAgreementInfo info, @Param("taskList") List taskList); + // 查询多个协议号的维修详情 + List getRepairDetailsListBatch(@Param("info") SltAgreementInfo info, @Param("taskList") List taskList); + + // 查询一个协议号的报废详情(根据taskIds) List getScrapDetailsList(@Param("info") SltAgreementInfo info, @Param("taskList") List taskList); + // 查询多个协议号的报废详情 + List getScrapDetailsListBatch(@Param("info") SltAgreementInfo info); + + // 获取一个协议号的丢失详情 List getLoseList(SltAgreementInfo bean); + // 获取多个协议号的丢失详情 + List getLoseListBatch(SltAgreementInfo bean); + int updateRelation(SltAgreementApply apply); int updateApply(SltAgreementApply apply); diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/mapper/SltAgreementReduceMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/mapper/SltAgreementReduceMapper.java index 05f51208..1e8428ec 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/mapper/SltAgreementReduceMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/mapper/SltAgreementReduceMapper.java @@ -34,11 +34,14 @@ public interface SltAgreementReduceMapper { /** * 根据协议Id查询减免明细 - * @param bean - * @return */ List getReductionList(SltAgreementReduce bean); + /** + * 批量查询减免明细 + */ + List getReductionListBatch(SltAgreementReduce bean); + List selectAuditReduceList(SltAgreementReduce sltAgreement); void deleteReduceDetail(Long id); diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/service/ISltAgreementInfoService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/service/ISltAgreementInfoService.java index 5a0a719a..afb840da 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/service/ISltAgreementInfoService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/service/ISltAgreementInfoService.java @@ -37,6 +37,13 @@ public interface ISltAgreementInfoService { public SltInfoVo getSltInfo(SltAgreementInfo info); + /** + * 批量查询结算信息列表 -- 未结算报表专用 + */ + SltInfoVo getSltInfoReportBatch(SltAgreementInfo list); + + void clearCache(); + /** * 检查登陆用户是否有结算权限 * @return 管理的结算类型码 diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/service/impl/SltAgreementInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/service/impl/SltAgreementInfoServiceImpl.java index 6b6f573c..c7a1985c 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/service/impl/SltAgreementInfoServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/settlement/service/impl/SltAgreementInfoServiceImpl.java @@ -3,13 +3,12 @@ package com.bonus.material.settlement.service.impl; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; -import java.util.regex.Pattern; +import java.util.function.Function; import java.util.stream.Collectors; import com.bonus.common.biz.constant.GlobalConstants; import com.bonus.common.biz.domain.ProjectTreeBuild; import com.bonus.common.biz.domain.ProjectTreeNode; -import com.bonus.common.biz.enums.TmTaskTypeEnum; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.web.domain.AjaxResult; @@ -21,7 +20,6 @@ import com.bonus.material.basic.mapper.BmAgreementInfoMapper; import com.bonus.material.basic.mapper.BmConfigMapper; import com.bonus.material.common.domain.dto.SelectDto; import com.bonus.material.common.domain.vo.AgreementVo; -import com.bonus.material.countersign.domain.SignConfigVo; import com.bonus.material.settlement.domain.SltAgreementApply; import com.bonus.material.settlement.domain.SltAgreementReduce; import com.bonus.material.settlement.domain.SltAgreementRelation; @@ -76,6 +74,17 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService { @Resource private SltAgreementReduceMapper sltAgreementRecudceMapper; + // 定义线程级缓存 + private static final ThreadLocal> leaseListCache = new ThreadLocal<>(); + // 丢失结算列表缓存 + private static final ThreadLocal> lostListCache = new ThreadLocal<>(); + // 费用减免列表缓存 + private static final ThreadLocal> reductionListCache = new ThreadLocal<>(); + // 维修结算列表缓存 + private static final ThreadLocal> repairListCache = new ThreadLocal<>(); + // 报废结算列表缓存 + private static final ThreadLocal> scrapListCache = new ThreadLocal<>(); + /** * 查询结算信息 * @@ -87,6 +96,16 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService { return sltAgreementInfoMapper.selectSltAgreementInfoById(id); } + // 暴露 public 方法给外层清理缓存、防止内存泄漏 + @Override + public void clearCache() { + leaseListCache.remove(); + lostListCache.remove(); + reductionListCache.remove(); + repairListCache.remove(); + scrapListCache.remove(); + } + /** * 查询结算信息列表 * @@ -182,11 +201,130 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService { return sltInfoVo; } + /** + * 批量查询结算信息列表 -- 未结算报表专用 + */ + @Override + public SltInfoVo getSltInfoReportBatch(SltAgreementInfo info) { + SltInfoVo sltInfoVo = new SltInfoVo(); + sltInfoVo.setUnitName(info.getUnitName()); + sltInfoVo.setProjectName(info.getProjectName()); + BigDecimal leaseCost = BigDecimal.ZERO, repairCost= BigDecimal.ZERO ; + BigDecimal scrapCost= BigDecimal.ZERO, loseCost= BigDecimal.ZERO, reducCost= BigDecimal.ZERO; + + if (leaseListCache.get() == null) { + // 调用一次性批量租赁费用查询 + leaseListCache.set(sltAgreementInfoMapper.getLeaseListBatch(info)); + } + if (lostListCache.get() == null) { + // 调用一次性批量丢失费用查询 + lostListCache.set(sltAgreementInfoMapper.getLoseListBatch(info)); + } + if (reductionListCache.get() == null) { + // 调用一次性批量减免费用查询 + SltAgreementReduce bean =new SltAgreementReduce(); + bean.setAgreementIds(info.getAgreementIds()); + reductionListCache.set(sltAgreementRecudceMapper.getReductionListBatch(bean)); + } + if (repairListCache.get() == null) { + // 调用一次性批量维修费用查询 + repairListCache.set(sltAgreementInfoMapper.getRepairDetailsListBatch(info, null)); + } + if (scrapListCache.get() == null) { + // 调用一次性批量报废费用查询 + scrapListCache.set(sltAgreementInfoMapper.getScrapDetailsListBatch(info)); + } + // 查询租赁费用列表 + List leaseList = getLeaseBtachList(info); + //维修费用列表 + List repairList = getRepairListBatch(info); + //报废费用列表 + List scrapList = getScrapListBatch(info); + //丢失费用列表 + List loseList = getLoseListBatch(info); + //费用减免列表 + List reductionList = getReductionListBatch(info); + + if (CollectionUtils.isEmpty(leaseList) && CollectionUtils.isEmpty(repairList) + && CollectionUtils.isEmpty(scrapList) && CollectionUtils.isEmpty(loseList) + && CollectionUtils.isEmpty(reductionList)) + { + return null; + } + + sltInfoVo.setLeaseList(leaseList); + sltInfoVo.setRepairList(repairList); + sltInfoVo.setScrapList(scrapList); + sltInfoVo.setLoseList(loseList); + sltInfoVo.setReductionList(reductionList); + for (SltAgreementInfo lease : leaseList) { + if (lease.getCosts() != null) { + leaseCost = leaseCost.add(lease.getCosts()); + } + } + for (SltAgreementInfo repair : repairList) { + if(repair.getCosts() != null && (repair.getPartType().equals("收费"))) { + repairCost = repairCost.add(repair.getCosts()); + } + } + for (SltAgreementInfo scrap : scrapList) { + if(scrap.getCosts() != null && (scrap.getPartType().equals("收费"))) { + scrapCost = scrapCost.add(scrap.getCosts()); + } + } + for (SltAgreementInfo lose : loseList) { + if(lose.getCosts()!=null){ + loseCost = loseCost.add(lose.getCosts()); + } + } + for (SltAgreementReduce reduction : reductionList) { + if(reduction.getLeaseMoney()!=null){ + reducCost = reducCost.add(reduction.getLeaseMoney()); + } + } + sltInfoVo.setLeaseCost(leaseCost); + sltInfoVo.setRepairCost(repairCost); + sltInfoVo.setScrapCost(scrapCost); + sltInfoVo.setLoseCost(loseCost); + sltInfoVo.setReductionCost(reducCost); + List relations = getRelations(leaseList, repairList, scrapList, loseList, info); + sltInfoVo.setRelations(relations); + return sltInfoVo; + } + @Override public List getSltExam(SltAgreementInfo bean) { return sltAgreementInfoMapper.getSltExam(bean); } + /** + * 批量分批查询工具 + * + * @param ids 待查询的id集合 + * @param batchSize 每次查询的最大数量 + * @param queryFunc 查询函数,比如 service::queryByIds + * @return 合并后的结果集合 + * @param id类型 + * @param 返回结果类型 + */ + public static List batchQuery(List ids, int batchSize, Function, List> queryFunc) { + if (ids == null || ids.isEmpty()) { + return Collections.emptyList(); + } + + List result = new ArrayList<>(); + int total = ids.size(); + for (int i = 0; i < total; i += batchSize) { + int end = Math.min(i + batchSize, total); + List subList = ids.subList(i, end); + List batchResult = queryFunc.apply(subList); + if (batchResult != null && !batchResult.isEmpty()) { + result.addAll(batchResult); + } + } + return result; + } + /** * 新增结算信息 * @@ -241,6 +379,9 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService { return sltAgreementInfoMapper.deleteSltAgreementInfoById(id); } + /** + * 获取单个协议的领料明细 + */ public List getLeaseList(SltAgreementInfo info) { List oneOfList = sltAgreementInfoMapper.getLeaseList(info); List leaseList = new ArrayList<>(oneOfList); @@ -266,6 +407,36 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService { return leaseList; } + /** + * 获取多个协议的领料明细 + */ + public List getLeaseBtachList(SltAgreementInfo info) { + // 领料就不要每次都执行 + List leaseList = leaseListCache.get() + .stream() + .filter(bean -> bean.getAgreementId().equals(info.getAgreementId())).collect(Collectors.toList()); + + for (SltAgreementInfo bean : leaseList) { + if (null == bean.getLeasePrice()) { + bean.setLeasePrice(BigDecimal.ZERO); + } else { + bean.setLeasePrice(bean.getLeasePrice().setScale(2, RoundingMode.HALF_UP)); + } + if (null == bean.getNum()) { + bean.setNum(BigDecimal.ZERO); + } + if (null == bean.getLeaseDays()) { + bean.setLeaseDay(0L); + } + BigDecimal leasePrice = bean.getLeasePrice(); + BigDecimal num = bean.getNum(); + BigDecimal leaseDays = new BigDecimal(bean.getLeaseDays()); + BigDecimal costs = leasePrice.multiply(num).multiply(leaseDays).setScale(GlobalConstants.INT_2, RoundingMode.HALF_UP); + bean.setCosts(costs); + } + return leaseList; + } + public List getRepairList(SltAgreementInfo info) { List repairList = new ArrayList<>(); List taskList = taskMapper.getTaskIdList(info); @@ -276,6 +447,13 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService { return repairList; } + public List getRepairListBatch(SltAgreementInfo info) { + return repairListCache.get() + .stream() + .filter(bean -> bean.getAgreementId().equals(info.getAgreementId())) + .collect(Collectors.toList()); + } + public List getScrapList(SltAgreementInfo info) { List scrapList = new ArrayList<>(); List taskList = taskMapper.getTaskIdList(info); @@ -286,6 +464,16 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService { return scrapList; } + /** + * 获取多个协议的报废明细 + */ + public List getScrapListBatch(SltAgreementInfo info) { + return scrapListCache.get() + .stream() + .filter(bean -> bean.getAgreementId().equals(info.getAgreementId())) + .collect(Collectors.toList()); + } + public List getLoseList(SltAgreementInfo info) { List oneOfList = sltAgreementInfoMapper.getLoseList(info); List loseList = new ArrayList<>(oneOfList); @@ -307,17 +495,47 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService { return loseList; } + public List getLoseListBatch(SltAgreementInfo info) { + List loseList = lostListCache.get() + .stream() + .filter(bean -> bean.getAgreementId().equals(info.getAgreementId())) + .collect(Collectors.toList()); + + for (SltAgreementInfo bean : loseList) { + if (null == bean.getBuyPrice()) { + bean.setBuyPrice(BigDecimal.ZERO); + } + if (null == bean.getNum()) { + bean.setNum(BigDecimal.ZERO); + } + BigDecimal buyPrice = bean.getBuyPrice(); + BigDecimal num = bean.getNum(); + // 原价 x 数量 + BigDecimal costs = buyPrice.multiply(num); + //计算租赁费用 + bean.setCosts(costs); + } + return loseList; + } + private List getReductionList(SltAgreementInfo info) { SltAgreementReduce bean =new SltAgreementReduce(); bean.setAgreementId(info.getAgreementId()); return sltAgreementRecudceMapper.getReductionList(bean); } + private List getReductionListBatch(SltAgreementInfo info) { + return reductionListCache.get() + .stream() + .filter(bean -> bean.getAgreementId().equals(info.getAgreementId())) + .collect(Collectors.toList()); + } + private List getRelations(List leaseList, List repairList, List scrapList, List loseList, - SltAgreementInfo sltInfo) { + SltAgreementInfo sltInfo) + { List relations = new ArrayList<>(); -// for (SltAgreementInfo info : list) { SltAgreementRelation relation = new SltAgreementRelation(); BigDecimal loseCost = BigDecimal.ZERO; BigDecimal leaseCost = BigDecimal.ZERO; @@ -360,7 +578,6 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService { relation.setScrapCost(scrapCost); relation.setLoseCost(loseCost); relations.add(relation); -// } return relations; } diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/settlement/SltAgreementInfoMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/settlement/SltAgreementInfoMapper.xml index a3b18619..0bd6bb37 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/settlement/SltAgreementInfoMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/settlement/SltAgreementInfoMapper.xml @@ -811,6 +811,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and bp.pro_id = #{projectId} + + and bai.agreement_code = #{agreementCode} + and saa.create_time between #{startTime} and #{endTime} @@ -855,4 +858,185 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" GROUP BY bai.agreement_id ORDER BY bai.create_time desc + + + + + + + + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/settlement/SltAgreementReduceMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/settlement/SltAgreementReduceMapper.xml index 11c97607..0d513c49 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/settlement/SltAgreementReduceMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/settlement/SltAgreementReduceMapper.xml @@ -305,5 +305,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHERE sra.agreement_id = #{agreementId} +