Browse Source

成本中心维度核销

v1.0
Yen 2 years ago
parent
commit
7dc6d96a9e
  1. 37
      src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java
  2. 25
      src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java
  3. 6
      src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java
  4. 3
      src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubjectCenter.java
  5. 2
      src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCenterBo.java
  6. 105
      src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java
  7. 3
      src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectCenterService.java
  8. 8
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java
  9. 9
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationSubjectCenterServiceImpl.java

37
src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java

@ -59,6 +59,11 @@ public class TbsAffairCommitBo {
*/
private List<AffairSubjectLine> affairSubjectLines;
/**
* 成本中心维度修改金额列表核销和费用审批接口专用
*/
private List<AffairSubjectCenterLine> 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<AffairSubjectCenterItemLine> centerItemLines;
}
@Data
public static class AffairSubjectCenterItemLine{
/** 活动成本中心ID */
private Long activityCenterId;
/**
* 调整金额
*/
private BigDecimal centerAmount;
}
}

25
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<VtbVerificationSubject> subjectLqw = new LambdaQueryWrapper<>();
subjectLqw.eq(VtbVerificationSubject::getVerificationId,id);
List<VtbVerificationSubject> subjectList = vtbVerificationSubjectService.list(subjectLqw);
List<VtbVerificationSubjectCenter> subjectCenterList = vtbVerificationSubjectCenterService.listByVerificationId(Long.parseLong(id));
List<TbsActivitySubject> activitySubjects = activitySubjectService.listByActivityId(vtbVerification.getActivityId());
List<TbsActivityCenter> 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);

6
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<VtbVerificationSubjectCenter> subjectCenterList = new ArrayList<>();
}

3
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();

2
src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationSubjectCenterBo.java

@ -51,7 +51,7 @@ public class VtbVerificationSubjectCenterBo implements Serializable {
private List<ChangeSubjectCenter> centerAmount;
@Data
public class ChangeSubjectCenter{
public static class ChangeSubjectCenter{
@NotNull(message = "subjectCenterId不能为空")
private Long subjectCenterId;

105
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<VtbVerificationSubjectCenter> verificationSubjectCenterList = vtbVerificationSubjectCenterService.listByVerificationId(verification.getId());
List<VtbVerificationSubject> 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()+"]额度不足");
}
}
}
}
}
//检测参数的金额
this.checkParamAmount(affairCommit, verificationSubjectCenterList, verificationSubjects);
boolean isBackCommit = affairCommit.getState()==2;
R<String> 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<VtbVerificationSubjectCenter> verificationSubjectCenterList, List<VtbVerificationSubject> 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<VtbVerificationSubjectCenter> subjectCenters = vtbVerificationSubjectCenterService.listByVerificationId(verification.getId());
//isCenterCommit 代表自定义成本中心维度递交
boolean isCenterCommit = subjectCenters.size()>0;
List<VtbVerificationSubject> verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId());
List<VtbVerificationYardItem> yardItemList = new ArrayList<>();
List<VtbVerificationSubject> verSubject4Update = new ArrayList<>();
@ -189,6 +230,21 @@ public class VtbVerificationApplication {
BigDecimal changeAmount = null;
Integer countSession = null;
Integer countPerson = null;
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())){
@ -199,6 +255,7 @@ public class VtbVerificationApplication {
}
}
}
}
//保存明细判断是否更变金额
VtbVerificationYardItem yardItem = CopierUtil.copy(currVs,new VtbVerificationYardItem());
yardItem.setYardId(yard.getId());

3
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<VtbVerific
void removeByVerificationId(Long verificationId);
List<VtbVerificationSubjectCenter> listByVerificationId(Long id);
}

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

@ -810,10 +810,10 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
if(centerAmt==null){
Assert.throwEx("SubjectCenterId: "+centerBo.getSubjectCenterId()+" amount is null");
}
if (centerAmt.compareTo(BigDecimal.ZERO)==0){
//0核销,成本中心维度不进行保存
continue;
}
// if (centerAmt.compareTo(BigDecimal.ZERO)==0){
// //0核销,成本中心维度不进行保存
// //continue;
// }
totalSubjectAmt = totalSubjectAmt.add(centerAmt);
//当前活动成本中心进行校验,再构建
TbsActivityCenter currActivityCenter = null;

9
src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationSubjectCenterServiceImpl.java

@ -10,6 +10,8 @@ import com.qs.serve.modules.vtb.entity.VtbVerificationSubjectCenter;
import com.qs.serve.modules.vtb.service.VtbVerificationSubjectCenterService;
import com.qs.serve.modules.vtb.mapper.VtbVerificationSubjectCenterMapper;
import java.util.List;
/**
* 核销成本中心费用 服务实现类
* @author YenHex
@ -27,5 +29,12 @@ public class VtbVerificationSubjectCenterServiceImpl extends ServiceImpl<VtbVeri
this.remove(lqw);
}
@Override
public List<VtbVerificationSubjectCenter> listByVerificationId(Long id) {
LambdaQueryWrapper<VtbVerificationSubjectCenter> lqw = new LambdaQueryWrapper<>();
lqw.eq(VtbVerificationSubjectCenter::getVerificationId,id);
return this.list(lqw);
}
}

Loading…
Cancel
Save