Browse Source

fix:拦截页面传参异常,导致出现负数

feat: 拓展修复释放费用补偿
checkBack
Yen 1 year ago
parent
commit
650f86e200
  1. 6
      src/main/java/com/qs/serve/modules/bir/controller/BirActivityCenterGoodsController.java
  2. 2
      src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java
  3. 14
      src/main/java/com/qs/serve/modules/tbs/common/consts/ReleaseConst.java
  4. 10
      src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java
  5. 6
      src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java
  6. 15
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityMapper.java
  7. 35
      src/main/java/com/qs/serve/modules/tbs/service/TbsActivityApplicationService.java
  8. 10
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java
  9. 23
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

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

@ -34,6 +34,7 @@ import com.qs.serve.modules.tbs.entity.TbsActivityChannel;
import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.entity.TbsCostApply;
import com.qs.serve.modules.tbs.entity.TbsCostBirLog; import com.qs.serve.modules.tbs.entity.TbsCostBirLog;
import com.qs.serve.modules.tbs.mapper.TbsActivityCenterGoodsMapper; import com.qs.serve.modules.tbs.mapper.TbsActivityCenterGoodsMapper;
import com.qs.serve.modules.tbs.mapper.TbsActivityMapper;
import com.qs.serve.modules.tbs.mapper.TbsCostBirLogMapper; import com.qs.serve.modules.tbs.mapper.TbsCostBirLogMapper;
import com.qs.serve.modules.tbs.service.TbsActivityChannelService; import com.qs.serve.modules.tbs.service.TbsActivityChannelService;
import com.qs.serve.modules.tbs.service.TbsCostApplyService; import com.qs.serve.modules.tbs.service.TbsCostApplyService;
@ -67,6 +68,7 @@ public class BirActivityCenterGoodsController {
private ProjectProperties projectProperties; private ProjectProperties projectProperties;
private TbsCostBirLogMapper tbsCostBirLogMapper; private TbsCostBirLogMapper tbsCostBirLogMapper;
private TbsActivityCenterGoodsMapper tbsActivityCenterGoodsMapper; private TbsActivityCenterGoodsMapper tbsActivityCenterGoodsMapper;
private TbsActivityMapper tbsActivityMapper;
@GetMapping("/toSyncBir") @GetMapping("/toSyncBir")
public R<?> syncBir(Long costId){ public R<?> syncBir(Long costId){
@ -90,9 +92,11 @@ public class BirActivityCenterGoodsController {
@GetMapping("/toSyncBirToday") @GetMapping("/toSyncBirToday")
public R<?> toSyncBirEcro2(){ public R<?> toSyncBirEcro2(){
//Long[] ids = new Long[]{301897L}; //Long[] ids = new Long[]{301897L};
Set<Long> ids = tbsActivityCenterGoodsMapper.selectUpdateCostApplyIds(); List<Long> ids = tbsActivityMapper.selectReleaseCostIds();
//Set<Long> ids = tbsActivityCenterGoodsMapper.selectUpdateCostApplyIds();
List<Long> errIds = new ArrayList<>(); List<Long> errIds = new ArrayList<>();
for (Long id : ids) { for (Long id : ids) {
log.error("执行ID XXXX:{}",id);
try { try {
centerGoodsService.rebuildBir(Arrays.asList(id)); centerGoodsService.rebuildBir(Arrays.asList(id));
} catch (Exception e) { } catch (Exception e) {

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

@ -52,7 +52,7 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
List<Long> ids = activityList.stream().filter(a->a.getId()!=null) List<Long> ids = activityList.stream().filter(a->a.getId()!=null)
.map(TbsActivity::getId).collect(Collectors.toList()); .map(TbsActivity::getId).collect(Collectors.toList());
LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>();
birBaseActivityLqw.in(BirBaseActivity::getActivityId,ids); birBaseActivityLqw.in(BirBaseActivity::getCostApplyId,costId);
super.baseMapper.delete(birBaseActivityLqw); super.baseMapper.delete(birBaseActivityLqw);
LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>();

14
src/main/java/com/qs/serve/modules/tbs/common/consts/ReleaseConst.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.tbs.common.consts;
/**
* @author YenHex
* @since 2024/5/22
*/
public class ReleaseConst {
/**
* 默认开启true需要修复数据时打开false
*/
public static final boolean UseFilter = true;
}

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

@ -443,6 +443,16 @@ public class TbsActivityController {
return R.ok(); return R.ok();
} }
/**
* 释放活动费用
* @return
*/
@PostMapping("/compenstateRelease")
@SysLog(module = SystemModule.Budget, title = "费用活动", biz = BizType.DELETE)
public R<?> release(){
tbsActivityApplicationService.compenstateRelease();
return R.ok();
}
/** /**
* 释放活动费用 * 释放活动费用

6
src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java

@ -291,6 +291,12 @@ public class TbsActivity implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private Long birActId; private Long birActId;
/**
* 核销ID
*/
@JsonIgnore
@TableField(exist = false)
private Long verificationId;
/** /**
* 处理预警时间 * 处理预警时间

15
src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityMapper.java

@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Select;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 费用活动 Mapper * 费用活动 Mapper
@ -15,6 +16,20 @@ import java.util.List;
*/ */
public interface TbsActivityMapper extends BaseMapper<TbsActivity> { public interface TbsActivityMapper extends BaseMapper<TbsActivity> {
@Select("SELECT cost_apply_id FROM `tbs_activity` where del_flag = 0 and release_flag = 1 and activity_code LIKE '24%' GROUP BY cost_apply_id order by cost_apply_id")
List<Long> selectReleaseCostIds();
@Select("select vtb.id as verification_id ,act.* from tbs_activity act left join vtb_verification vtb on act.id = vtb.activity_id " +
" where " +
" vtb.verification_state = 1 and " +
" reg_release_flag = 1 " +
" and act.release_flag = 0 " +
" and act.del_flag = 0 and vtb.del_flag = 0 " +
" and act.activity_code like '2%' " +
" and act.cancel_flag = 0 " +
" and act.used_amount != act.total_amount")
List<TbsActivity> selectUnRelease();
@Select("select sum(tbs_activity.used_amount) from tbs_activity where cost_apply_id = #{costId} and del_flag = 0") @Select("select sum(tbs_activity.used_amount) from tbs_activity where cost_apply_id = #{costId} and del_flag = 0")
BigDecimal sumCostUsedAmount(@Param("costId") Long costId); BigDecimal sumCostUsedAmount(@Param("costId") Long costId);

35
src/main/java/com/qs/serve/modules/tbs/service/TbsActivityApplicationService.java

@ -8,6 +8,8 @@ import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.modules.bms.entity.BmsSubject; import com.qs.serve.modules.bms.entity.BmsSubject;
import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.bms.entity.BmsSupplier;
import com.qs.serve.modules.bms.service.BmsSupplierService; import com.qs.serve.modules.bms.service.BmsSupplierService;
import com.qs.serve.modules.data.entity.DataAffairCommit;
import com.qs.serve.modules.data.service.DataAffairCommitService;
import com.qs.serve.modules.goods.entity.dto.TbsCenterDto; import com.qs.serve.modules.goods.entity.dto.TbsCenterDto;
import com.qs.serve.modules.sys.service.SysConfigService; import com.qs.serve.modules.sys.service.SysConfigService;
import com.qs.serve.modules.tbs.common.TbsGoodsType; import com.qs.serve.modules.tbs.common.TbsGoodsType;
@ -22,6 +24,9 @@ import com.qs.serve.modules.tbs.mapper.TbsActivityGoodsMapper;
import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; import com.qs.serve.modules.tbs.mapper.TbsActivityMapper;
import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper;
import com.qs.serve.modules.tbs.service.impl.TbsActivityServiceImpl; import com.qs.serve.modules.tbs.service.impl.TbsActivityServiceImpl;
import com.qs.serve.modules.vtb.entity.VtbFundFlow;
import com.qs.serve.modules.vtb.entity.VtbVerification;
import com.qs.serve.modules.vtb.service.VtbVerificationService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A; import org.checkerframework.checker.units.qual.A;
@ -48,7 +53,10 @@ public class TbsActivityApplicationService {
private TbsBudgetCostItemService tbsBudgetCostItemService; private TbsBudgetCostItemService tbsBudgetCostItemService;
private SysConfigService configService; private SysConfigService configService;
private TbsActivityServiceImpl activityService; private TbsActivityServiceImpl activityService;
private TbsActivityMapper activityMapper;
private final BmsSupplierService supplierService; private final BmsSupplierService supplierService;
private final VtbVerificationService verificationService;
private DataAffairCommitService dataAffairCommitService;
/** /**
* 对比预算 * 对比预算
@ -242,4 +250,31 @@ public class TbsActivityApplicationService {
budgetIds.addAll(budgetIdsSet); budgetIds.addAll(budgetIdsSet);
return budgetItemList; return budgetItemList;
} }
/**
* 补偿不执行释放的活动
*/
public void compenstateRelease(){
List<TbsActivity> activityList = activityMapper.selectUnRelease();
for (TbsActivity activity : activityList) {
Long[] ids = new Long[]{1676500L};
if(Arrays.stream(ids).anyMatch(a->a.equals(activity.getId()))){
continue;
}
List<DataAffairCommit> affairCommitList = dataAffairCommitService.list(new LambdaQueryWrapper<DataAffairCommit>()
.eq(DataAffairCommit::getTargetCode,"CheckCost")
.eq(DataAffairCommit::getTargetId,activity.getVerificationId())
);
// 判断特殊情况
// 1.是否有继续核销,有新则发送短信通知
// 2.判断是否已核销没更新字段
for (DataAffairCommit affairCommit : affairCommitList) {
if(affairCommit.getReleaseFlag().equals(1)){
verificationService.release(activity.getId(),affairCommit.getUserCode(),false);
break;
}
}
}
}
} }

10
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java

@ -225,8 +225,10 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
List<TbsActivityCenterGoods> actCenterGoodsList = actCenterGoodsMap.get(subjectId); List<TbsActivityCenterGoods> actCenterGoodsList = actCenterGoodsMap.get(subjectId);
BigDecimal rate = BigDecimal.ZERO; BigDecimal rate = BigDecimal.ZERO;
for (TbsActivityCenterGoods centerGoods : actCenterGoodsList) { for (TbsActivityCenterGoods centerGoods : actCenterGoodsList) {
if(rate.compareTo(BigDecimal.ZERO)>=0){
rate = rate.add(centerGoods.getCenterGoodsRate()); rate = rate.add(centerGoods.getCenterGoodsRate());
} }
}
BigDecimal tmp = rate.divide(new BigDecimal(100)); BigDecimal tmp = rate.divide(new BigDecimal(100));
if(tmp.compareTo(new BigDecimal(tmp.longValue()))!=0){ if(tmp.compareTo(new BigDecimal(tmp.longValue()))!=0){
Assert.throwEx("成本中心与商品分配比例有误"); Assert.throwEx("成本中心与商品分配比例有误");
@ -254,6 +256,11 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
activityGoodsService.saveBatch(activityGoodsList); activityGoodsService.saveBatch(activityGoodsList);
activitySubjectService.saveBatch(activitySubjects); activitySubjectService.saveBatch(activitySubjects);
activityCenterService.saveBatch(activityCenterList); activityCenterService.saveBatch(activityCenterList);
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
if(centerGoods.getCenterGoodsRate().compareTo(BigDecimal.ZERO)<0){
Assert.throwEx("成本中心与商品分配比例有误,请重新检测商品比例");
}
}
activityCenterGoodsService.saveBatch(activityCenterGoodsList); activityCenterGoodsService.saveBatch(activityCenterGoodsList);
} }
@ -550,6 +557,9 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
activityCenter.setOrgCenterAmount(centerBo.getCenterAmount()); activityCenter.setOrgCenterAmount(centerBo.getCenterAmount());
activityCenter.setCenterType(centerBo.getCenterType()); activityCenter.setCenterType(centerBo.getCenterType());
totalAmount = totalAmount.add(centerBo.getCenterAmount()); totalAmount = totalAmount.add(centerBo.getCenterAmount());
if(centerBo.getCenterRate().compareTo(BigDecimal.ZERO)<0){
Assert.throwEx("成本中心费用配比有误");
}
totalRate = totalRate.add(centerBo.getCenterRate()); totalRate = totalRate.add(centerBo.getCenterRate());
activityCenter.setCenterId(centerBo.getCenterId()); activityCenter.setCenterId(centerBo.getCenterId());
String centerType = centerBo.getCenterType(); String centerType = centerBo.getCenterType();

23
src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

@ -35,6 +35,7 @@ import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.tbs.common.TbsActivityState; import com.qs.serve.modules.tbs.common.TbsActivityState;
import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.common.TbsCostApplyState;
import com.qs.serve.modules.tbs.common.TbsSeeYonConst; import com.qs.serve.modules.tbs.common.TbsSeeYonConst;
import com.qs.serve.modules.tbs.common.consts.ReleaseConst;
import com.qs.serve.modules.tbs.common.util.QuarterUtil; import com.qs.serve.modules.tbs.common.util.QuarterUtil;
import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil; import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil;
import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.*;
@ -478,19 +479,24 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
Assert.throwEx("用户编码不存在:"+userCode); Assert.throwEx("用户编码不存在:"+userCode);
} }
TbsActivity activity = activityService.getById(activityId); TbsActivity activity = activityService.getById(activityId);
BirActivityCenterGoodsUtil.buildBir(activity.getCostApplyId());
if(ReleaseConst.UseFilter){
if(!activity.getActivityState().equals(TbsActivityState.STATE_0_Todo)){ if(!activity.getActivityState().equals(TbsActivityState.STATE_0_Todo)){
if(!throwEx){ if(!throwEx){
return; return;
} }
Assert.throwEx("活动状态非待核销状态,操作失败"); Assert.throwEx("活动状态非待核销状态,操作失败");
} }
}
if(activity.getCancelFlag().equals(1)){ if(activity.getCancelFlag().equals(1)){
Assert.throwEx("异动的活动,无法操作"); Assert.throwEx("异动的活动,无法操作");
} }
TbsCostApply costApply = costApplyService.getById(activity.getCostApplyId()); TbsCostApply costApply = costApplyService.getById(activity.getCostApplyId());
if(ReleaseConst.UseFilter){
if(!costApply.getChargeState().equals(TbsCostApplyState.State_2_actioning.getCode())){ if(!costApply.getChargeState().equals(TbsCostApplyState.State_2_actioning.getCode())){
Assert.throwEx("状态不支持释放活动费用"); Assert.throwEx("状态不支持释放活动费用");
} }
}
BigDecimal releaseAmount = this.validActivity(costApply.getContractFlag()!=null BigDecimal releaseAmount = this.validActivity(costApply.getContractFlag()!=null
&&costApply.getContractFlag().equals(1),activity,false,false); &&costApply.getContractFlag().equals(1),activity,false,false);
TbsActivity param = new TbsActivity(); TbsActivity param = new TbsActivity();
@ -504,6 +510,13 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
param.setFinishedFlag(1); param.setFinishedFlag(1);
activityService.updateById(param); activityService.updateById(param);
//移除历史记录
fundFlowService.remove(
new LambdaQueryWrapper<VtbFundFlow>()
.eq(VtbFundFlow::getFundType,VtbFundFlowType.Release)
.eq(VtbFundFlow::getCostApplyId,activity.getCostApplyId())
.eq(VtbFundFlow::getActivityId,activity.getId())
);
VtbFundFlow fundFlow = new VtbFundFlow(); VtbFundFlow fundFlow = new VtbFundFlow();
fundFlow.setFundType(VtbFundFlowType.Release); fundFlow.setFundType(VtbFundFlowType.Release);
fundFlow.setVerificationId(0L); fundFlow.setVerificationId(0L);
@ -545,6 +558,13 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
TbsBudgetLog budgetLog = TbsBudgetLogBuildUtil.buildTbsBudgetLog(BudgetLogOptFlag.State_4,sysUser,costApply,currCostItem,currentBudget,amount,activity); TbsBudgetLog budgetLog = TbsBudgetLogBuildUtil.buildTbsBudgetLog(BudgetLogOptFlag.State_4,sysUser,costApply,currCostItem,currentBudget,amount,activity);
budgetLogList.add(budgetLog); budgetLogList.add(budgetLog);
} }
//移除历史记录
budgetLogService.remove(new LambdaQueryWrapper<TbsBudgetLog>()
.eq(TbsBudgetLog::getCostApplyId,activity.getCostApplyId())
.eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_4.getCode())
.eq(TbsBudgetLog::getActivityId,activity.getId())
);
//重新保存
if(CollectionUtil.isNotEmpty(budgetLogList)){ if(CollectionUtil.isNotEmpty(budgetLogList)){
budgetLogService.saveBatch(budgetLogList); budgetLogService.saveBatch(budgetLogList);
} }
@ -1160,6 +1180,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
boolean isOverTime = boolean isOverTime =
(activity.getPreCheckDate()!=null&&nowDate.isAfter(activity.getPreCheckDate())&&activity.getPreEndDateBack()==null) (activity.getPreCheckDate()!=null&&nowDate.isAfter(activity.getPreCheckDate())&&activity.getPreEndDateBack()==null)
||(activity.getPreEndDateBack()!=null&&nowDate.isAfter(activity.getPreEndDateBack())); ||(activity.getPreEndDateBack()!=null&&nowDate.isAfter(activity.getPreEndDateBack()));
if(ReleaseConst.UseFilter){
if(!cotractFlag && activity.getReopenFlag().equals(0) if(!cotractFlag && activity.getReopenFlag().equals(0)
&& filterActTime && filterActTime
&& isOverTime){ && isOverTime){
@ -1180,6 +1201,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
Assert.throwEx("该活动核销中,操作失败"); Assert.throwEx("该活动核销中,操作失败");
} }
} }
}
List<VtbFundFlow> fundFlowList = fundFlowService.listByActivity(activity.getId(),VtbFundFlowType.Verification); List<VtbFundFlow> fundFlowList = fundFlowService.listByActivity(activity.getId(),VtbFundFlowType.Verification);
BigDecimal totalFunFlow = BigDecimal.ZERO; BigDecimal totalFunFlow = BigDecimal.ZERO;
for (VtbFundFlow fundFlow : fundFlowList) { for (VtbFundFlow fundFlow : fundFlowList) {
@ -1187,6 +1209,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
} }
BigDecimal allowAmount = activity.getTotalAmount().subtract(totalFunFlow); BigDecimal allowAmount = activity.getTotalAmount().subtract(totalFunFlow);
if(allowAmount.compareTo(BigDecimal.ZERO)<0){ if(allowAmount.compareTo(BigDecimal.ZERO)<0){
log.error("无可用费用 activity id:{} code:{}",activity.getId(),activity.getActivityCode());
Assert.throwEx("无可用费用"); Assert.throwEx("无可用费用");
} }
return allowAmount; return allowAmount;

Loading…
Cancel
Save