@ -2,39 +2,45 @@ package com.qs.serve.modules.vtb.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper ;
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.CopierUtil ;
import com.qs.serve.common.util.SpringUtils ;
import com.qs.serve.common.util.* ;
import com.qs.serve.modules.data.entity.DataAffairCommit ;
import com.qs.serve.modules.data.mapper.DataAffairCommitMapper ;
import com.qs.serve.modules.seeyon.entity.bo.CtpAddNodeParam ;
import com.qs.serve.modules.seeyon.service.SeeYonOperationService ;
import com.qs.serve.modules.sys.entity.SysUser ;
import com.qs.serve.modules.sys.service.SysUserService ;
import com.qs.serve.modules.tbs.common.TbsSeeYonConst ;
import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo ;
import com.qs.serve.modules.vtb.common.VtbVerificationState ;
import com.qs.serve.modules.vtb.entity.VtbVerification ;
import com.qs.serve.modules.vtb.entity.VtbVerificationBatch ;
import com.qs.serve.modules.vtb.service.VtbVerificationBatchOperationService ;
import com.qs.serve.modules.vtb.service.VtbVerificationBatchService ;
import com.qs.serve.modules.vtb.service.VtbVerificationService ;
import com.qs.serve.modules.vtb.entity.* ;
import com.qs.serve.modules.vtb.service.* ;
import lombok.AllArgsConstructor ;
import lombok.extern.slf4j.Slf4j ;
import org.springframework.stereotype.Service ;
import java.math.BigDecimal ;
import java.time.LocalDateTime ;
import java.util.ArrayList ;
import java.util.List ;
/ * *
* @author YenHex
* @since 2024 / 6 / 14
* /
@Slf4j
@Service
@AllArgsConstructor
public class VtbVerificationBatchOperationServiceImpl implements VtbVerificationBatchOperationService {
private final VtbVerificationBatchService vtbVerificationBatchService ;
private final VtbVerificationService vtbVerificationService ;
private final SysUserService sysUserService ;
private final VtbVerificationApplication verificationApplication ;
private final VtbVerificationSubjectCenterService vtbVerificationSubjectCenterService ;
private final VtbVerificationYardService yardService ;
private final VtbVerificationYardItemService yardItemService ;
private final VtbVerificationYardCenterItemService yardCenterItemService ;
private final VtbVerificationSubjectService vtbVerificationSubjectService ;
@Override
public String getTemplateCode ( ) {
@ -64,7 +70,16 @@ public class VtbVerificationBatchOperationServiceImpl implements VtbVerification
@Override
public Object doFinished ( TbsAffairCommitBo param ) {
//退回
VtbVerificationBatch batch = vtbVerificationBatchService . getById ( param . getTargetId ( ) ) ;
List < VtbVerification > verificationList = vtbVerificationBatchService . listVerifications ( batch . getId ( ) ) ;
batch . setVtbBatchStatus ( VtbVerificationBatch . BatchState . CHECK_BACK ) ;
batch . setBackedTime ( LocalDateTime . now ( ) ) ;
vtbVerificationBatchService . updateById ( batch ) ;
for ( VtbVerification verification : verificationList ) {
//循环调用每个核销
vtbVerificationService . successCommit ( verification . getId ( ) ) ;
}
return null ;
}
@ -115,31 +130,30 @@ public class VtbVerificationBatchOperationServiceImpl implements VtbVerification
}
@Override
public void buildAffairCommitData ( TbsAffairCommitBo affairCommit , String flag ) {
public void buildAffairCommitData ( TbsAffairCommitBo commitParam , String flag ) {
//常规的提交审批日志
String userId = AuthContextUtils . getSysUserId ( ) ;
SysUser sysUser = sysUserService . getById ( userId ) ;
VtbVerificationBatch batch = vtbVerificationBatchService . getById ( commitParam . getTargetId ( ) ) ;
List < VtbVerification > verificationList = vtbVerificationBatchService . listVerifications ( batch . getId ( ) ) ;
//保存记录
try {
// 判断是否含有下个节点
DataAffairCommitMapper dataAffairCommitMapper = SpringUtils . getBean ( DataAffairCommitMapper . class ) ;
String userId = AuthContextUtils . getSysUserId ( ) ;
SysUser sysUser = getUserMapper ( ) . selectById ( userId ) ;
DataAffairCommit dataAffairCommit = new DataAffairCommit ( ) ;
dataAffairCommit . setTargetCode ( getTemplateCode ( ) ) ;
dataAffairCommit . setTargetId ( getTargetId ( affairCommit ) ) ;
dataAffairCommit . setId ( affairCommit . getAffairId ( ) ) ;
dataAffairCommit . setCommentVal ( affairCommit . getComment ( ) ) ;
dataAffairCommit . setReleaseFlag ( affairCommit . getReleaseFlag ( ) ) ;
dataAffairCommit . setState ( affairCommit . getState ( ) ) ;
dataAffairCommit . setTargetId ( getTargetId ( commitParam ) ) ;
dataAffairCommit . setId ( commitParam . getAffairId ( ) ) ;
dataAffairCommit . setCommentVal ( commitParam . getComment ( ) ) ;
dataAffairCommit . setReleaseFlag ( commitParam . getReleaseFlag ( ) ) ;
dataAffairCommit . setState ( commitParam . getState ( ) ) ;
dataAffairCommit . setUserId ( sysUser . getId ( ) ) ;
dataAffairCommit . setUserCode ( sysUser . getCode ( ) ) ;
dataAffairCommit . setUserName ( sysUser . getName ( ) ) ;
dataAffairCommit . setResultData ( flag ) ;
dataAffairCommit . setAttachIds ( affairCommit . getAttachIds ( ) ) ;
dataAffairCommit . setAttachIds ( commitParam . getAttachIds ( ) ) ;
dataAffairCommitMapper . insert ( dataAffairCommit ) ;
VtbVerificationBatch batch = vtbVerificationBatchService . getById ( affairCommit . getTargetId ( ) ) ;
List < VtbVerification > verificationList = vtbVerificationBatchService . listVerifications ( batch . getId ( ) ) ;
//保存到每个核销
for ( VtbVerification verification : verificationList ) {
DataAffairCommit obj = CopierUtil . copy ( dataAffairCommit , new DataAffairCommit ( ) ) ;
@ -152,6 +166,205 @@ public class VtbVerificationBatchOperationServiceImpl implements VtbVerification
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
for ( TbsAffairCommitBo itemCommit : commitParam . getChildList ( ) ) {
VtbVerification verification = null ;
for ( VtbVerification item : verificationList ) {
if ( item . getId ( ) . toString ( ) . equals ( itemCommit . getTargetId ( ) ) ) {
verification = item ;
break ;
}
}
if ( verification = = null ) {
log . error ( "对接参数异常:{}" , JsonUtil . objectToJson ( commitParam ) ) ;
continue ;
}
//更新释放标识
if ( itemCommit . getReleaseFlag ( ) ! = null ) {
VtbVerification vtbVer = new VtbVerification ( ) ;
vtbVer . setId ( verification . getId ( ) ) ;
vtbVer . setRegReleaseFlag ( itemCommit . getReleaseFlag ( ) ) ;
vtbVerificationService . updateById ( vtbVer ) ;
}
//保存审批线结果
VtbVerificationYard yard = new VtbVerificationYard ( ) ;
yard . setBatchId ( Long . parseLong ( commitParam . getTargetId ( ) ) ) ;
yard . setVerificationId ( verification . getId ( ) ) ;
yard . setVerificationSubCode ( verification . getVerificationCode ( ) ) ;
yard . setState ( itemCommit . getState ( ) ) ;
yard . setAffairId ( itemCommit . getAffairId ( ) ) ;
yard . setComment ( itemCommit . getComment ( ) ) ;
yard . setCaseRemark ( itemCommit . getCaseRemark ( ) ) ;
//审批中(next)、完成(finish)、拒绝(refused)
boolean isFinish = "finished" . equals ( flag ) ;
boolean isNext = "next" . equals ( flag ) ;
boolean isStop = "backed" . equals ( flag ) | | "refuse" . equals ( flag ) ;
//释放费用
boolean isRelease = itemCommit . getReleaseFlag ( ) ! = null & & itemCommit . getReleaseFlag ( ) . equals ( 1 ) ;
if ( isStop ) {
log . warn ( "单据[{}]状态:{},中止审批" , verification . getVerificationCode ( ) , flag ) ;
verificationApplication . backCommitAndStop ( verification , "backed" . equals ( flag ) ) ;
if ( isRelease ) {
log . warn ( "单据[{}]状态:{},中止审批并释放费用" , verification . getVerificationCode ( ) , flag ) ;
vtbVerificationService . release ( verification . getActivityId ( ) , sysUser . getCode ( ) , false ) ;
}
} else if ( ! isFinish & & ! isNext ) {
log . error ( "远程调用返回,非指定状态:{}" , JsonUtil . objectToJson ( commitParam ) ) ;
continue ;
}
yardService . save ( yard ) ;
//非终止或者驳回,保存审批线金额明细
BigDecimal totalAmount = BigDecimal . ZERO ;
if ( ! isStop ) {
List < VtbVerificationSubjectCenter > subjectCenters = vtbVerificationSubjectCenterService . listByVerificationId ( verification . getId ( ) ) ;
//isCenterCommit 代表自定义成本中心维度递交
boolean isCenterCommit = subjectCenters . size ( ) > 0 ;
List < VtbVerificationSubject > verificationSubjects = vtbVerificationSubjectService . listByVerificationId ( verification . getId ( ) ) ;
List < VtbVerificationYardItem > yardItemList = new ArrayList < > ( ) ;
List < VtbVerificationSubject > verSubject4Update = new ArrayList < > ( ) ;
List < VtbVerificationYardCenterItem > yarnCenterList = new ArrayList < > ( ) ;
//拓展成本中心维度调整记录
List < VtbVerificationSubjectCenter > subjectCenterUpdateList = new ArrayList < > ( ) ;
for ( VtbVerificationSubject currVs : verificationSubjects ) {
BigDecimal changeAmount = null ;
Integer countSession = null ;
Integer countPerson = null ;
List < TbsAffairCommitBo . AffairSubjectCenterItemLine > centerItemLineList = null ;
// if(isCenterCommit){
if ( CollectionUtil . isNotEmpty ( itemCommit . getAffairSubjectCenterLines ( ) ) ) {
for ( TbsAffairCommitBo . AffairSubjectCenterLine centerLine : itemCommit . getAffairSubjectCenterLines ( ) ) {
if ( currVs . getSubjectId ( ) . equals ( centerLine . getSubjectId ( ) ) ) {
changeAmount = BigDecimal . ZERO ;
if ( centerLine . getCenterItemLines ( ) ! = null ) {
for ( TbsAffairCommitBo . AffairSubjectCenterItemLine itemLine : centerLine . getCenterItemLines ( ) ) {
changeAmount = changeAmount . add ( itemLine . getAmount ( ) ) ;
}
}
centerItemLineList = centerLine . getCenterItemLines ( ) ;
countSession = centerLine . getCountSession ( ) ;
countPerson = centerLine . getCountPerson ( ) ;
break ;
}
}
}
//保存明细判断是否更变金额
VtbVerificationYardItem yardItem = CopierUtil . copy ( currVs , new VtbVerificationYardItem ( ) ) ;
yardItem . setYardId ( yard . getId ( ) ) ;
yardItem . initSetNull ( ) ;
BigDecimal lastAmount = currVs . getUsedAmount ( ) ;
yardItem . setLastAmount ( lastAmount ) ;
Integer lastSession = currVs . getCountSession ( ) ;
yardItem . setLastSession ( lastSession ) ;
yardItem . setCurrSession ( lastSession ) ;
if ( countSession ! = null ) {
yardItem . setCurrSession ( countSession ) ;
if ( ! countSession . equals ( lastSession ) ) {
VtbVerificationSubject verSub4Upd = new VtbVerificationSubject ( ) ;
verSub4Upd . setId ( currVs . getId ( ) ) ;
verSub4Upd . setCountSession ( countSession ) ;
verSubject4Update . add ( verSub4Upd ) ;
if ( lastSession ! = null ) {
if ( lastSession > countSession ) {
yardItem . setRemark2 ( "减少场次:" + ( lastSession - countSession ) ) ;
} else {
yardItem . setRemark2 ( "增加场次:" + ( countSession - lastSession ) ) ;
}
}
}
}
Integer lastPerson = currVs . getCountPerson ( ) ;
yardItem . setLastPerson ( lastPerson ) ;
yardItem . setCurrPerson ( lastPerson ) ;
if ( countPerson ! = null ) {
yardItem . setCurrPerson ( countPerson ) ;
if ( ! countPerson . equals ( lastPerson ) ) {
VtbVerificationSubject verSub4Upd = new VtbVerificationSubject ( ) ;
verSub4Upd . setId ( currVs . getId ( ) ) ;
verSub4Upd . setCountPerson ( countPerson ) ;
verSubject4Update . add ( verSub4Upd ) ;
if ( lastPerson ! = null ) {
if ( lastPerson > countPerson ) {
yardItem . setRemark3 ( "减少人数:" + ( lastPerson - countPerson ) ) ;
} else {
yardItem . setRemark3 ( "增加人数:" + ( countPerson - lastPerson ) ) ;
}
}
}
}
//金额有更变
if ( changeAmount ! = null & & changeAmount . compareTo ( lastAmount ) ! = 0 ) {
yardItem . setCurrAmount ( changeAmount ) ;
BigDecimal diff = changeAmount . subtract ( lastAmount ) ;
if ( diff . compareTo ( BigDecimal . ZERO ) > 0 ) {
yardItem . setRemark ( "增加费用:" + diff ) ;
} else {
yardItem . setRemark ( "减少费用:" + 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 ( ) ) ;
if ( centerItemLineList ! = null & & subjectCenters . size ( ) > 0 ) {
for ( TbsAffairCommitBo . AffairSubjectCenterItemLine centerItemLine : centerItemLineList ) {
VtbVerificationYardCenterItem centerItem = VtbVerificationYardCenterItem . toNewObject ( yardItem ) ;
for ( VtbVerificationSubjectCenter subjectCenter : subjectCenters ) {
if ( centerItemLine . getActivityCenterId ( ) . equals ( subjectCenter . getActivityCenterId ( ) ) ) {
centerItem . setCenterId ( subjectCenter . getCenterId ( ) ) ;
centerItem . setCenterCode ( subjectCenter . getCenterCode ( ) ) ;
centerItem . setCenterName ( subjectCenter . getCenterName ( ) ) ;
centerItem . setCenterType ( subjectCenter . getCenterType ( ) ) ;
centerItem . setActivityCenterId ( subjectCenter . getActivityCenterId ( ) ) ;
centerItem . setLastAmount ( subjectCenter . getUsedAmount ( ) = = null ? BigDecimal . ZERO : subjectCenter . getUsedAmount ( ) ) ;
centerItem . setCurrAmount ( centerItemLine . getAmount ( ) ) ;
BigDecimal diff = centerItem . getCurrAmount ( ) . subtract ( centerItem . getLastAmount ( ) ) ;
//修改center的记录金额
VtbVerificationSubjectCenter scParam = new VtbVerificationSubjectCenter ( ) ;
scParam . setId ( subjectCenter . getId ( ) ) ;
scParam . setUsedAmount ( centerItemLine . getAmount ( ) ) ;
subjectCenterUpdateList . add ( scParam ) ;
if ( diff . compareTo ( BigDecimal . ZERO ) > 0 ) {
centerItem . setRemark ( "增加费用:" + diff ) ;
} else {
centerItem . setRemark ( "减少费用:" + diff . negate ( ) ) ;
}
}
}
yarnCenterList . add ( centerItem ) ;
}
}
yardItemList . add ( yardItem ) ;
}
yardItemService . saveBatch ( yardItemList ) ;
if ( yarnCenterList . size ( ) > 0 ) {
yardCenterItemService . saveBatch ( yarnCenterList ) ;
}
vtbVerificationSubjectService . updateBatchById ( verSubject4Update ) ;
if ( subjectCenterUpdateList . size ( ) > 0 ) {
vtbVerificationSubjectCenterService . updateBatchById ( subjectCenterUpdateList ) ;
}
//重新计算合计
if ( isFinish ) {
verificationApplication . finishCallBack ( verification , totalAmount ) ;
if ( isRelease ) {
vtbVerificationService . release ( verification . getActivityId ( ) , sysUser . getCode ( ) , false ) ;
}
} else {
//更新金额
VtbVerification vtbVer = new VtbVerification ( ) ;
vtbVer . setId ( verification . getId ( ) ) ;
vtbVer . setAmount ( totalAmount ) ;
vtbVerificationService . updateById ( vtbVer ) ;
}
}
}
}
@Override
@ -165,4 +378,9 @@ public class VtbVerificationBatchOperationServiceImpl implements VtbVerification
//审批完成后调用
}
@Override
public R < ? > commitAffair ( TbsAffairCommitBo affairCommit ) {
return VtbVerificationBatchOperationService . super . commitAffair ( affairCommit ) ;
}
}