Browse Source

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

contract
Yen 2 years ago
parent
commit
8571b25cd6
  1. 2
      src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java
  2. 113
      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();
} }

113
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,53 +57,46 @@ 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){
VtbVerification vtbVer = new VtbVerification(); return result;
vtbVer.setId(verification.getId());
vtbVer.setVerificationState(VtbVerificationState.Finished.getCode());
vtbVer.setFinishedTime(LocalDateTime.now());
vtbVerificationService.updateById(vtbVer);
vtbVerificationService.successCommit(verification.getId());
}else if ("stop".equals(flag)){
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);
} }
//还原活动为待核销状态 return R.error("远程调用失败");
TbsActivity activity = new TbsActivity(); }
activity.setId(verification.getActivityId());
activity.setActivityState(TbsActivityState.STATE_0_Todo); @NotNull
tbsActivityService.updateById(activity); @Transactional(rollbackFor = Exception.class)
}else if (!"next".equals(flag)){ 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("远程调用返回,非指定状态"); return R.error("远程调用返回,非指定状态");
} }
yardService.save(yard); yardService.save(yard);
//非终止或者驳回,保存审批线金额明细 //非终止或者驳回,保存审批线金额明细
if(!"stop".equals(flag)){ if(!isStop){
List<VtbVerificationSubject> verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId()); List<VtbVerificationSubject> verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId());
List<VtbVerificationYardItem> yardItemList = new ArrayList<>(); List<VtbVerificationYardItem> yardItemList = new ArrayList<>();
List<VtbVerificationSubject> verSubject4Update = new ArrayList<>();
BigDecimal totalAmount = BigDecimal.ZERO;
for (VtbVerificationSubject currVs : verificationSubjects) { for (VtbVerificationSubject currVs : verificationSubjects) {
BigDecimal changeAmount = null; BigDecimal changeAmount = null;
if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){ if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){
@ -128,18 +122,63 @@ public class VtbVerificationApplication {
}else { }else {
yardItem.setRemark(currVs.getSubjectName()+"["+currVs.getSubjectCode()+"]减少费用:"+diff.negate()); yardItem.setRemark(currVs.getSubjectName()+"["+currVs.getSubjectCode()+"]减少费用:"+diff.negate());
} }
VtbVerificationSubject verSub4Upd = new VtbVerificationSubject();
verSub4Upd.setId(currVs.getId());
verSub4Upd.setUsedAmount(changeAmount);
verSubject4Update.add(verSub4Upd);
}else { }else {
yardItem.setCurrAmount(lastAmount); yardItem.setCurrAmount(lastAmount);
} }
totalAmount = totalAmount.add(yardItem.getCurrAmount());
yardItemList.add(yardItem); yardItemList.add(yardItem);
} }
yardItemService.saveBatch(yardItemList); yardItemService.saveBatch(yardItemList);
vtbVerificationSubjectService.updateBatchById(verSubject4Update);
//重新计算合计
if(isFinish){
//更新金额,已完成
VtbVerification vtbVer = new VtbVerification();
vtbVer.setId(verification.getId());
vtbVer.setVerificationState(VtbVerificationState.Finished.getCode());
vtbVer.setAmount(totalAmount);
vtbVer.setFinishedTime(LocalDateTime.now());
vtbVerificationService.updateById(vtbVer);
vtbVerificationService.successCommit(verification.getId());
}else {
//更新金额
VtbVerification vtbVer = new VtbVerification();
vtbVer.setId(verification.getId());
vtbVer.setAmount(totalAmount);
vtbVerificationService.updateById(vtbVer);
}
} }
return R.ok(); return R.ok();
}else if (result.getStatus()==500){
return result;
} }
return R.error("远程调用失败");
/**
* 回滚或中止
* @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