Browse Source

feat:添加错误预算占用修复脚本

checkBack
Yen 1 year ago
parent
commit
95bdc70345
  1. 4
      src/main/java/com/qs/serve/modules/bir/controller/BirActivityCenterGoodsController.java
  2. 4
      src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java
  3. 19
      src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java
  4. 21
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivitySubjectMapper.java
  5. 3
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLogMapper.java
  6. 401
      src/main/java/com/qs/serve/modules/tbs/service/TbsActivityDebugApplicationService.java
  7. 6
      src/main/java/com/qs/serve/modules/vtb/mapper/VtbVerificationMapper.java
  8. 4
      src/main/resources/application.yml
  9. 18
      src/main/resources/mapper/vtb/VtbVerfifcationMapper.xml

4
src/main/java/com/qs/serve/modules/bir/controller/BirActivityCenterGoodsController.java

@ -91,9 +91,9 @@ public class BirActivityCenterGoodsController {
@GetMapping("/toSyncBirToday")
public R<?> toSyncBirEcro2(){
Long[] ids = new Long[]{0L};
//Long[] ids = new Long[]{0L};
//List<Long> ids = tbsActivityMapper.selectReleaseCostIds();
//Set<Long> ids = tbsActivityCenterGoodsMapper.selectUpdateCostApplyIds();
Set<Long> ids = tbsActivityCenterGoodsMapper.selectUpdateCostApplyIds();
List<Long> errIds = new ArrayList<>();
for (Long id : ids) {
log.error("执行ID XXXX:{}",id);

4
src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java

@ -52,9 +52,11 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
List<Long> ids = activityList.stream().filter(a->a.getId()!=null)
.map(TbsActivity::getId).collect(Collectors.toList());
LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>();
birBaseActivityLqw.in(BirBaseActivity::getCostApplyId,costId);
birBaseActivityLqw.eq(BirBaseActivity::getCostApplyId,costId);
super.baseMapper.delete(birBaseActivityLqw);
//防空指针
ids.add(0L);
LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>();
activityLqw.in(TbsActivity::getId,ids);
activityList = tbsActivityMapper.selectList(activityLqw);

19
src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java

@ -99,6 +99,25 @@ public class TbsActivityController {
private final TbsCostApplyPart1Service tbsCostApplyPart1Service;
private SysAttachService attachService;
TbsActivityDebugApplicationService tbsActivityDebugApplicationService;
@GetMapping("/reset/{id}")
public R<?> reset(@PathVariable("id") Long id){
tbsActivityDebugApplicationService.reset(id);
return R.ok();
}
@GetMapping("/resetList")
public R<?> reset(){
Long[] ids = new Long[]{
367411L,370962L,371944L,1664621L,1664735L,1670003L,1670540L,1670543L,1670848L,1672047L,1673700L,1673831L
,1673871L,1674351L,1674356L,1675523L,1676292L,1678649L,1676360L,1678659L,1677127L,1679655L,1680396L,1683464L
};
for (Long id : ids) {
tbsActivityDebugApplicationService.reset(id);
}
return R.ok();
}
/**
* 列表

21
src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivitySubjectMapper.java

@ -2,6 +2,8 @@ package com.qs.serve.modules.tbs.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsActivitySubject;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* 活动科目项 Mapper
@ -10,5 +12,24 @@ import com.qs.serve.modules.tbs.entity.TbsActivitySubject;
*/
public interface TbsActivitySubjectMapper extends BaseMapper<TbsActivitySubject> {
@Select("select \n" +
" count(1) " +
"from tbs_activity \n" +
"left join tbs_cost_apply on tbs_activity.cost_apply_id = tbs_cost_apply.id\n" +
"left join (\n" +
"\tselect activity_id,sum(used_amount) as tal_used,count(1) as count_subject from tbs_activity_subject \n" +
"\twhere del_flag = 0 and activity_id = #{activityId} " +
"\tgroup by activity_id\n" +
") act_info on act_info.activity_id = tbs_activity.id\n" +
"where tbs_activity.del_flag = 0 \n" +
"and tbs_cost_apply.del_flag = 0\n" +
"and tbs_cost_apply.charge_state in (1,2,3,7)\n" +
"and tbs_cost_apply.cancel_flag = 0\n" +
"and tbs_activity.cancel_flag = 0\n" +
"and tbs_activity.release_flag = 1\n" +
"and tbs_activity.id = #{activityId} " +
"and act_info.tal_used != tbs_activity.used_amount ")
Long checkActAndSubjectAmt(@Param("activityId") Long activityId);
}

3
src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLogMapper.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.tbs.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsBudgetLog;
import com.qs.serve.modules.tbs.entity.TbsCostApply;
@ -67,7 +68,5 @@ public interface TbsBudgetLogMapper extends BaseMapper<TbsBudgetLog> {
" and (total_activity_amount-sum_budget>1 or sum_budget - total_activity_amount>1 )")
List<TbsCostApply> selectErrorThirtyCostId();
}

401
src/main/java/com/qs/serve/modules/tbs/service/TbsActivityDebugApplicationService.java

@ -0,0 +1,401 @@
package com.qs.serve.modules.tbs.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.mapper.*;
import com.qs.serve.modules.vtb.entity.VtbVerification;
import com.qs.serve.modules.vtb.entity.VtbVerificationSubject;
import com.qs.serve.modules.vtb.mapper.VtbVerificationMapper;
import com.qs.serve.modules.vtb.mapper.VtbVerificationSubjectMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author YenHex
* @since 2024/5/25
*/
@Slf4j
@Service
@AllArgsConstructor
public class TbsActivityDebugApplicationService {
private TbsActivityMapper activityMapper;
private TbsActivitySubjectService activitySubjectService;
private TbsActivitySubjectMapper activitySubjectMapper;
private TbsActivityCenterService activityCenterService;
private TbsActivityCenterGoodsService activityCenterGoodsService;
private TbsBudgetLogService budgetLogService;
private VtbVerificationMapper verificationMapper;
//private VtbVerificationSubjectMapper verificationSubjectMapper;
public String reset(Long activityId){
BigDecimal n100 = new BigDecimal("100");
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("activity_id",activityId);
TbsActivity activity = activityMapper.selectById(activityId);
BigDecimal checkeAmt = activity.getUsedAmount();
if(activity.getReleaseFlag().equals(1)){
checkeAmt = checkeAmt.add(activity.getReleaseAmount());
}
if(checkeAmt.compareTo(activity.getTotalAmount())>0){
return "活动自身金额异常";
}
Long unMatchNum = activitySubjectMapper.checkActAndSubjectAmt(activityId);
if(unMatchNum!=null&&unMatchNum>0){
return "活动科目金额异常";
}
//校验核销金额,错误则不执行
BigDecimal totalVerificationAmt = verificationMapper.getActivityVerificationAmt(activityId);
if(activity.getUsedAmount().compareTo(BigDecimal.ZERO)!=0
&&activity.getUsedAmount().compareTo(totalVerificationAmt)!=0){
return "核销金额异常";
}
// subject是和activity的 申请金额和核销金额一致,不进行更新
List<TbsActivitySubject> activitySubjectList = activitySubjectService.list(wrapper);
List<TbsActivityCenter> activityCenterList = activityCenterService.list(wrapper);
List<TbsActivityCenterGoods> activityCenterGoodsList = activityCenterGoodsService.list(wrapper);
Map<Long,List<TbsActivityCenterGoods>> activityCenterGoodsListMap = activityCenterGoodsList.stream()
.collect(Collectors.groupingBy(TbsActivityCenterGoods::getSubjectId));
Map<Long,List<TbsActivityCenter>> activityCenterListMap = activityCenterList.stream()
.collect(Collectors.groupingBy(TbsActivityCenter::getSubjectId));
boolean updateSubject = false;
for (TbsActivitySubject activitySubject : activitySubjectList) {
Long subjectId = activitySubject.getSubjectId();
List<TbsActivityCenter> subjectCenterList = activityCenterListMap.get(subjectId);
BigDecimal totalCenterRate = BigDecimal.ZERO;
BigDecimal totalCenterAmt = BigDecimal.ZERO;
BigDecimal subjectUsedAmt = activitySubject.getUsedAmount();
BigDecimal subjectAmt = activitySubject.getAmount();
for (TbsActivityCenter activityCenter : subjectCenterList) {
if(activityCenter.getCenterRate().compareTo(BigDecimal.ZERO)>=0){
totalCenterRate = totalCenterRate.add(activityCenter.getCenterRate());
}
if(activityCenter.getCenterAmount().compareTo(BigDecimal.ZERO)>=0){
totalCenterAmt = totalCenterAmt.add(activityCenter.getCenterAmount());
}
}
boolean isUpdateCenter = false;
if(n100.compareTo(totalCenterRate)!=0){
log.warn("centerRate不为100:{}",activityId);
isUpdateCenter = true;
BigDecimal centerRate = n100;
for (int i = 0; i < subjectCenterList.size(); i++) {
TbsActivityCenter activityCenter = subjectCenterList.get(i);
if(i+1 == subjectCenterList.size()){
activityCenter.setCenterRate(centerRate);
}else {
if(activityCenter.getCenterRate().compareTo(BigDecimal.ZERO)<0){
activityCenter.setCenterRate(BigDecimal.ZERO);
}
centerRate = centerRate.subtract(activityCenter.getCenterRate());
}
}
}
// 分配占用金额
if(totalCenterAmt.compareTo(activitySubject.getAmount())!=0){
log.warn("合计金额异常,将重新分配活动的成本中心金额");
isUpdateCenter = true;
BigDecimal centerAmt = subjectAmt;
BigDecimal centerUsedAmt = subjectUsedAmt;
for (int i = 0; i < subjectCenterList.size(); i++) {
TbsActivityCenter activityCenter = subjectCenterList.get(i);
if(i+1 == subjectCenterList.size()){
activityCenter.setCenterAmount(centerAmt);
}else {
BigDecimal currAmt = subjectAmt
.multiply(activityCenter.getCenterRate())
.divide(n100, 2,RoundingMode.DOWN);
centerAmt = centerAmt.subtract(currAmt);
activityCenter.setCenterAmount(currAmt);
}
//设置已用金额
if(subjectAmt.compareTo(subjectUsedAmt)==0){
activityCenter.setUsedAmount(activityCenter.getCenterAmount());
}else {
if(i+1 == subjectCenterList.size()){
activityCenter.setUsedAmount(centerUsedAmt);
}else {
BigDecimal currAmt = subjectUsedAmt
.multiply(activityCenter.getCenterRate())
.divide(n100, 2,RoundingMode.DOWN);
centerUsedAmt = centerUsedAmt.subtract(currAmt);
activityCenter.setUsedAmount(centerAmt);
}
}
}
}
if(subjectUsedAmt==null){
subjectUsedAmt = BigDecimal.ZERO;
for (TbsActivityCenter center : subjectCenterList) {
subjectUsedAmt = subjectUsedAmt.add(center.getUsedAmount());
}
activitySubject.setUsedAmount(subjectUsedAmt);
updateSubject = true;
}
List<TbsActivityCenterGoods> activityCenterGoodsListOfSubject = activityCenterGoodsListMap.get(subjectId);
for (TbsActivityCenter center : subjectCenterList) {
List<TbsActivityCenterGoods> goodsList = activityCenterGoodsListOfSubject.stream()
.filter(a->a.getCenterId().equals(center.getCenterId())&&a.getCenterType().equals(center.getCenterType()))
.collect(Collectors.toList());
final BigDecimal centerUsed = center.getUsedAmount();
final BigDecimal centerAmt = center.getCenterAmount();
BigDecimal totalGoodRate = BigDecimal.ZERO;
for (TbsActivityCenterGoods goods : goodsList) {
BigDecimal rate = goods.getCenterGoodsRate();
if(rate.compareTo(BigDecimal.ZERO)>0){
totalGoodRate = totalGoodRate.add(rate);
}
}
//重新分配比率
if(totalGoodRate.compareTo(n100)!=0){
log.warn("totalGoodRate不为100,重新分配");
BigDecimal avgRate = n100.divide(new BigDecimal(goodsList.size()),2,RoundingMode.DOWN);
BigDecimal addRate = BigDecimal.ZERO;
for (int i = 0; i < goodsList.size(); i++) {
TbsActivityCenterGoods goods = goodsList.get(i);
if(i+1 == goodsList.size()){
goods.setCenterGoodsRate(n100.subtract(addRate));
}else {
goods.setCenterGoodsRate(avgRate);
addRate = addRate.add(avgRate);
}
}
}
//分配申请金额
BigDecimal centerAmt3 = centerAmt;
for (int i = 0; i < goodsList.size(); i++) {
TbsActivityCenterGoods goods = goodsList.get(i);
if(i+1 == goodsList.size()){
goods.setCenterGoodsAmount(centerAmt3);
}else {
BigDecimal currentAmt = centerAmt
.multiply(goods.getCenterGoodsRate())
.divide(n100,2,RoundingMode.DOWN);
goods.setCenterGoodsAmount(currentAmt);
centerAmt3 = centerAmt3.subtract(currentAmt);
}
}
//分配已用金额
BigDecimal centerUsed2 = centerUsed;
for (int i = 0; i < goodsList.size(); i++) {
TbsActivityCenterGoods goods = goodsList.get(i);
if(i+1 == goodsList.size()){
goods.setUsedAmount(centerUsed2);
}else {
BigDecimal currentAmt = centerUsed
.multiply(goods.getCenterGoodsRate())
.divide(n100,2,RoundingMode.DOWN);
goods.setUsedAmount(currentAmt);
centerUsed2 = centerUsed2.subtract(currentAmt);
}
}
}
}
//二次校验
BigDecimal totalSubjectAmt = BigDecimal.ZERO;
for (TbsActivitySubject activitySubject : activitySubjectList) {
Long subjectId = activitySubject.getSubjectId();
List<TbsActivityCenter> subjectCenterList = activityCenterListMap.get(subjectId);
BigDecimal totalCenterRate = BigDecimal.ZERO;
BigDecimal totalCenterAmt = BigDecimal.ZERO;
BigDecimal totalCenterUsedAmt = BigDecimal.ZERO;
BigDecimal subjectUsedAmt = activitySubject.getUsedAmount();
BigDecimal subjectAmt = activitySubject.getAmount();
totalSubjectAmt = totalSubjectAmt.add(subjectAmt);
for (TbsActivityCenter activityCenter : subjectCenterList) {
totalCenterRate = totalCenterRate.add(activityCenter.getCenterRate());
totalCenterAmt = totalCenterAmt.add(activityCenter.getCenterAmount());
totalCenterUsedAmt = totalCenterUsedAmt.add(activityCenter.getUsedAmount());
}
if(totalCenterAmt.compareTo(subjectAmt)!=0){
log.error("合计totalCenterUsedAmt金额异常:{}",activityId);
return "合计totalCenterUsedAmt金额异常";
}
if(totalCenterUsedAmt.compareTo(subjectUsedAmt)!=0){
log.error("合计subjectUsedAmt金额异常,将重新分配活动的成本中心金额:{}",activityId);
return "合计subjectUsedAmt金额异常";
}
if(n100.compareTo(totalCenterRate)!=0){
log.error("centerRate不为100:{}",activityId);
return "centerRate不为100";
}
List<TbsActivityCenterGoods> activityCenterGoodsListOfSubject = activityCenterGoodsListMap.get(subjectId);
for (TbsActivityCenter center : subjectCenterList) {
List<TbsActivityCenterGoods> goodsList = activityCenterGoodsListOfSubject.stream()
.filter(a->a.getCenterId().equals(center.getCenterId())&&a.getCenterType().equals(center.getCenterType()))
.collect(Collectors.toList());
final BigDecimal centerUsed = center.getUsedAmount();
final BigDecimal centerAmt = center.getCenterAmount();
BigDecimal totalGoodRate = BigDecimal.ZERO;
BigDecimal totalGoodUsed = BigDecimal.ZERO;
BigDecimal totalGoodAmt = BigDecimal.ZERO;
for (TbsActivityCenterGoods goods : goodsList) {
BigDecimal rate = goods.getCenterGoodsRate();
totalGoodRate = totalGoodRate.add(rate);
totalGoodAmt = totalGoodAmt.add(goods.getCenterGoodsAmount());
totalGoodUsed = totalGoodUsed.add(goods.getUsedAmount());
}
//重新分配比率
if(totalGoodRate.compareTo(n100)!=0){
log.error("totalGoodRate不为100:{}",activityId);
return "totalGoodRate不为100";
}
if(totalGoodAmt.compareTo(centerAmt)!=0){
log.error("totalGoodAmt:{}",activityId);
return "totalGoodAmt错误";
}
if(totalGoodUsed.compareTo(centerUsed)!=0){
log.error("totalGoodUsed:{}",activityId);
return "totalGoodUsed错误";
}
}
}
if(activity.getTotalAmount().compareTo(totalSubjectAmt)!=0){
log.error("科目和活动的申请金额不匹配");
return "科目和活动的申请金额不匹配";
}
// 处理预算占用
List<TbsBudgetLog> actBudgetLogs = budgetLogService.list(wrapper);
List<TbsBudgetLog> applyLogs = actBudgetLogs.stream().filter(a-> a.getOptType()!=4).collect(Collectors.toList());
List<TbsBudgetLog> releaseLogs = actBudgetLogs.stream().filter(a-> a.getOptType()==4).collect(Collectors.toList());
BigDecimal applyAmt = totalBudgetLogAmount(applyLogs);
BigDecimal releaseAmt = totalBudgetLogAmount(releaseLogs);
//检查下占用预算和释放
if(applyAmt.compareTo(activity.getTotalAmount())!=0){
log.warn("历史预算占用金额异常");
}
if(activity.getReleaseAmount()!=null && releaseAmt.compareTo(activity.getReleaseAmount())!=0){
log.warn("历史预算释放金额异常");
}
List<TbsBudgetLog> newApplyLogList = new ArrayList<>();
List<TbsBudgetLog> newReleaseLogList = new ArrayList<>();
for (TbsActivityCenterGoods goods : activityCenterGoodsList) {
List<TbsBudgetLog> goodApplyLogs = actBudgetLogs.stream().filter(a->
a.getSubjectId().equals(goods.getSubjectId())
&&a.getCenterType().equals(goods.getCenterType())
&&a.getCenterId().equals(goods.getCenterId())
&&a.getOptType()!=4
).collect(Collectors.toList());
List<TbsBudgetLog> goodReleaseLogs = actBudgetLogs.stream().filter(a->
a.getSubjectId().equals(goods.getSubjectId())
&&a.getCenterType().equals(goods.getCenterType())
&&a.getCenterId().equals(goods.getCenterId())
&&a.getOptType()==4
).collect(Collectors.toList());
if(goodApplyLogs.size()==0 && goodReleaseLogs.size() ==0
&&goods.getCenterGoodsAmount().equals(goods.getUsedAmount())){
continue;
}
// 新log
TbsBudgetLog newApplyLog = CopierUtil.copy(goodApplyLogs.get(0),new TbsBudgetLog());
newApplyLog.setId(null);
newApplyLog.setAmount(goods.getCenterGoodsAmount().negate());
newApplyLog.setOptType(1);
newApplyLogList.add(newApplyLog);
if(goodReleaseLogs.size()>0){
TbsBudgetLog newReleaseLog = CopierUtil.copy(goodReleaseLogs.get(0),new TbsBudgetLog());
newReleaseLog.setId(null);
newReleaseLog.setAmount(goods.getCenterGoodsAmount().subtract(goods.getUsedAmount()));
newReleaseLog.setOptType(4);
newReleaseLogList.add(newReleaseLog);
}
}
BigDecimal newApplyAmt = totalBudgetLogAmount(newApplyLogList);
BigDecimal newReleaseAmt = totalBudgetLogAmount(newReleaseLogList);
if(newApplyAmt.negate().compareTo(activity.getTotalAmount())!=0){
log.error("预算占用金额异常");
return "预算占用金额异常";
}
if(activity.getReleaseAmount()!=null && newReleaseAmt.compareTo(activity.getReleaseAmount())!=0){
log.error("预算释放金额异常 activity{},.getReleaseAmount():{} newReleaseAmt:{}",activityId,activity.getReleaseAmount(),newReleaseAmt);
return "预算释放金额异常";
}
if(updateSubject){
activitySubjectService.updateBatchById(activitySubjectList);
}
activityCenterService.updateBatchById(activityCenterList);
activityCenterGoodsService.updateBatchById(activityCenterGoodsList);
List<Long> logIds = actBudgetLogs.stream().map(a->a.getId()).collect(Collectors.toList());
if(!newApplyLogList.isEmpty()){
budgetLogService.saveBatch(newApplyLogList);
}
if(CollectionUtil.isNotEmpty(newReleaseLogList)){
budgetLogService.saveBatch(newReleaseLogList);
}
if(CollectionUtil.isNotEmpty(logIds)){
budgetLogService.removeBatchByIds(logIds);
}
return null;
}
private BigDecimal totalBudgetLogAmount(List<TbsBudgetLog> releaseLogs) {
BigDecimal amt = BigDecimal.ZERO;
if(releaseLogs!=null){
for (TbsBudgetLog reLog : releaseLogs) {
amt = amt.add(reLog.getAmount());
}
}
return amt;
}
}

6
src/main/java/com/qs/serve/modules/vtb/mapper/VtbVerificationMapper.java

@ -84,5 +84,11 @@ public interface VtbVerificationMapper extends BaseMapper<VtbVerification> {
*/
int updateCostExtUserByCostIds(@Param("costIds") List<String> costIds, @Param("obj") SysUser sysUser);
/**
* 获取活动核销金额
* @param actId
* @return
*/
BigDecimal getActivityVerificationAmt(@Param("actId")Long actId);
}

4
src/main/resources/application.yml

@ -56,9 +56,9 @@ mybatis-plus:
logging:
level:
ROOT: info
com.qs.serve: debug
#com.qs.serve: debug
#com.qs.serve.modules.his: info
com.qs.serve.modules.sys: debug
#com.qs.serve.modules.sys: debug
com.qs.serve.modules.tag: info
org.xnio.nio: info
org.springframework: info

18
src/main/resources/mapper/vtb/VtbVerfifcationMapper.xml

@ -26,5 +26,23 @@
</foreach>
</delete>
<select id="getActivityVerificationAmt" resultType="java.math.BigDecimal">
select
vtb_info.vtb_amt
from tbs_activity
left join tbs_cost_apply on tbs_activity.cost_apply_id = tbs_cost_apply.id
left join (
select activity_id,sum(amount) as vtb_amt from vtb_verification
where del_flag = 0 and verification_state = 1
and activity_id = #{actId}
group by activity_id
) vtb_info on vtb_info.activity_id = tbs_activity.id
where tbs_activity.del_flag = 0
and tbs_cost_apply.del_flag = 0
and tbs_cost_apply.charge_state in (1,2,3,7)
and tbs_cost_apply.cancel_flag = 0
and tbs_activity.id = #{actId}
</select>
</mapper>

Loading…
Cancel
Save