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. 12
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java
  9. 71
      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.TbsCostBirLog;
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.service.TbsActivityChannelService;
import com.qs.serve.modules.tbs.service.TbsCostApplyService;
@ -67,6 +68,7 @@ public class BirActivityCenterGoodsController {
private ProjectProperties projectProperties;
private TbsCostBirLogMapper tbsCostBirLogMapper;
private TbsActivityCenterGoodsMapper tbsActivityCenterGoodsMapper;
private TbsActivityMapper tbsActivityMapper;
@GetMapping("/toSyncBir")
public R<?> syncBir(Long costId){
@ -90,9 +92,11 @@ public class BirActivityCenterGoodsController {
@GetMapping("/toSyncBirToday")
public R<?> toSyncBirEcro2(){
//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<>();
for (Long id : ids) {
log.error("执行ID XXXX:{}",id);
try {
centerGoodsService.rebuildBir(Arrays.asList(id));
} 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)
.map(TbsActivity::getId).collect(Collectors.toList());
LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>();
birBaseActivityLqw.in(BirBaseActivity::getActivityId,ids);
birBaseActivityLqw.in(BirBaseActivity::getCostApplyId,costId);
super.baseMapper.delete(birBaseActivityLqw);
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
*/
@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)
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.util.List;
import java.util.Map;
/**
* 费用活动 Mapper
@ -15,6 +16,20 @@ import java.util.List;
*/
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")
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.BmsSupplier;
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.sys.service.SysConfigService;
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.TbsBudgetMapper;
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.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
@ -48,7 +53,10 @@ public class TbsActivityApplicationService {
private TbsBudgetCostItemService tbsBudgetCostItemService;
private SysConfigService configService;
private TbsActivityServiceImpl activityService;
private TbsActivityMapper activityMapper;
private final BmsSupplierService supplierService;
private final VtbVerificationService verificationService;
private DataAffairCommitService dataAffairCommitService;
/**
* 对比预算
@ -242,4 +250,31 @@ public class TbsActivityApplicationService {
budgetIds.addAll(budgetIdsSet);
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;
}
}
}
}
}

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

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

71
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.TbsCostApplyState;
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.TbsBudgetLogBuildUtil;
import com.qs.serve.modules.tbs.entity.*;
@ -478,18 +479,23 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
Assert.throwEx("用户编码不存在:"+userCode);
}
TbsActivity activity = activityService.getById(activityId);
if(!activity.getActivityState().equals(TbsActivityState.STATE_0_Todo)){
if(!throwEx){
return;
BirActivityCenterGoodsUtil.buildBir(activity.getCostApplyId());
if(ReleaseConst.UseFilter){
if(!activity.getActivityState().equals(TbsActivityState.STATE_0_Todo)){
if(!throwEx){
return;
}
Assert.throwEx("活动状态非待核销状态,操作失败");
}
Assert.throwEx("活动状态非待核销状态,操作失败");
}
if(activity.getCancelFlag().equals(1)){
Assert.throwEx("异动的活动,无法操作");
}
TbsCostApply costApply = costApplyService.getById(activity.getCostApplyId());
if(!costApply.getChargeState().equals(TbsCostApplyState.State_2_actioning.getCode())){
Assert.throwEx("状态不支持释放活动费用");
if(ReleaseConst.UseFilter){
if(!costApply.getChargeState().equals(TbsCostApplyState.State_2_actioning.getCode())){
Assert.throwEx("状态不支持释放活动费用");
}
}
BigDecimal releaseAmount = this.validActivity(costApply.getContractFlag()!=null
&&costApply.getContractFlag().equals(1),activity,false,false);
@ -504,6 +510,13 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
param.setFinishedFlag(1);
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();
fundFlow.setFundType(VtbFundFlowType.Release);
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);
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)){
budgetLogService.saveBatch(budgetLogList);
}
@ -1160,24 +1180,26 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
boolean isOverTime =
(activity.getPreCheckDate()!=null&&nowDate.isAfter(activity.getPreCheckDate())&&activity.getPreEndDateBack()==null)
||(activity.getPreEndDateBack()!=null&&nowDate.isAfter(activity.getPreEndDateBack()));
if(!cotractFlag && activity.getReopenFlag().equals(0)
&& filterActTime
&& isOverTime){
Assert.throwEx("活动已结束");
}
if(activity.getActivityState().equals(TbsActivityState.STATE_1_Baning)){
Assert.throwEx("活动冻结中");
}
if((activity.getReleaseFlag()!=null&&activity.getReleaseFlag().equals(1))||activity.getActivityState().equals(TbsActivityState.STATE_4_Release)){
Assert.throwEx("费用已释放");
}
if(activity.getFinishedFlag().equals(1)){
Assert.throwEx("活动已完成");
}
if(!isCurrentCommit){
boolean isCommitting = this.checkCommitting(activity.getId());
if(isCommitting){
Assert.throwEx("该活动核销中,操作失败");
if(ReleaseConst.UseFilter){
if(!cotractFlag && activity.getReopenFlag().equals(0)
&& filterActTime
&& isOverTime){
Assert.throwEx("活动已结束");
}
if(activity.getActivityState().equals(TbsActivityState.STATE_1_Baning)){
Assert.throwEx("活动冻结中");
}
if((activity.getReleaseFlag()!=null&&activity.getReleaseFlag().equals(1))||activity.getActivityState().equals(TbsActivityState.STATE_4_Release)){
Assert.throwEx("费用已释放");
}
if(activity.getFinishedFlag().equals(1)){
Assert.throwEx("活动已完成");
}
if(!isCurrentCommit){
boolean isCommitting = this.checkCommitting(activity.getId());
if(isCommitting){
Assert.throwEx("该活动核销中,操作失败");
}
}
}
List<VtbFundFlow> fundFlowList = fundFlowService.listByActivity(activity.getId(),VtbFundFlowType.Verification);
@ -1187,6 +1209,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
}
BigDecimal allowAmount = activity.getTotalAmount().subtract(totalFunFlow);
if(allowAmount.compareTo(BigDecimal.ZERO)<0){
log.error("无可用费用 activity id:{} code:{}",activity.getId(),activity.getActivityCode());
Assert.throwEx("无可用费用");
}
return allowAmount;

Loading…
Cancel
Save