Browse Source

协议类核销流程

v1.0
Yen 2 years ago
parent
commit
b5ceffce98
  1. 2
      src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java
  2. 1
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java
  3. 16
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
  4. 12
      src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationContactBo.java
  5. 132
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

2
src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java

@ -17,6 +17,8 @@ import java.util.List;
public interface TbsCostApplyService extends IService<TbsCostApply> {
TbsCostApply getByCode(String code);
/**
* 作废
* @param id

1
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java

@ -109,7 +109,6 @@ public class TbsCostApplyPart1ServiceImpl implements TbsCostApplyPart1Service {
List<Long> activityIds = activityList.stream().map(TbsActivity::getId).collect(Collectors.toList());
TbsActivity activity4Update = new TbsActivity();
activity4Update.setCancelFlag(1);
activity4Update.setCostApplyId(newCostApplyId);
LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>();
activityLqw.in(TbsActivity::getId,activityIds);
tbsActivityMapper.update(activity4Update,activityLqw);

16
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java

@ -115,7 +115,13 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
private TbsBudgetMatchApplication tbsBudgetMatchApplication;
@Override
public TbsCostApply getByCode(String code) {
LambdaQueryWrapper<TbsCostApply> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsCostApply::getCode,code);
lqw.eq(TbsCostApply::getCancelFlag,0);
return this.getOne(lqw,false);
}
@Override
@Transactional(rollbackFor = Exception.class)
@ -227,7 +233,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
List<TbsActivity> activityList = tbsActivityMapper.selectList(actLqw);
//判断是否进场费
if(tbsCostApply.getContractFlag().equals(2)){
if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(2)){
if (activityList.size()>1){
Assert.throwEx("进场费类型只能有一个活动");
}
@ -244,6 +250,12 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
List<TbsActivityPayCondition> payConditions = null;
if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(1)){
LambdaQueryWrapper<TbsCostContract> contractLambdaQueryWrapper = new LambdaQueryWrapper<>();
contractLambdaQueryWrapper.eq(TbsCostContract::getCostApplyId,id);
List<TbsCostContract> contractList = costContractMapper.selectList(contractLambdaQueryWrapper);
if(contractList.size()<1||contractList.get(0).getAttachIds()==null||contractList.get(0).getAttachIds().length<1){
Assert.throwEx("未补充合同内容或未上传合同!!");
}
LambdaQueryWrapper<TbsActivityPayCondition> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsActivityPayCondition::getCostApplyId,id);
payConditions = tbsActivityPayConditionMapper.selectList(lqw);

12
src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationContactBo.java

@ -12,17 +12,13 @@ import java.math.BigDecimal;
@Data
public class VtbVerificationContactBo {
/** 费用申请ID */
/** 费用申请编码 */
@NotNull
private Long costApplyId;
private String costApplyCode;
/** 活动ID */
/** 核销金额合计 */
@NotNull
private Long activityId;
/** 核销金额 */
@NotNull
private BigDecimal checkAmount;
private BigDecimal totalCheckAmount;
/** 核销人员工号 */
private String userCode;

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

@ -120,42 +120,20 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
Assert.throwEx("协议编码有误");
}
}
TbsCostApply costApply = costApplyService.getById(param.getCostApplyId());
TbsCostApply costApply = costApplyService.getByCode(param.getCostApplyCode());
if(!costApply.getContractFlag().equals(1)){
Assert.throwEx("非协议类费用,访问拦截");
}
if(!costApply.getChargeState().equals(TbsCostApplyState.State_2_actioning.getCode())){
Assert.throwEx("费用状态不支持");
}
TbsActivity activity = activityService.getById(param.getActivityId());
if(!activity.getCostApplyId().equals(param.getCostApplyId())){
Assert.throwEx("参数异常");
}
TbsActivity activity = activityService.listByCostApplyId(costApply.getId()).get(0);
BigDecimal surplus = activity.getTotalAmount().subtract(activity.getUsedAmount());
if(surplus.compareTo(param.getCheckAmount())<0){
if(surplus.compareTo(param.getTotalCheckAmount())<0){
Assert.throwEx("金额溢出");
}
Assert.throwEx("功能开发中...");
BigDecimal finalAmt = activity.getUsedAmount().add(param.getCheckAmount());
//更新费用
activity.setUsedAmount(finalAmt);
if(finalAmt.compareTo(activity.getTotalAmount())==0) {
activity.setActivityState(TbsActivityState.STATE_1_Finished);
}
activityService.updateById(activity);
//TODO 更新活动相关费用
//判断是否其它费用也完成
if(finalAmt.compareTo(activity.getTotalAmount())==0){
LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>();
activityLqw.ne(TbsActivity::getActivityState,TbsActivityState.STATE_1_Finished);
activityLqw.ne(TbsActivity::getReleaseFlag,1);
Long count = activityService.count(activityLqw);
if(count==0){
costApply.setChargeState(TbsCostApplyState.State_3_finished.getCode());
costApplyService.updateById(costApply);
}
}
//Assert.throwEx("功能开发中...");
//添加核销记录
VtbVerification verification = new VtbVerification();
@ -176,9 +154,101 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
verification.setWayTitle(param.getPayWay());
this.save(verification);
//List<VtbFundFlow> addFundFlowList = new ArrayList<>();
//buildFundFlows(verification.getId(), addFundFlowList, activityGoodsListOfSubjectCenter,currentCenterAmount);
//更新费用
BigDecimal finalAmt = activity.getUsedAmount().add(param.getTotalCheckAmount());
activity.setUsedAmount(finalAmt);
if(finalAmt.compareTo(activity.getTotalAmount())==0) {
activity.setActivityState(TbsActivityState.STATE_1_Finished);
}
activityService.updateById(activity);
//更新活动相关费用
List<TbsActivitySubject> activitySubjectList = activitySubjectService.listByActivityId(activity.getId());
List<TbsActivityCenter> activityCenterList = activityCenterService.listByActivity(activity.getId());
List<TbsActivityCenterGoods> activityCenterGoodsList = activityCenterGoodsService.listByActivityId(activity.getId());
BigDecimal tempTotal = finalAmt;
BigDecimal n100 = new BigDecimal("100");
BigDecimal n10000 = new BigDecimal("10000");
List<TbsActivityCenter> activityCenters4Update = new ArrayList<>();
List<TbsActivitySubject> activitySubject4Update = new ArrayList<>();
for (TbsActivitySubject activitySubject : activitySubjectList) {
BigDecimal surplusAmt = activitySubject.getAmount().subtract(activitySubject.getUsedAmount());
if(surplusAmt.compareTo(BigDecimal.ZERO)<=0){
continue;
}
List<TbsActivityCenterGoods> activityCenterGoods4Update = new ArrayList<>();
//当前科目支付金额
BigDecimal currentSubjectAmt = null;
if(tempTotal.compareTo(surplusAmt)<0){
//余额大于核销金额
currentSubjectAmt = tempTotal;
activitySubject.setUsedAmount(activitySubject.getUsedAmount().add(tempTotal));
//最后一项
for (TbsActivityCenter activityCenter : activityCenterList) {
if(activityCenter.getSubjectId().equals(activitySubject.getSubjectId())){
BigDecimal used = tempTotal.multiply(activityCenter.getCenterRate()).divide(n100,2,RoundingMode.HALF_DOWN);
activityCenter.setUsedAmount(activityCenter.getUsedAmount().add(used));
activityCenters4Update.add(activityCenter);
}
}
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
if(centerGoods.getSubjectId().equals(activitySubject.getSubjectId())){
BigDecimal used = tempTotal.multiply(centerGoods.getCenterRate())
.multiply(centerGoods.getCenterGoodsRate())
.divide(n10000,2,RoundingMode.HALF_DOWN);
centerGoods.setUsedAmount(centerGoods.getUsedAmount().add(used));
activityCenterGoods4Update.add(centerGoods);
}
}
break;
}else {
//余额小于于核销金额
currentSubjectAmt = surplusAmt;
tempTotal = tempTotal.subtract(surplusAmt);
//设置全部完成
for (TbsActivityCenter activityCenter : activityCenterList) {
if(activityCenter.getSubjectId().equals(activitySubject.getSubjectId())){
activityCenter.setUsedAmount(activityCenter.getCenterAmount());
activityCenters4Update.add(activityCenter);
}
}
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
if(centerGoods.getSubjectId().equals(activitySubject.getSubjectId())){
centerGoods.setUsedAmount(centerGoods.getCenterGoodsAmount());
activityCenterGoods4Update.add(centerGoods);
}
}
activitySubject.setUsedAmount(activitySubject.getAmount());
}
activitySubject4Update.add(activitySubject);
//跟随活动科目同级
if(CollectionUtil.isNotEmpty(activityCenterGoods4Update)){
activityCenterGoodsService.updateBatchById(activityCenterGoods4Update);
List<VtbFundFlow> addFundFlowList = new ArrayList<>();
buildFundFlows(verification.getId(), addFundFlowList, activityCenterGoods4Update,currentSubjectAmt);
if(CollectionUtil.isNotEmpty(addFundFlowList)){
fundFlowService.saveBatch(addFundFlowList);
}
}
}
if(CollectionUtil.isNotEmpty(activitySubject4Update)){
activitySubjectService.updateBatchById(activitySubject4Update);
}
if(CollectionUtil.isNotEmpty(activityCenters4Update)){
activityCenterService.updateBatchById(activityCenters4Update);
}
//判断是否其它费用也完成
if(finalAmt.compareTo(activity.getTotalAmount())==0){
LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>();
activityLqw.ne(TbsActivity::getActivityState,TbsActivityState.STATE_1_Finished);
activityLqw.ne(TbsActivity::getReleaseFlag,1);
Long count = activityService.count(activityLqw);
if(count==0){
costApply.setChargeState(TbsCostApplyState.State_3_finished.getCode());
costApplyService.updateById(costApply);
}
}
}
@Override
@ -904,7 +974,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
//可用金额
BigDecimal allowBalance = centerGoods.getCenterGoodsAmount().subtract(centerGoods.getUsedAmount());
if(allowBalance.compareTo(BigDecimal.ZERO)==0){
log.debug("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue());
log.warn("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue());
unMatchAmount.add(currentTimeAmount);
continue;
}
@ -913,7 +983,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
if(allowBalance.compareTo(currentTimeAmount)<1){
//统计不匹配金额
unMatchAmount = unMatchAmount.add(currentTimeAmount.subtract(allowBalance));
log.debug("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue());
log.warn("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue());
currentTimeAmount = allowBalance;
}else {
tempBalance = allowBalance.subtract(currentTimeAmount);

Loading…
Cancel
Save