From 45286dfbe00ec43fa97c64e54cf6a93a743ca399 Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 3 Aug 2023 09:29:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B4=B9=E7=94=A8?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TbsCostApplyController.java | 12 +++++ .../modules/tbs/entity/TbsCostApply.java | 6 +++ .../tbs/service/TbsCostApplyPart1Service.java | 7 +++ .../TbsCostApplyOperationServiceImpl.java | 5 +- .../impl/TbsCostApplyPart1ServiceImpl.java | 49 ++++++++++++++++++- 5 files changed, 76 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java index 2fde54aa..75bbf133 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java @@ -74,6 +74,18 @@ public class TbsCostApplyController { private TbsCostApplyOperationServiceImpl tbsCostApplyOperationServiceImpl; private TbsBudgetMatchApplication tbsBudgetMatchApplication; + + /** + * 复制 + * @param id + * @return + */ + @PostMapping("/copyById/{id}") + public R copyById(@PathVariable("id") Long id){ + return R.ok(costApplyPart1Service.copyById(id)); + } + + /** * 作废费用申请 * @param id diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java index ffbdf15f..ecf51a42 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java @@ -177,6 +177,12 @@ public class TbsCostApply implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private LocalDateTime changeActionTime; + /** + * 编辑金额标识 + * 审批通过时恢复0 + */ + private Integer editAmountFlag; + @TableField(exist = false) private String affairId; diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyPart1Service.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyPart1Service.java index fcd3df29..f4059e9e 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyPart1Service.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyPart1Service.java @@ -9,6 +9,13 @@ import com.qs.serve.modules.tbs.entity.TbsCostApply; */ public interface TbsCostApplyPart1Service { + /** + * 通过ID复制 + * @param costId + * @return + */ + TbsCostApply copyById(Long costId); + /** * 执行异动 * @param costId 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 6bcce650..df555768 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 @@ -221,8 +221,11 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService TbsCostApply apply = new TbsCostApply(); // TODO 1.有修改金额为0的异常;2.需要调整预算占用 // BigDecimal totalApply = checkToChangeAmount(param, targetId); -// apply.setTotalActivityAmount(totalApply); apply.setId(targetId); +// if(totalApply!=null){ +// apply.setTotalActivityAmount(totalApply); +// apply.setEditAmountFlag(1); +// } apply.setChargeState(TbsCostApplyState.State_2_actioning.getCode()); costApplyService.updateById(apply); TbsCostApply costApply = costApplyService.getById(targetId); diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java index cf8b7372..cc484c76 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java @@ -6,6 +6,7 @@ import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.AuthContextUtils; +import com.qs.serve.common.util.CodeGenUtil; import com.qs.serve.common.util.CopierUtil; import com.qs.serve.modules.bir.service.BirCenterRateService; import com.qs.serve.modules.bir.service.BirRoiRateService; @@ -57,6 +58,38 @@ public class TbsCostApplyPart1ServiceImpl implements TbsCostApplyPart1Service { private VtbVerificationMapper verificationMapper; private TbsBudgetLogMapper tbsBudgetLogMapper; + @Override + public TbsCostApply copyById(Long costId) { + final String newCostApplyCode = CodeGenUtil.generate(CodeGenUtil.SourceKey.CostApply); + TbsCostApply costApply = tbsCostApplyService.getById(costId); + costApply.setId(null); + costApply.setCode(newCostApplyCode); + costApply.setCreateBy(null); + costApply.setCreateTime(null); + costApply.setUpdateTime(null); + costApply.setUpdateBy(null); + costApply.setChangeSourceId(null); + costApply.setChangeExtendId(null); + costApply.setCancelFlag(null); + costApply.setEditAmountFlag(null); + costApply.setChargeState(TbsCostApplyState.State_0_unPublish.getCode()); + tbsCostApplyService.save(costApply); + final Long newCostApplyId = costApply.getId(); + + QueryWrapper qw_cost_apply = new QueryWrapper(); + qw_cost_apply.eq("cost_apply_id",costId); + List contracts = costContractMapper.selectList(qw_cost_apply); + contracts.forEach(con->{ + con.setId(null); + con.setCostApplyId(newCostApplyId); + }); + //活动相关复制 + List activityList = tbsActivityMapper.selectList(qw_cost_apply); + //更新状态 + this.copyAboutActivityData(newCostApplyId,newCostApplyCode, activityList); + return costApply; + } + @Override @Transactional(rollbackFor = Exception.class) public TbsCostApply toSetChanged(Long costId) { @@ -90,6 +123,7 @@ public class TbsCostApplyPart1ServiceImpl implements TbsCostApplyPart1Service { costApply.setCreateTime(null); costApply.setUpdateTime(null); costApply.setUpdateBy(null); + costApply.setCancelFlag(null); costApply.setChangeSourceId(orgCost.getId()); costApply.setChangeExtendId(null); costApply.setChargeState(TbsCostApplyState.State_0_unPublish.getCode()); @@ -103,6 +137,11 @@ public class TbsCostApplyPart1ServiceImpl implements TbsCostApplyPart1Service { con.setId(null); con.setCostApplyId(newCostApplyId); }); + if(contracts.size()>0){ + for (TbsCostContract contract : contracts) { + costContractMapper.insert(contract); + } + } //活动相关复制 List activityList = tbsActivityMapper.selectList(qw_cost_apply); //更新状态 @@ -112,7 +151,7 @@ public class TbsCostApplyPart1ServiceImpl implements TbsCostApplyPart1Service { LambdaQueryWrapper activityLqw = new LambdaQueryWrapper<>(); activityLqw.in(TbsActivity::getId,activityIds); tbsActivityMapper.update(activity4Update,activityLqw); - this.copyAboutActivityData(newCostApplyId, activityList); + this.copyAboutActivityData(newCostApplyId,null, activityList); //更变旧记录 orgCost.setChangeStateRecord(orgCost.getChargeState()); orgCost.setChargeState(TbsCostApplyState.State_7_changed.getCode()); @@ -165,14 +204,20 @@ public class TbsCostApplyPart1ServiceImpl implements TbsCostApplyPart1Service { /** * 活动相关复制 * @param newCostApplyId + * @param newCostApplyCode * @param activityList */ - private void copyAboutActivityData(Long newCostApplyId, List activityList) { + private void copyAboutActivityData(Long newCostApplyId,String newCostApplyCode, List activityList) { + int idx = 1; for (TbsActivity orgActivity : activityList) { //原ActivityID Long orgActivityId = orgActivity.getId(); //重新保存 orgActivity.setId(null); + if(newCostApplyCode!=null){ + orgActivity.setActivityCode(newCostApplyCode+"_"+idx); + idx++; + } orgActivity.setCostApplyId(newCostApplyId); orgActivity.setActivityState(0); orgActivity.setCreateBy(null); From 27bf73e5b0437c8fef5441330d2d7d953504f24b Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 3 Aug 2023 10:30:47 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TbsCostApplyController.java | 12 ++++++++++ .../TbsCostApplyOperationServiceImpl.java | 22 ++++++++++++++----- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java index 75bbf133..c6f2a845 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java @@ -39,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -74,6 +75,17 @@ public class TbsCostApplyController { private TbsCostApplyOperationServiceImpl tbsCostApplyOperationServiceImpl; private TbsBudgetMatchApplication tbsBudgetMatchApplication; + /** + * 测试 + * @param param + * @return + */ + //@PostMapping("/testChangeAmt") + public R testChangeAmt(@RequestBody TbsAffairCommitBo param){ + TbsCostApplyOperationServiceImpl impl = SpringUtils.getBean(TbsCostApplyOperationServiceImpl.class); + BigDecimal total = impl.checkToChangeAmount(param); + return R.ok(total); + } /** * 复制 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 df555768..6e1e10c8 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 @@ -220,7 +220,7 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService // 更新金额 TbsCostApply apply = new TbsCostApply(); // TODO 1.有修改金额为0的异常;2.需要调整预算占用 -// BigDecimal totalApply = checkToChangeAmount(param, targetId); + BigDecimal totalApply = checkToChangeAmount(param); apply.setId(targetId); // if(totalApply!=null){ // apply.setTotalActivityAmount(totalApply); @@ -244,7 +244,8 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService return null; } - private BigDecimal checkToChangeAmount(TbsAffairCommitBo param, Long targetId) { + public BigDecimal checkToChangeAmount(TbsAffairCommitBo param) { + Long targetId = Long.parseLong(this.getTargetId(param)); if(CollectionUtil.isNotEmpty(param.getAffairSubjectLines())){ BigDecimal n100 = new BigDecimal("100"); QueryWrapper comm_qw = new QueryWrapper(); @@ -259,6 +260,9 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService //先计算科目的费用 for (TbsActivitySubject subject : activitySubjectList) { for (TbsAffairCommitBo.AffairSubjectLine subjectLine : param.getAffairSubjectLines()) { + if(subjectLine.getAmount().compareTo(BigDecimal.ZERO)<=0){ + continue; + } if(subjectLine.getSubjectId().equals(subject.getId())){ BigDecimal subjectAmount = subjectLine.getAmount(); //重新计算活动金额 @@ -290,7 +294,9 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService activityCenter.setCenterAmount(centerAmt); activityCenterMapper.updateById(activityCenter); //计算成本中心下的商品 - for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { + BigDecimal tmpCenterAmt = centerAmt; + for (int i = 0; i < activityCenterGoodsList.size(); i++) { + TbsActivityCenterGoods centerGoods = activityCenterGoodsList.get(i); boolean eqActivity4Goods = centerGoods.getActivityId().equals(activityCenter.getActivityId()); boolean eqCenter4Goods = centerGoods.getCenterType().equals(activityCenter.getCenterType()) &¢erGoods.getCenterId().equals(activityCenter.getCenterId()); @@ -302,9 +308,15 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService centerGoods.setOrgCenterGoodsAmount(centerGoods.getCenterGoodsAmount()); } centerGoods.setCenterAmount(centerAmt); - centerGoods.setCenterGoodsAmount(centerAmt.multiply(centerGoods.getCenterGoodsRate()).divide(n100,2,RoundingMode.HALF_DOWN)); + BigDecimal centerGoodAmt = null; + if(i+1==activityCenterGoodsList.size()){ + centerGoodAmt = tmpCenterAmt; + }else { + centerGoodAmt = centerAmt.multiply(centerGoods.getCenterGoodsRate()).divide(n100,2,RoundingMode.HALF_DOWN); + tmpCenterAmt = tmpCenterAmt.subtract(centerGoodAmt); + } + centerGoods.setCenterGoodsAmount(centerGoodAmt); } - } } }