费用未结算报表增加批量查询,优化执行速度

This commit is contained in:
syruan 2025-08-22 18:03:59 +08:00
parent 6a2d78c315
commit 0c0bf6426c
9 changed files with 502 additions and 31 deletions

View File

@ -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,6 +1448,7 @@ public class SltAgreementInfoController extends BaseController {
// ----------- 定义返回集合 ------------
List<SltInfoVo> resultList = new ArrayList<>();
try {
// ----------- 查询列表 ---------------
List<SltAgreementInfo> list = sltAgreementInfoService.getSltReportList(query);
@ -1455,13 +1459,17 @@ public class SltAgreementInfoController extends BaseController {
List<SltInfoVo> dataList = new ArrayList<>();
SltInfoVo bean = new SltInfoVo();
for (SltAgreementInfo info : list) {
SltInfoVo vo = sltAgreementInfoService.getSltInfo(info);
if (vo == null) { continue; }
// 把每个对象的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())
@ -1471,6 +1479,11 @@ public class SltAgreementInfoController extends BaseController {
);
return getDataTable(dataList);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
sltAgreementInfoService.clearCache();
}
}
/**

View File

@ -32,6 +32,11 @@ public class SltAgreementInfo extends BaseEntity {
@ApiModelProperty(value = "协议id")
private Long agreementId;
/**
* 协议id集合用作查询一次性查多个协议的数据
*/
private List<Long> agreementIds;
/**
* 协议编号
*/

View File

@ -33,6 +33,8 @@ public class SltAgreementReduce extends BaseEntity {
@ApiModelProperty(value = "协议id")
private Long agreementId;
private List<Long> agreementIds;
/** 结算单号例如JM202402-1 */
@Excel(name = "减免单号", readConverterExp = "例=如JM202402-1")
private String code;

View File

@ -91,14 +91,30 @@ public interface SltAgreementInfoMapper {
int insSltInfo(@Param("record") LeaseOutDetails record, @Param("agreementId")String agreementId, @Param("ma") Type ma);
// 查询一个协议号的领料详情
List<SltAgreementInfo> getLeaseList(SltAgreementInfo bean);
// 查询多个协议号的领料详情
List<SltAgreementInfo> getLeaseListBatch(SltAgreementInfo bean);
// 查询一个协议号的维修详情根据taskIds
List<SltAgreementInfo> getRepairDetailsList(@Param("info") SltAgreementInfo info, @Param("taskList") List<TmTask> taskList);
// 查询多个协议号的维修详情
List<SltAgreementInfo> getRepairDetailsListBatch(@Param("info") SltAgreementInfo info, @Param("taskList") List<TmTask> taskList);
// 查询一个协议号的报废详情根据taskIds
List<SltAgreementInfo> getScrapDetailsList(@Param("info") SltAgreementInfo info, @Param("taskList") List<TmTask> taskList);
// 查询多个协议号的报废详情
List<SltAgreementInfo> getScrapDetailsListBatch(@Param("info") SltAgreementInfo info);
// 获取一个协议号的丢失详情
List<SltAgreementInfo> getLoseList(SltAgreementInfo bean);
// 获取多个协议号的丢失详情
List<SltAgreementInfo> getLoseListBatch(SltAgreementInfo bean);
int updateRelation(SltAgreementApply apply);
int updateApply(SltAgreementApply apply);

View File

@ -34,11 +34,14 @@ public interface SltAgreementReduceMapper {
/**
* 根据协议Id查询减免明细
* @param bean
* @return
*/
List<SltAgreementReduce> getReductionList(SltAgreementReduce bean);
/**
* 批量查询减免明细
*/
List<SltAgreementReduce> getReductionListBatch(SltAgreementReduce bean);
List<SltAgreementReduce> selectAuditReduceList(SltAgreementReduce sltAgreement);
void deleteReduceDetail(Long id);

View File

@ -37,6 +37,13 @@ public interface ISltAgreementInfoService {
public SltInfoVo getSltInfo(SltAgreementInfo info);
/**
* 批量查询结算信息列表 -- 未结算报表专用
*/
SltInfoVo getSltInfoReportBatch(SltAgreementInfo list);
void clearCache();
/**
* 检查登陆用户是否有结算权限
* @return 管理的结算类型码

View File

@ -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<List<SltAgreementInfo>> leaseListCache = new ThreadLocal<>();
// 丢失结算列表缓存
private static final ThreadLocal<List<SltAgreementInfo>> lostListCache = new ThreadLocal<>();
// 费用减免列表缓存
private static final ThreadLocal<List<SltAgreementReduce>> reductionListCache = new ThreadLocal<>();
// 维修结算列表缓存
private static final ThreadLocal<List<SltAgreementInfo>> repairListCache = new ThreadLocal<>();
// 报废结算列表缓存
private static final ThreadLocal<List<SltAgreementInfo>> 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<SltAgreementInfo> leaseList = getLeaseBtachList(info);
//维修费用列表
List<SltAgreementInfo> repairList = getRepairListBatch(info);
//报废费用列表
List<SltAgreementInfo> scrapList = getScrapListBatch(info);
//丢失费用列表
List<SltAgreementInfo> loseList = getLoseListBatch(info);
//费用减免列表
List<SltAgreementReduce> 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<SltAgreementRelation> relations = getRelations(leaseList, repairList, scrapList, loseList, info);
sltInfoVo.setRelations(relations);
return sltInfoVo;
}
@Override
public List<SltAgreementApply> getSltExam(SltAgreementInfo bean) {
return sltAgreementInfoMapper.getSltExam(bean);
}
/**
* 批量分批查询工具
*
* @param ids 待查询的id集合
* @param batchSize 每次查询的最大数量
* @param queryFunc 查询函数比如 service::queryByIds
* @return 合并后的结果集合
* @param <T> id类型
* @param <R> 返回结果类型
*/
public static <T, R> List<R> batchQuery(List<T> ids, int batchSize, Function<List<T>, List<R>> queryFunc) {
if (ids == null || ids.isEmpty()) {
return Collections.emptyList();
}
List<R> result = new ArrayList<>();
int total = ids.size();
for (int i = 0; i < total; i += batchSize) {
int end = Math.min(i + batchSize, total);
List<T> subList = ids.subList(i, end);
List<R> 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<SltAgreementInfo> getLeaseList(SltAgreementInfo info) {
List<SltAgreementInfo> oneOfList = sltAgreementInfoMapper.getLeaseList(info);
List<SltAgreementInfo> leaseList = new ArrayList<>(oneOfList);
@ -266,6 +407,36 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService {
return leaseList;
}
/**
* 获取多个协议的领料明细
*/
public List<SltAgreementInfo> getLeaseBtachList(SltAgreementInfo info) {
// 领料就不要每次都执行
List<SltAgreementInfo> 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<SltAgreementInfo> getRepairList(SltAgreementInfo info) {
List<SltAgreementInfo> repairList = new ArrayList<>();
List<TmTask> taskList = taskMapper.getTaskIdList(info);
@ -276,6 +447,13 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService {
return repairList;
}
public List<SltAgreementInfo> getRepairListBatch(SltAgreementInfo info) {
return repairListCache.get()
.stream()
.filter(bean -> bean.getAgreementId().equals(info.getAgreementId()))
.collect(Collectors.toList());
}
public List<SltAgreementInfo> getScrapList(SltAgreementInfo info) {
List<SltAgreementInfo> scrapList = new ArrayList<>();
List<TmTask> taskList = taskMapper.getTaskIdList(info);
@ -286,6 +464,16 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService {
return scrapList;
}
/**
* 获取多个协议的报废明细
*/
public List<SltAgreementInfo> getScrapListBatch(SltAgreementInfo info) {
return scrapListCache.get()
.stream()
.filter(bean -> bean.getAgreementId().equals(info.getAgreementId()))
.collect(Collectors.toList());
}
public List<SltAgreementInfo> getLoseList(SltAgreementInfo info) {
List<SltAgreementInfo> oneOfList = sltAgreementInfoMapper.getLoseList(info);
List<SltAgreementInfo> loseList = new ArrayList<>(oneOfList);
@ -307,17 +495,47 @@ public class SltAgreementInfoServiceImpl implements ISltAgreementInfoService {
return loseList;
}
public List<SltAgreementInfo> getLoseListBatch(SltAgreementInfo info) {
List<SltAgreementInfo> 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<SltAgreementReduce> getReductionList(SltAgreementInfo info) {
SltAgreementReduce bean =new SltAgreementReduce();
bean.setAgreementId(info.getAgreementId());
return sltAgreementRecudceMapper.getReductionList(bean);
}
private List<SltAgreementReduce> getReductionListBatch(SltAgreementInfo info) {
return reductionListCache.get()
.stream()
.filter(bean -> bean.getAgreementId().equals(info.getAgreementId()))
.collect(Collectors.toList());
}
private List<SltAgreementRelation> getRelations(List<SltAgreementInfo> leaseList, List<SltAgreementInfo> repairList,
List<SltAgreementInfo> scrapList, List<SltAgreementInfo> loseList,
SltAgreementInfo sltInfo) {
SltAgreementInfo sltInfo)
{
List<SltAgreementRelation> 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;
}

View File

@ -811,6 +811,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="projectId != null and projectId != ''">
and bp.pro_id = #{projectId}
</if>
<if test="agreementCode != null and agreementCode != ''">
and bai.agreement_code = #{agreementCode}
</if>
<if test="startTime != null and endTime != null">
and saa.create_time between #{startTime} and #{endTime}
</if>
@ -855,4 +858,185 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY bai.agreement_id
ORDER BY bai.create_time desc
</select>
<select id="getLeaseListBatch" resultType="com.bonus.material.settlement.domain.SltAgreementInfo">
SELECT
res.agreementId,
res.unitName,
res.projectName,
res.companyId,
res.typeId,
res.typeName,
res.modelName,
res.mtUnitName,
res.leasePrice,
SUM(res.num) as num,
res.startTime,
res.endTime,
res.leaseDays
FROM
(
select sai.id,
sai.agreement_id as agreementId,
bui.unit_name as unitName,
bp.pro_name as projectName,
sai.company_id as companyId,
sai.type_id as typeId,
mt1.type_name as typeName,
mt.type_name as modelName,
mt.unit_name as mtUnitName,
sai.lease_price as leasePrice,
sai.num as num,
DATE(sai.start_time) as startTime,
DATE(sai.end_time) as endTime,
DATEDIFF(IF(sai.end_time is null,CURDATE(),sai.end_time), sai.start_time) + 1 as leaseDays
from
slt_agreement_info sai
LEFT JOIN bm_agreement_info bai on sai.agreement_id = bai.agreement_id
LEFT JOIN bm_project bp ON bp.pro_id = bai.project_id
LEFT JOIN bm_unit bui ON bui.unit_id = bai.unit_id
left join ma_type mt on sai.type_id = mt.type_id
left join ma_type mt1 on mt.parent_id = mt1.type_id
<where>
<if test="agreementIds != null and agreementIds.size > 0">
and sai.agreement_id in
<foreach collection="agreementIds" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="settlementType != null and settlementType != 0">
and mt.jiju_type = #{settlementType}
</if>
</where>
) res
GROUP BY res.agreementId,res.typeId,res.startTime,res.endTime
</select>
<select id="getLoseListBatch" resultType="com.bonus.material.settlement.domain.SltAgreementInfo">
SELECT
res.agreementId,
res.unitName,
res.projectName,
res.companyId,
res.typeId,
res.typeName,
res.modelName,
res.mtUnitName,
res.buyPrice,
SUM(res.num) as num,
res.startTime,
res.endTime,
res.leaseDays
FROM
(
select sai.id,
sai.agreement_id as agreementId,
bui.unit_name as unitName,
bp.pro_name as projectName,
sai.company_id as companyId,
sai.type_id as typeId,
sai.ma_id as maId,
mt1.type_name as typeName,
mt.type_name as modelName,
mt.unit_name as mtUnitName,
mt.buy_price as buyPrice,
sai.num as num,
sai.start_time as startTime,
sai.end_time as endTime,
DATEDIFF(sai.end_time, sai.start_time) + 1 as leaseDays
from
slt_agreement_info sai
LEFT JOIN bm_agreement_info bai on sai.agreement_id = bai.agreement_id
LEFT JOIN bm_project bp ON bp.pro_id = bai.project_id
LEFT JOIN bm_unit bui ON bui.unit_id = bai.unit_id
left join ma_type mt on sai.type_id = mt.type_id
left join ma_type mt1 on mt.parent_id = mt1.type_id
where
sai.agreement_id in
<foreach item="item" index="index" collection="agreementIds" open="(" separator="," close=")">
#{item}
</foreach>
and sai.end_time is null
<if test="settlementType != null and settlementType != 0">
and mt.jiju_type = #{settlementType}
</if>
) res
GROUP BY res.typeId
</select>
<select id="getRepairDetailsListBatch" resultType="com.bonus.material.settlement.domain.SltAgreementInfo">
select
tta.agreement_id as agreementId,
bui.unit_name as unitName,
bp.pro_name as projectName,
rc.id as costId,
rc.type_id as typeId,
rc.ma_id as maId,
mt1.type_name as typeName,
mt.type_name as modelName,
mt.unit_name as mtUnitName,
rc.repair_num as num,
rc.costs as costs,
case rc.part_type when '0' then '不收费' when '1' then '收费' else '' end as partType,
case rc.repair_type when '1' then '内部维修' when '2' then '返厂维修' else '' end as repairType,
rc.company_id as companyId,
case rc.status when '0' then '未审核' when '1' then '已审核' when '2' then '已驳回' else '' end as repairStatus
from repair_cost rc
left join tm_task_agreement tta on rc.task_id = tta.task_id
left join tm_task tt on rc.task_id = tt.task_id
left join bm_agreement_info bai on tta.agreement_id = bai.agreement_id
left join bm_project bp ON bp.pro_id = bai.project_id
left join bm_unit bui ON bui.unit_id = bai.unit_id
left join ma_type mt on rc.type_id = mt.type_id
left join ma_type mt1 on mt.parent_id = mt1.type_id
where rc.status in ('0','1')
and rc.repair_type in ('1','2')
<if test="info.settlementType != null and info.settlementType != 0">
and mt.jiju_type = #{info.settlementType}
</if>
<if test="info.agreementIds != null and info.agreementIds.size > 0">
and tta.agreement_id in
<foreach item="aid" collection="info.agreementIds" open="(" separator="," close=")">
#{aid}
</foreach>
</if>
</select>
<select id="getScrapDetailsListBatch" resultType="com.bonus.material.settlement.domain.SltAgreementInfo">
select
tta.agreement_id as agreementId,
bui.unit_name as unitName,
bp.pro_name as projectName,
rc.id as costId,
rc.type_id as typeId,
rc.ma_id as maId,
mt1.type_name as typeName,
mt.type_name as modelName,
mt.unit_name as mtUnitName,
rc.repair_num as num,
rc.costs as costs,
case rc.part_type when '0' then '不收费' when '1' then '收费' else '' end as partType,
case rc.repair_type when '1' then '内部维修' when '2' then '返厂维修' when '3' then '其他维修' else '' end as repairType,
rc.company_id as companyId,
case rc.status when '0' then '未审核' when '1' then '已审核' when '2' then '已驳回' else '' end as repairStatus
from repair_cost rc
LEFT JOIN tm_task_agreement tta on rc.task_id = tta.task_id
LEFT JOIN tm_task tt on rc.task_id = tt.task_id
LEFT JOIN bm_agreement_info bai on tta.agreement_id = bai.agreement_id
LEFT JOIN bm_project bp ON bp.pro_id = bai.project_id
LEFT JOIN bm_unit bui ON bui.unit_id = bai.unit_id
LEFT JOIN ma_type mt on rc.type_id = mt.type_id
LEFT JOIN ma_type mt1 on mt.parent_id = mt1.type_id
where rc.status in ('0','1')
and rc.repair_type = '3'
<if test="info.settlementType != null and info.settlementType != 0">
and mt.jiju_type = #{info.settlementType}
</if>
<if test="info.agreementIds != null and info.agreementIds.size > 0">
and tta.agreement_id in
<foreach item="aid" collection="info.agreementIds" open="(" separator="," close=")">
#{aid}
</foreach>
</if>
</select>
</mapper>

View File

@ -305,5 +305,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE sra.agreement_id = #{agreementId}
</select>
<select id="getReductionListBatch" resultType="com.bonus.material.settlement.domain.SltAgreementReduce">
SELECT mt2.type_name as maName,
mt.type_name as maModel,
mt.unit_name as maUnit,
srd.lease_price as leasePrice,
srd.reduce_num as reduceNum,
srd.start_time as startTime,
srd.end_time as endTime,
srd.days as days,
srd.lease_money as leaseMoney,
sra.remark
FROM slt_reduce_apply sra
LEFT JOIN slt_reduce_details srd on sra.id = srd.apply_id
LEFT JOIN ma_type mt on mt.type_id = srd.type_id
LEFT JOIN ma_type mt2 on mt2.type_id = mt.parent_id
<where>
<if test="agreementIds != null and agreementIds.size > 0">
sra.agreement_id in
<foreach item="item" index="index" collection="agreementIds" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</where>
</select>
</mapper>