Browse Source

调整审批流程,支持修改核销金额

contract
Yen 2 years ago
parent
commit
8571b25cd6
  1. 2
      src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java
  2. 179
      src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java

2
src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java

@ -128,7 +128,7 @@ public class VtbVerificationController {
@PostMapping("/commit") @PostMapping("/commit")
@SysLog(module = SystemModule.Verification, title = "核销", biz = BizType.UPDATE) @SysLog(module = SystemModule.Verification, title = "核销", biz = BizType.UPDATE)
@PreAuthorize("hasRole('vtb:verification:commit')") @PreAuthorize("hasRole('vtb:verification:commit')")
public R<?> updateById(@RequestBody @Valid VtbVerificationBo param){ public R<?> commit(@RequestBody @Valid VtbVerificationBo param){
vtbVerificationService.commit(param); vtbVerificationService.commit(param);
return R.ok(); return R.ok();
} }

179
src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java

@ -24,6 +24,7 @@ import com.qs.serve.modules.vtb.entity.VtbVerificationYardItem;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid; import javax.validation.Valid;
@ -56,90 +57,128 @@ public class VtbVerificationApplication {
if(!verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){ if(!verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){
return R.error("费用申请处于未非审批状态!"); return R.error("费用申请处于未非审批状态!");
} }
VtbVerificationYard yard = new VtbVerificationYard();
yard.setVerificationId(verification.getId());
yard.setVerificationSubCode(verification.getVerificationCode());
yard.setState(affairCommit.getState());
yard.setAffairId(affairCommit.getAffairId());
yard.setComment(affairCommit.getComment());
boolean isBackCommit = affairCommit.getState()==2; boolean isBackCommit = affairCommit.getState()==2;
R<String> result = seeYonService.commonCommit(affairCommit, TbsSeeYonConst.VERIFICATION_CODE); R<String> result = seeYonService.commonCommit(affairCommit, TbsSeeYonConst.VERIFICATION_CODE);
if(result.getStatus()==200){ if(result.getStatus()==200){
// 判断是否含有下个节点 // 判断是否含有下个节点
String flag = result.getData(); String flag = result.getData();
//审批中(next)、完成(finish)、拒绝(refused) return commitAffairSuccess(affairCommit, verification, isBackCommit, flag);
if("finish".equals(flag)){ }else if (result.getStatus()==500){
return result;
}
return R.error("远程调用失败");
}
@NotNull
@Transactional(rollbackFor = Exception.class)
public R commitAffairSuccess(TbsAffairCommitBo affairCommit, VtbVerification verification, boolean isBackCommit, String flag) {
//保存审批线结果
VtbVerificationYard yard = new VtbVerificationYard();
yard.setVerificationId(verification.getId());
yard.setVerificationSubCode(verification.getVerificationCode());
yard.setState(affairCommit.getState());
yard.setAffairId(affairCommit.getAffairId());
yard.setComment(affairCommit.getComment());
//审批中(next)、完成(finish)、拒绝(refused)
boolean isFinish = "finish".equals(flag);
boolean isNext = "next".equals(flag);
boolean isStop = "stop".equals(flag);
if (isStop){
backCommitAndStop(verification, isBackCommit);
}else if (!isFinish && !isNext){
return R.error("远程调用返回,非指定状态");
}
yardService.save(yard);
//非终止或者驳回,保存审批线金额明细
if(!isStop){
List<VtbVerificationSubject> verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId());
List<VtbVerificationYardItem> yardItemList = new ArrayList<>();
List<VtbVerificationSubject> verSubject4Update = new ArrayList<>();
BigDecimal totalAmount = BigDecimal.ZERO;
for (VtbVerificationSubject currVs : verificationSubjects) {
BigDecimal changeAmount = null;
if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){
for (TbsAffairCommitBo.AffairSubjectLine affairSubjectLine : affairCommit.getAffairSubjectLines()) {
if(currVs.getId().equals(affairSubjectLine.getVerificationSubjectId())){
changeAmount = affairSubjectLine.getAmount();
break;
}
}
}
//保存明细判断是否更变金额
VtbVerificationYardItem yardItem = CopierUtil.copy(currVs,new VtbVerificationYardItem());
yardItem.setYardId(yard.getId());
yardItem.initSetNull();
BigDecimal lastAmount = currVs.getUsedAmount();
yardItem.setLastAmount(lastAmount);
//金额有更变
if(changeAmount!=null&&changeAmount.compareTo(lastAmount)!=0){
yardItem.setCurrAmount(changeAmount);
BigDecimal diff = changeAmount.subtract(lastAmount);
if(diff.compareTo(BigDecimal.ZERO)>0){
yardItem.setRemark(currVs.getSubjectName()+"["+currVs.getSubjectCode()+"]增加费用:"+diff);
}else {
yardItem.setRemark(currVs.getSubjectName()+"["+currVs.getSubjectCode()+"]减少费用:"+diff.negate());
}
VtbVerificationSubject verSub4Upd = new VtbVerificationSubject();
verSub4Upd.setId(currVs.getId());
verSub4Upd.setUsedAmount(changeAmount);
verSubject4Update.add(verSub4Upd);
}else {
yardItem.setCurrAmount(lastAmount);
}
totalAmount = totalAmount.add(yardItem.getCurrAmount());
yardItemList.add(yardItem);
}
yardItemService.saveBatch(yardItemList);
vtbVerificationSubjectService.updateBatchById(verSubject4Update);
//重新计算合计
if(isFinish){
//更新金额,已完成
VtbVerification vtbVer = new VtbVerification(); VtbVerification vtbVer = new VtbVerification();
vtbVer.setId(verification.getId()); vtbVer.setId(verification.getId());
vtbVer.setVerificationState(VtbVerificationState.Finished.getCode()); vtbVer.setVerificationState(VtbVerificationState.Finished.getCode());
vtbVer.setAmount(totalAmount);
vtbVer.setFinishedTime(LocalDateTime.now()); vtbVer.setFinishedTime(LocalDateTime.now());
vtbVerificationService.updateById(vtbVer); vtbVerificationService.updateById(vtbVer);
vtbVerificationService.successCommit(verification.getId()); vtbVerificationService.successCommit(verification.getId());
}else if ("stop".equals(flag)){ }else {
if(isBackCommit){ //更新金额
VtbVerification vtbVer = new VtbVerification(); VtbVerification vtbVer = new VtbVerification();
vtbVer.setId(verification.getId()); vtbVer.setId(verification.getId());
vtbVer.setVerificationState(VtbVerificationState.Rollback.getCode()); vtbVer.setAmount(totalAmount);
vtbVer.setSyFormId(""); vtbVerificationService.updateById(vtbVer);
vtbVer.setSyFlowId("");
vtbVerificationService.updateById(vtbVer);
}else {
VtbVerification vtbVer = new VtbVerification();
vtbVer.setId(verification.getId());
vtbVer.setVerificationState(VtbVerificationState.Stop.getCode());
vtbVerificationService.updateById(vtbVer);
}
//还原活动为待核销状态
TbsActivity activity = new TbsActivity();
activity.setId(verification.getActivityId());
activity.setActivityState(TbsActivityState.STATE_0_Todo);
tbsActivityService.updateById(activity);
}else if (!"next".equals(flag)){
return R.error("远程调用返回,非指定状态");
}
yardService.save(yard);
//非终止或者驳回,保存审批线金额明细
if(!"stop".equals(flag)){
List<VtbVerificationSubject> verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId());
List<VtbVerificationYardItem> yardItemList = new ArrayList<>();
for (VtbVerificationSubject currVs : verificationSubjects) {
BigDecimal changeAmount = null;
if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){
for (TbsAffairCommitBo.AffairSubjectLine affairSubjectLine : affairCommit.getAffairSubjectLines()) {
if(currVs.getId().equals(affairSubjectLine.getVerificationSubjectId())){
changeAmount = affairSubjectLine.getAmount();
break;
}
}
}
//保存明细判断是否更变金额
VtbVerificationYardItem yardItem = CopierUtil.copy(currVs,new VtbVerificationYardItem());
yardItem.setYardId(yard.getId());
yardItem.initSetNull();
BigDecimal lastAmount = currVs.getUsedAmount();
yardItem.setLastAmount(lastAmount);
//金额有更变
if(changeAmount!=null&&changeAmount.compareTo(lastAmount)!=0){
yardItem.setCurrAmount(changeAmount);
BigDecimal diff = changeAmount.subtract(lastAmount);
if(diff.compareTo(BigDecimal.ZERO)>0){
yardItem.setRemark(currVs.getSubjectName()+"["+currVs.getSubjectCode()+"]增加费用:"+diff);
}else {
yardItem.setRemark(currVs.getSubjectName()+"["+currVs.getSubjectCode()+"]减少费用:"+diff.negate());
}
}else {
yardItem.setCurrAmount(lastAmount);
}
yardItemList.add(yardItem);
}
yardItemService.saveBatch(yardItemList);
} }
return R.ok();
}else if (result.getStatus()==500){
return result;
} }
return R.error("远程调用失败"); return R.ok();
}
/**
* 回滚或中止
* @param verification
* @param isBackCommit
*/
private void backCommitAndStop(VtbVerification verification, boolean isBackCommit) {
if(isBackCommit){
VtbVerification vtbVer = new VtbVerification();
vtbVer.setId(verification.getId());
vtbVer.setVerificationState(VtbVerificationState.Rollback.getCode());
vtbVer.setSyFormId("");
vtbVer.setSyFlowId("");
vtbVerificationService.updateById(vtbVer);
}else {
VtbVerification vtbVer = new VtbVerification();
vtbVer.setId(verification.getId());
vtbVer.setVerificationState(VtbVerificationState.Stop.getCode());
vtbVerificationService.updateById(vtbVer);
}
//还原活动为待核销状态
TbsActivity activity = new TbsActivity();
activity.setId(verification.getActivityId());
activity.setActivityState(TbsActivityState.STATE_0_Todo);
tbsActivityService.updateById(activity);
} }
@NotNull @NotNull

Loading…
Cancel
Save