diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java index b34c52d1..a85c9a25 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java @@ -59,6 +59,11 @@ public class TbsAffairCommitBo { */ private List affairSubjectLines; + /** + * 成本中心维度,修改金额列表(核销和费用审批接口专用) + */ + private List affairSubjectCenterLines; + @Data @@ -81,4 +86,36 @@ public class TbsAffairCommitBo { private Integer countPerson; } + @Data + public static class AffairSubjectCenterLine{ + + /** + * 科目id(费用申请,活动科目id) + */ + private Long subjectId; + + /** 场次 */ + private Integer countSession; + + /** 人数 */ + private Integer countPerson; + + + private List centerItemLines; + + } + + @Data + public static class AffairSubjectCenterItemLine{ + + /** 活动成本中心ID */ + private Long activityCenterId; + + /** + * 调整金额 + */ + private BigDecimal centerAmount; + + } + } diff --git a/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java b/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java index ed86d761..24d9018c 100644 --- a/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java +++ b/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java @@ -20,14 +20,12 @@ import com.qs.serve.modules.sys.service.SysPostUserService; import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tbs.common.TbsSeeYonConst; import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.entity.TbsActivityCenter; import com.qs.serve.modules.tbs.entity.TbsActivitySubject; import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo; -import com.qs.serve.modules.tbs.service.TbsActivityPayConditionService; -import com.qs.serve.modules.tbs.service.TbsActivityService; -import com.qs.serve.modules.tbs.service.TbsActivitySubjectService; -import com.qs.serve.modules.tbs.service.TbsCostApplyService; +import com.qs.serve.modules.tbs.service.*; import com.qs.serve.modules.vtb.common.VtbVerificationState; import com.qs.serve.modules.vtb.entity.*; import com.qs.serve.modules.vtb.entity.bo.VtbVerificationCenterCommitBo; @@ -63,7 +61,9 @@ public class VtbVerificationController { private VtbVerificationChannelService vtbVerificationChannelService; private VtbVerificationChannelPointService vtbVerificationChannelPointService; private VtbVerificationSubjectService vtbVerificationSubjectService; + private VtbVerificationSubjectCenterService vtbVerificationSubjectCenterService; private TbsActivitySubjectService activitySubjectService; + private TbsActivityCenterService activityCenterService; private TbsCostApplyService tbsCostApplyService; private TbsActivityService tbsActivityService; private TbsActivityPayConditionService tbsActivityPayConditionService; @@ -211,7 +211,9 @@ public class VtbVerificationController { LambdaQueryWrapper subjectLqw = new LambdaQueryWrapper<>(); subjectLqw.eq(VtbVerificationSubject::getVerificationId,id); List subjectList = vtbVerificationSubjectService.list(subjectLqw); + List subjectCenterList = vtbVerificationSubjectCenterService.listByVerificationId(Long.parseLong(id)); List activitySubjects = activitySubjectService.listByActivityId(vtbVerification.getActivityId()); + List activityCenters = activityCenterService.listByActivity(vtbVerification.getActivityId()); for (VtbVerificationSubject verificationSubject : subjectList) { for (TbsActivitySubject activitySubject : activitySubjects) { if(verificationSubject.getSubjectId().equals(activitySubject.getSubjectId())){ @@ -221,6 +223,21 @@ public class VtbVerificationController { } } } + for (VtbVerificationSubjectCenter verCenter : subjectCenterList) { + for (TbsActivityCenter actCenter : activityCenters) { + if(verCenter.getActivityCenterId().equals(actCenter.getId())){ + BigDecimal used = actCenter.getUsedAmount()==null?BigDecimal.ZERO:actCenter.getUsedAmount(); + BigDecimal diff = actCenter.getCenterAmount().subtract(used); + verCenter.setMaxChangeAmount(diff); + } + } + for (VtbVerificationSubject subject : subjectList) { + if(verCenter.getSubjectId().equals(subject.getSubjectId())){ + subject.getSubjectCenterList().add(verCenter); + break; + } + } + } vtbVerification.setActivityInfo(tbsActivityService.getById(vtbVerification.getActivityId())); vtbVerification.setSubjectList(subjectList); return R.ok(vtbVerification); diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java index ec967173..43c630dd 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java @@ -16,6 +16,9 @@ import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotNull; import javax.validation.constraints.NotBlank; +import java.util.ArrayList; +import java.util.List; + /** * 核销科目费用 实体类 * @author YenHex @@ -153,5 +156,8 @@ public class VtbVerificationSubject implements Serializable { /** 可更变的最大金额 */ @TableField(exist = false) private BigDecimal maxChangeAmount; + + @TableField(exist = false) + private List subjectCenterList = new ArrayList<>(); } diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubjectCenter.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubjectCenter.java index f78a017f..ebfde80b 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubjectCenter.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubjectCenter.java @@ -154,6 +154,9 @@ public class VtbVerificationSubjectCenter implements Serializable { /** 活动成本中心ID */ private Long activityCenterId; + /** 可更变的最大金额 */ + @TableField(exist = false) + private BigDecimal maxChangeAmount; public static VtbVerificationSubjectCenter toNewObject(VtbVerificationSubjectCenter source){ VtbVerificationSubjectCenter verificationSubjectCenter = new VtbVerificationSubjectCenter(); diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCenterBo.java b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCenterBo.java index c7c46c36..96fdbab7 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCenterBo.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCenterBo.java @@ -51,7 +51,7 @@ public class VtbVerificationSubjectCenterBo implements Serializable { private List centerAmount; @Data - public class ChangeSubjectCenter{ + public static class ChangeSubjectCenter{ @NotNull(message = "subjectCenterId不能为空") private Long subjectCenterId; diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java index 33dd9580..39226a44 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java @@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qs.serve.common.framework.manager.AsyncFactory; import com.qs.serve.common.framework.manager.AsyncManager; import com.qs.serve.common.model.dto.R; -import com.qs.serve.common.util.AuthContextUtils; -import com.qs.serve.common.util.CollectionUtil; -import com.qs.serve.common.util.CopierUtil; -import com.qs.serve.common.util.SpringUtils; +import com.qs.serve.common.util.*; import com.qs.serve.modules.data.entity.DataAffairCommit; import com.qs.serve.modules.data.mapper.DataAffairCommitMapper; import com.qs.serve.modules.seeyon.entity.CtpAffair; @@ -29,10 +26,7 @@ import com.qs.serve.modules.tbs.service.TbsActivityPayConditionService; import com.qs.serve.modules.tbs.service.TbsActivityService; import com.qs.serve.modules.tbs.service.TbsCostApplyService; import com.qs.serve.modules.vtb.common.VtbVerificationState; -import com.qs.serve.modules.vtb.entity.VtbVerification; -import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; -import com.qs.serve.modules.vtb.entity.VtbVerificationYard; -import com.qs.serve.modules.vtb.entity.VtbVerificationYardItem; +import com.qs.serve.modules.vtb.entity.*; import com.qs.serve.modules.vtb.service.impl.VtbVerificationOperationServiceImpl; import com.qs.serve.task.TbsTask; import lombok.AllArgsConstructor; @@ -63,6 +57,7 @@ public class VtbVerificationApplication { private VtbVerificationService vtbVerificationService; private VtbVerificationSubjectService vtbVerificationSubjectService; + private VtbVerificationSubjectCenterService vtbVerificationSubjectCenterService; private VtbVerificationYardService yardService; private VtbVerificationYardItemService yardItemService; private final TbsActivityPayConditionService activityPayConditionService; @@ -76,24 +71,12 @@ public class VtbVerificationApplication { public R commitAffair(@RequestBody @Valid TbsAffairCommitBo affairCommit){ VtbVerification verification = vtbVerificationService.getById(affairCommit.getCostApplyId()); if(!verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){ - return R.error("费用申请处于未非审批状态!"); + Assert.throwEx("费用申请处于未非审批状态!"); } - if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){ - List verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId()); - for (VtbVerificationSubject verificationSubject : verificationSubjects) { - for (TbsAffairCommitBo.AffairSubjectLine subjectLine : affairCommit.getAffairSubjectLines()) { - if(subjectLine.getSubjectId()==null||subjectLine.getAmount()==null){ - return R.error("AffairSubjectLines参数错误"); - } - if(subjectLine.getSubjectId().equals(verificationSubject.getSubjectId())){ - if(subjectLine.getAmount().compareTo(verificationSubject.getUsedAmountRecord())>0){ - return R.error("科目["+verificationSubject.getSubjectName()+"]额度不足"); - } - } - } - } - } - + List verificationSubjectCenterList = vtbVerificationSubjectCenterService.listByVerificationId(verification.getId()); + List verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId()); + //检测参数的金额 + this.checkParamAmount(affairCommit, verificationSubjectCenterList, verificationSubjects); boolean isBackCommit = affairCommit.getState()==2; R result = seeYonService.commonCommit(affairCommit, TbsSeeYonConst.CostCheckConf.Code(),verification.getSyFormId()); if(result.getStatus()==200){ @@ -124,6 +107,61 @@ public class VtbVerificationApplication { return R.error("远程调用失败"); } + /** + * 检查参数的金额 + * @param affairCommit + * @param verificationSubjectCenterList + * @param verificationSubjects + */ + private void checkParamAmount(TbsAffairCommitBo affairCommit, List verificationSubjectCenterList, List verificationSubjects) { + boolean isChangeCommit = verificationSubjectCenterList.size()>0; + boolean isAutoCommit = verificationSubjects.size()>0; + if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){ + if(isChangeCommit){ + Assert.throwEx("当前核销不支持科目维度修改金额"); + } + for (VtbVerificationSubject verificationSubject : verificationSubjects) { + for (TbsAffairCommitBo.AffairSubjectLine subjectLine : affairCommit.getAffairSubjectLines()) { + if(subjectLine.getSubjectId()==null||subjectLine.getAmount()==null){ + Assert.throwEx("AffairSubjectLines参数错误"); + } + if(subjectLine.getSubjectId().equals(verificationSubject.getSubjectId())){ + if(subjectLine.getAmount().compareTo(verificationSubject.getUsedAmountRecord())>0){ + Assert.throwEx("科目["+verificationSubject.getSubjectName()+"]额度不足"); + } + } + } + } + } + if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectCenterLines())){ + if(isAutoCommit){ + Assert.throwEx("当前核销不支持成本中心维度修改金额"); + } + for (TbsAffairCommitBo.AffairSubjectCenterLine subjectCenterLine : affairCommit.getAffairSubjectCenterLines()) { + VtbVerificationSubjectCenter currSubjectCenter = null; + BigDecimal changeAmt = null; + for (VtbVerificationSubjectCenter subjectCenter : verificationSubjectCenterList) { + if(subjectCenterLine.getSubjectId().equals(subjectCenter.getSubjectId())){ + currSubjectCenter = subjectCenter; + for (TbsAffairCommitBo.AffairSubjectCenterItemLine itemLine : subjectCenterLine.getCenterItemLines()) { + if(subjectCenter.getActivityCenterId().equals(itemLine.getActivityCenterId())){ + changeAmt = itemLine.getCenterAmount(); + break; + } + } + break; + } + } + if(currSubjectCenter==null){ + Assert.throwEx("当前核销不支持成本中心维度修改金额"); + } + if(changeAmt!=null && changeAmt.compareTo(currSubjectCenter.getUsedAmountRecord())>0){ + Assert.throwEx("["+currSubjectCenter.getSubjectName()+"-"+currSubjectCenter.getCenterName()+"]额度不足"); + } + } + } + } + @NotNull @Transactional(rollbackFor = Exception.class) public R commitAffairSuccess(TbsAffairCommitBo affairCommit, VtbVerification verification, boolean isBackCommit, String flag) { @@ -182,6 +220,9 @@ public class VtbVerificationApplication { //非终止或者驳回,保存审批线金额明细 BigDecimal totalAmount = BigDecimal.ZERO; if(!isStop){ + List subjectCenters = vtbVerificationSubjectCenterService.listByVerificationId(verification.getId()); + //isCenterCommit 代表自定义成本中心维度递交 + boolean isCenterCommit = subjectCenters.size()>0; List verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId()); List yardItemList = new ArrayList<>(); List verSubject4Update = new ArrayList<>(); @@ -189,13 +230,29 @@ public class VtbVerificationApplication { BigDecimal changeAmount = null; Integer countSession = null; Integer countPerson = null; - if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){ - for (TbsAffairCommitBo.AffairSubjectLine affairSubjectLine : affairCommit.getAffairSubjectLines()) { - if(currVs.getSubjectId().equals(affairSubjectLine.getSubjectId())){ - changeAmount = affairSubjectLine.getAmount(); - countSession = affairSubjectLine.getCountSession(); - countPerson = affairSubjectLine.getCountPerson(); - break; + if(isCenterCommit){ + if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectCenterLines())){ + for (TbsAffairCommitBo.AffairSubjectCenterLine centerLine : affairCommit.getAffairSubjectCenterLines()) { + if(currVs.getSubjectId().equals(centerLine.getSubjectId())){ + changeAmount = BigDecimal.ZERO; + for (TbsAffairCommitBo.AffairSubjectCenterItemLine itemLine : centerLine.getCenterItemLines()) { + changeAmount = changeAmount.add(itemLine.getCenterAmount()); + } + countSession = centerLine.getCountSession(); + countPerson = centerLine.getCountPerson(); + break; + } + } + } + }else { + if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){ + for (TbsAffairCommitBo.AffairSubjectLine affairSubjectLine : affairCommit.getAffairSubjectLines()) { + if(currVs.getSubjectId().equals(affairSubjectLine.getSubjectId())){ + changeAmount = affairSubjectLine.getAmount(); + countSession = affairSubjectLine.getCountSession(); + countPerson = affairSubjectLine.getCountPerson(); + break; + } } } } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectCenterService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectCenterService.java index 04738dee..4f2ab9f4 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectCenterService.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectCenterService.java @@ -2,6 +2,7 @@ package com.qs.serve.modules.vtb.service; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.vtb.entity.VtbVerificationSubjectCenter; +import java.util.List; /** * 核销成本中心费用 服务接口 @@ -12,5 +13,7 @@ public interface VtbVerificationSubjectCenterService extends IService listByVerificationId(Long id); + } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java index 6049ed8d..d96d4fcf 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java @@ -810,10 +810,10 @@ public class VtbVerificationServiceImpl extends ServiceImpl listByVerificationId(Long id) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(VtbVerificationSubjectCenter::getVerificationId,id); + return this.list(lqw); + } + }