Browse Source

审批时修改金额流程

v1.0
Yen 2 years ago
parent
commit
84c4f3fca0
  1. 4
      src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenter.java
  2. 8
      src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java
  3. 4
      src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java
  4. 113
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java
  5. 2
      src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java
  6. 27
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

4
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;

8
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;

4
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;

113
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<TbsActivity> activityList = tbsActivityMapper.selectList(comm_qw);
List<TbsActivitySubject> activitySubjectList = activitySubjectMapper.selectList(comm_qw);
List<TbsActivityCenter> activityCenterList = activityCenterMapper.selectList(comm_qw);
TbsActivityCenterGoodsService tbsActivityCenterGoodsService = SpringUtils.getBean(TbsActivityCenterGoodsService.class);
List<TbsActivityCenterGoods> 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())
&&centerGoods.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<String> result = getRequestService().commonCommit(affairCommit, templateCode ,syFormId);
boolean isBackCommit = affairCommit.getState()==2;
if(result.getStatus()==200){
// 更新金额
if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){
List<Long> actSubjectIds = affairCommit.getAffairSubjectLines().stream()
.map(TbsAffairCommitBo.AffairSubjectLine::getSubjectId).collect(Collectors.toList());
LambdaQueryWrapper<TbsActivitySubject> subLqw = new LambdaQueryWrapper<>();
subLqw.in(TbsActivitySubject::getId,actSubjectIds);
subLqw.in(TbsActivitySubject::getCostApplyId,affairCommit.getCostApplyId());
List<TbsActivitySubject> activitySubjectList = activitySubjectMapper.selectList(subLqw);
for (TbsAffairCommitBo.AffairSubjectLine subjectLine : affairCommit.getAffairSubjectLines()) {
//TODO
}
}
// 判断是否含有下个节点
String flag = result.getData();
//审批中(next)、完成(finish)、拒绝(refused)

2
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();
}

27
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<VtbVerificationMappe
verification.setWayTitle(param.getPayWay());
this.save(verification);
Date nowDate_ = new Date();
//更新费用
BigDecimal finalAmt = activity.getUsedAmount().add(param.getTotalCheckAmount());
activity.setUsedAmount(finalAmt);
@ -230,6 +233,30 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
fundFlowService.saveBatch(addFundFlowList);
}
}
//发送请求到中间服务
XltApticlaim apticlaim = new XltApticlaim();
apticlaim.setVerificationCode(verification.getVerificationCode());
apticlaim.setCostCode(costApply.getCode());
apticlaim.setCostCode2(activity.getActivityCode());
apticlaim.setCusCode(verification.getSupplierCode());
apticlaim.setAmount(currentSubjectAmt);
apticlaim.setSubjectCode(activitySubject.getSubjectCode());
apticlaim.setSubjectName(activitySubject.getSubjectName());
apticlaim.setExpType("TI");
apticlaim.setApplyType("01");
apticlaim.setEffDate(nowDate_);
apticlaim.setInvoiced("2");
apticlaim.setCreateTime(nowDate_);
apticlaim.setStatus("00");
apticlaim.setDealTime(nowDate_);
apticlaim.setTopic(costApply.getChargeTheme());
try {
xiaoLuTonService.saveApticlaim(apticlaim);
log.info("发送对象(apticlaim)到OA服务成功");
} catch (Exception e) {
e.printStackTrace();
log.error("发送对象到OA服务失败,数据内容如下:{}", JsonUtil.objectToJson(apticlaim));
}
}
if(CollectionUtil.isNotEmpty(activitySubject4Update)){
activitySubjectService.updateBatchById(activitySubject4Update);

Loading…
Cancel
Save