|
|
@ -24,6 +24,7 @@ import com.qs.serve.modules.vtb.entity.VtbVerificationYardItem; |
|
|
|
import lombok.AllArgsConstructor; |
|
|
|
import org.jetbrains.annotations.NotNull; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.web.bind.annotation.RequestBody; |
|
|
|
|
|
|
|
import javax.validation.Valid; |
|
|
@ -56,53 +57,46 @@ public class VtbVerificationApplication { |
|
|
|
if(!verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){ |
|
|
|
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; |
|
|
|
R<String> result = seeYonService.commonCommit(affairCommit, TbsSeeYonConst.VERIFICATION_CODE); |
|
|
|
if(result.getStatus()==200){ |
|
|
|
// 判断是否含有下个节点
|
|
|
|
String flag = result.getData(); |
|
|
|
//审批中(next)、完成(finish)、拒绝(refused)
|
|
|
|
if("finish".equals(flag)){ |
|
|
|
VtbVerification vtbVer = new VtbVerification(); |
|
|
|
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 commitAffairSuccess(affairCommit, verification, isBackCommit, flag); |
|
|
|
}else if (result.getStatus()==500){ |
|
|
|
return result; |
|
|
|
} |
|
|
|
//还原活动为待核销状态
|
|
|
|
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("远程调用失败"); |
|
|
|
} |
|
|
|
|
|
|
|
@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(!"stop".equals(flag)){ |
|
|
|
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())){ |
|
|
@ -128,18 +122,63 @@ public class VtbVerificationApplication { |
|
|
|
}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(); |
|
|
|
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(); |
|
|
|
}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 |
|
|
|