From 84c4f3fca0515455149ce203539804f40d69d0b2 Mon Sep 17 00:00:00 2001 From: Yen Date: Wed, 2 Aug 2023 16:21:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A1=E6=89=B9=E6=97=B6=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/tbs/entity/TbsActivityCenter.java | 4 + .../tbs/entity/TbsActivityCenterGoods.java | 8 ++ .../tbs/entity/TbsActivitySubject.java | 4 + .../TbsCostApplyOperationServiceImpl.java | 113 ++++++++++++++---- .../controller/VtbVerificationController.java | 2 +- .../impl/VtbVerificationServiceImpl.java | 27 +++++ 6 files changed, 137 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenter.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenter.java index 20c2203f..340e339d 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenter.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenter.java @@ -47,6 +47,10 @@ public class TbsActivityCenter implements Serializable { @NotNull(message = "费用额度不能为空") private BigDecimal centerRate; + /** 费用额度 */ + @NotNull(message = "费用额度不能为空") + private BigDecimal orgCenterAmount; + /** 费用额度 */ @NotNull(message = "费用额度不能为空") private BigDecimal centerAmount; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java index 5dc914d7..8bf6e282 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java @@ -68,6 +68,10 @@ public class TbsActivityCenterGoods implements Serializable { @NotNull(message = "费用额度不能为空") private BigDecimal centerGoodsAmount; + /** 费用额度 */ + @NotNull(message = "费用额度不能为空") + private BigDecimal orgCenterGoodsAmount; + /** 费用占比 */ @NotNull(message = "费用占比不能为空") private BigDecimal centerGoodsRate; @@ -94,6 +98,10 @@ public class TbsActivityCenterGoods implements Serializable { @Length(max = 50,message = "成本中心名称长度不能超过50字") private String centerName; + /** 费用额度 */ + @NotNull(message = "费用额度不能为空") + private BigDecimal orgCenterAmount; + /** 费用额度 */ @NotNull(message = "费用额度不能为空") private BigDecimal centerAmount; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java index 6a1e51d3..7ff8526e 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java @@ -54,6 +54,10 @@ public class TbsActivitySubject implements Serializable { @Length(max = 50,message = "科目名称长度不能超过50字") private String subjectName; + /** 原费用额度 */ + @NotNull(message = "费用额度不能为空") + private BigDecimal orgAmount; + /** 费用额度 */ @NotNull(message = "费用额度不能为空") private BigDecimal amount; diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java index 1805fcc3..57efd8ac 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java @@ -1,6 +1,7 @@ package com.qs.serve.modules.tbs.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.consts.BudgetLogRollbackFlag; import com.qs.serve.common.model.dto.R; @@ -21,16 +22,11 @@ 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.util.TbsBudgetLogBuildUtil; -import com.qs.serve.modules.tbs.entity.TbsActivity; -import com.qs.serve.modules.tbs.entity.TbsActivitySubject; -import com.qs.serve.modules.tbs.entity.TbsBudgetLog; -import com.qs.serve.modules.tbs.entity.TbsCostApply; +import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo; -import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; -import com.qs.serve.modules.tbs.mapper.TbsActivitySlottingFeeMapper; -import com.qs.serve.modules.tbs.mapper.TbsActivitySubjectMapper; -import com.qs.serve.modules.tbs.mapper.TbsBudgetLogMapper; +import com.qs.serve.modules.tbs.mapper.*; +import com.qs.serve.modules.tbs.service.TbsActivityCenterGoodsService; import com.qs.serve.modules.tbs.service.TbsBudgetLogService; import com.qs.serve.modules.tbs.service.TbsCostApplyPart1Service; import com.qs.serve.modules.tbs.service.TbsCostApplyService; @@ -38,6 +34,8 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -66,6 +64,9 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService private final TbsCostApplyPart1Service costApplyPart1Service; private final TbsActivitySubjectMapper activitySubjectMapper; + private final TbsActivityCenterMapper activityCenterMapper; + private final TbsActivityCenterGoodsMapper activityCenterGoodsMapper; + @Override public SysUserService getSysUserService() { @@ -216,8 +217,11 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService @Override public Object doFinished(TbsAffairCommitBo param) { Long targetId = Long.parseLong(this.getTargetId(param)); + // 更新金额 + BigDecimal totalApply = checkToChangeAmount(param, targetId); TbsCostApply apply = new TbsCostApply(); apply.setId(targetId); + apply.setTotalActivityAmount(totalApply); apply.setChargeState(TbsCostApplyState.State_2_actioning.getCode()); costApplyService.updateById(apply); TbsCostApply costApply = costApplyService.getById(targetId); @@ -236,6 +240,87 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService return null; } + private BigDecimal checkToChangeAmount(TbsAffairCommitBo param, Long targetId) { + if(CollectionUtil.isNotEmpty(param.getAffairSubjectLines())){ + BigDecimal n100 = new BigDecimal("100"); + QueryWrapper comm_qw = new QueryWrapper(); + comm_qw.eq("cost_apply_id", targetId); + List activityList = tbsActivityMapper.selectList(comm_qw); + List activitySubjectList = activitySubjectMapper.selectList(comm_qw); + List activityCenterList = activityCenterMapper.selectList(comm_qw); + TbsActivityCenterGoodsService tbsActivityCenterGoodsService = SpringUtils.getBean(TbsActivityCenterGoodsService.class); + List activityCenterGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(targetId); + //初始化重新计算 + activityList.forEach(a->a.setTotalAmount(BigDecimal.ZERO)); + //先计算科目的费用 + for (TbsActivitySubject subject : activitySubjectList) { + for (TbsAffairCommitBo.AffairSubjectLine subjectLine : param.getAffairSubjectLines()) { + if(subjectLine.getSubjectId().equals(subject.getId())){ + BigDecimal subjectAmount = subjectLine.getAmount(); + //重新计算活动金额 + for (TbsActivity activity : activityList) { + if(subject.getActivityId().equals(activity.getId())){ + activity.setTotalAmount(activity.getTotalAmount().add(subjectAmount)); + } + } + if(subject.getOrgAmount()==null){ + //只对第一次赋值 + subject.setOrgAmount(subject.getAmount()); + } + subject.setAmount(subjectAmount); + subject.setCountPerson(subjectLine.getCountPerson()); + subject.setCountSession(subjectLine.getCountSession()); + //更新科目 + activitySubjectMapper.updateById(subject); + //计算科目下的成本中心 + for (TbsActivityCenter activityCenter : activityCenterList) { + boolean eqActivity = activityCenter.getActivityId().equals(subject.getActivityId()); + boolean eqSubject = activityCenter.getSubjectId().equals(subject.getSubjectId()); + if(eqActivity&&eqSubject){ + BigDecimal centerAmt = activityCenter.getCenterRate() + .multiply(subjectAmount).divide(n100,2, RoundingMode.HALF_UP); + if (activityCenter.getOrgCenterAmount()==null){ + //只对第一次赋值 + activityCenter.setOrgCenterAmount(activityCenter.getCenterAmount()); + } + activityCenter.setCenterAmount(centerAmt); + activityCenterMapper.updateById(activityCenter); + //计算成本中心下的商品 + for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { + boolean eqActivity4Goods = centerGoods.getActivityId().equals(activityCenter.getActivityId()); + boolean eqCenter4Goods = centerGoods.getCenterType().equals(activityCenter.getCenterType()) + &¢erGoods.getCenterId().equals(activityCenter.getCenterId()); + boolean eqSubject4Goods = centerGoods.getSubjectId().equals(activityCenter.getSubjectId()); + if(eqActivity4Goods&&eqCenter4Goods&&eqSubject4Goods){ + if(centerGoods.getOrgCenterGoodsAmount()==null){ + //只对第一次赋值 + centerGoods.setOrgCenterAmount(activityCenter.getOrgCenterAmount()); + centerGoods.setOrgCenterGoodsAmount(centerGoods.getCenterGoodsAmount()); + } + centerGoods.setCenterAmount(centerAmt); + centerGoods.setCenterGoodsAmount(centerAmt.multiply(centerGoods.getCenterGoodsRate()).divide(n100,2,RoundingMode.HALF_DOWN)); + } + + } + } + } + break; + } + } + } + //更新活动 + BigDecimal total = BigDecimal.ZERO; + for (TbsActivity activity : activityList) { + tbsActivityMapper.updateById(activity); + total = total.add(activity.getTotalAmount()); + } + //更新活动的商品 + tbsActivityCenterGoodsService.updateBatchById(activityCenterGoodsList); + return total; + } + return null; + } + @Override public Object doRefuse(TbsAffairCommitBo param) { Long costApplyId = Long.parseLong(this.getTargetId(param)); @@ -319,18 +404,6 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService R result = getRequestService().commonCommit(affairCommit, templateCode ,syFormId); boolean isBackCommit = affairCommit.getState()==2; if(result.getStatus()==200){ - // 更新金额 - if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){ - List actSubjectIds = affairCommit.getAffairSubjectLines().stream() - .map(TbsAffairCommitBo.AffairSubjectLine::getSubjectId).collect(Collectors.toList()); - LambdaQueryWrapper subLqw = new LambdaQueryWrapper<>(); - subLqw.in(TbsActivitySubject::getId,actSubjectIds); - subLqw.in(TbsActivitySubject::getCostApplyId,affairCommit.getCostApplyId()); - List activitySubjectList = activitySubjectMapper.selectList(subLqw); - for (TbsAffairCommitBo.AffairSubjectLine subjectLine : affairCommit.getAffairSubjectLines()) { - //TODO - } - } // 判断是否含有下个节点 String flag = result.getData(); //审批中(next)、完成(finish)、拒绝(refused) 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 68a18b7a..a8a0f6eb 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 @@ -81,7 +81,7 @@ public class VtbVerificationController { * @return */ @PostMapping("/createContactRecord") - private R createContactRecord(@RequestBody VtbVerificationContactBo param){ + public R createContactRecord(@RequestBody VtbVerificationContactBo param){ vtbVerificationService.createContactRecord(param); return R.ok(); } 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 746db7db..33a0c728 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 @@ -45,6 +45,7 @@ import com.qs.serve.modules.vtb.mapper.VtbVerificationYardItemMapper; import com.qs.serve.modules.vtb.mapper.VtbVerificationYardMapper; import com.qs.serve.modules.vtb.service.*; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeansException; import org.springframework.scheduling.annotation.Async; @@ -154,6 +155,8 @@ public class VtbVerificationServiceImpl extends ServiceImpl