|
|
@ -259,7 +259,113 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC |
|
|
|
this.releaseCost(tbsCostApply.getId(),0); |
|
|
|
Map<String, Object> data = new HashMap<>(10); |
|
|
|
if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(1)){ |
|
|
|
//创建协议的费用申请Data
|
|
|
|
this.buildContractApplyData(id, tbsCostApply, activityList, payConditions, supplier, sysUser, data); |
|
|
|
}else { |
|
|
|
//创建通用的费用申请Data
|
|
|
|
this.buildCommonApplyData(id, tbsCostApply, activityList, supplier, result, sysUser, data); |
|
|
|
} |
|
|
|
//修改申请编码
|
|
|
|
String templateCode = tbsCostApply.getContractFlag().equals(1) |
|
|
|
?TbsSeeYonConst.CostApplyContractConf.Code() |
|
|
|
:TbsSeeYonConst.CostApplyConf.Code(); |
|
|
|
BaseCreateProcessBo createProcess = new BaseCreateProcessBo(); |
|
|
|
createProcess.setTemplateCode(templateCode); |
|
|
|
createProcess.setMemberLoginName(sysUser.getSyAccount()); |
|
|
|
createProcess.setSubjectTitle(TbsSeeYonConst.PRE_TITLE_COST_APPLY + tbsCostApply.getChargeTheme()); |
|
|
|
createProcess.setTargetId(tbsCostApply.getId()+""); |
|
|
|
createProcess.setDataJson(JsonUtil.objectToJson(data)); |
|
|
|
R<String> flowIdResult = seeYonService.baseCreateProcess(createProcess); |
|
|
|
if(flowIdResult.getStatus()!=200){ |
|
|
|
Assert.throwEx("远程服务调用失败"); |
|
|
|
} |
|
|
|
String flowId = flowIdResult.getData(); |
|
|
|
String formId = null; |
|
|
|
R<String> formIdResult = seeYonService.getFormId(templateCode,tbsCostApply.getId()); |
|
|
|
if(formIdResult.getStatus()==200){ |
|
|
|
formId = formIdResult.getData(); |
|
|
|
} |
|
|
|
TbsCostApply costApply = new TbsCostApply(); |
|
|
|
costApply.setId(tbsCostApply.getId()); |
|
|
|
costApply.setSyFlowId(flowId); |
|
|
|
costApply.setSyFormId(formId); |
|
|
|
costApply.setChargeState(TbsCostApplyState.State_1_apply.getCode()); |
|
|
|
costApply.setSubmitTime(LocalDateTime.now()); |
|
|
|
this.updateById(costApply); |
|
|
|
costApply = this.getById(costApply.getId()); |
|
|
|
//移除历史记录
|
|
|
|
budgetCostItemService.removeByCostApplyId(costApply.getId()); |
|
|
|
//保存无命中条件的预算
|
|
|
|
if(CollectionUtil.isNotEmpty(result.getBudgetUnMatchList())){ |
|
|
|
List<TbsCostUnItem> costUnItems = result.getBudgetUnMatchList().stream() |
|
|
|
.map(obj-> CopierUtil.copy(obj,new TbsCostUnItem())).collect(Collectors.toList()); |
|
|
|
tbsCostUnItemService.saveBatch(costUnItems); |
|
|
|
} |
|
|
|
//重新保存
|
|
|
|
List<TbsBudgetCostItem> allBudgetItem = new ArrayList<>(); |
|
|
|
allBudgetItem.addAll(result.getBudgetMatchList()); |
|
|
|
allBudgetItem.addAll(result.getBudgetUnMatchList()); |
|
|
|
budgetCostItemService.saveBatch(allBudgetItem); |
|
|
|
//TODO 无匹配的预算item保存到 TbsCostUnItem
|
|
|
|
//保存预算使用日志
|
|
|
|
List<TbsBudgetLog> budgetLogList = saveBudgetLog(result, sysUser, costApply, result.getBudgetMatchList(),result.getActivityList()); |
|
|
|
if(tbsCostApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())){ |
|
|
|
if(CollectionUtil.isNotEmpty(budgetLogList)){ |
|
|
|
budgetLogService.saveBatch(budgetLogList); |
|
|
|
} |
|
|
|
}else { |
|
|
|
//排除历史记录
|
|
|
|
LambdaQueryWrapper<TbsBudgetLog> logLqw = new LambdaQueryWrapper<>(); |
|
|
|
logLqw.eq(TbsBudgetLog::getCostApplyId,costApply.getId()); |
|
|
|
logLqw.eq(TbsBudgetLog::getRollbackFlag, BudgetLogRollbackFlag.State_1); |
|
|
|
List<TbsBudgetLog> oldLogList = budgetLogService.list(logLqw); |
|
|
|
List<TbsBudgetLog> oldLogList4Upd = oldLogList.stream().map(a->{ |
|
|
|
TbsBudgetLog budgetLog = new TbsBudgetLog(); |
|
|
|
budgetLog.setId(a.getId()); |
|
|
|
budgetLog.setRollbackFlag(BudgetLogRollbackFlag.State_2); |
|
|
|
return budgetLog; |
|
|
|
}).collect(Collectors.toList()); |
|
|
|
budgetLogService.updateBatchById(oldLogList4Upd); |
|
|
|
oldLogList = oldLogList.stream().filter(a-> |
|
|
|
a.getOptType().equals(BudgetLogOptFlag.State_1.getCode()) || a.getOptType().equals(BudgetLogOptFlag.State_6.getCode()) |
|
|
|
).collect(Collectors.toList()); |
|
|
|
for (TbsBudgetLog budgetLog : oldLogList) { |
|
|
|
budgetLog.setCreateBy(null); |
|
|
|
budgetLog.setCreateTime(null); |
|
|
|
budgetLog.setUpdateBy(null); |
|
|
|
budgetLog.setUpdateTime(null); |
|
|
|
budgetLog.setId(null); |
|
|
|
budgetLog.setAmount(budgetLog.getAmount().negate()); |
|
|
|
BudgetLogOptFlag optFlag = BudgetLogOptFlag.State_5; |
|
|
|
budgetLog.setAmount(TbsBudgetLogBuildUtil.buildAmount(budgetLog.getAmount(),optFlag)); |
|
|
|
budgetLog.setOptType(optFlag.getCode()); |
|
|
|
} |
|
|
|
budgetLogService.saveBatch(oldLogList); |
|
|
|
//将1改6
|
|
|
|
budgetLogList.forEach(a->a.setOptType(BudgetLogOptFlag.State_6.getCode())); |
|
|
|
budgetLogService.saveBatch(budgetLogList); |
|
|
|
} |
|
|
|
//创建流程后回调
|
|
|
|
BaseCreateCallbackBo callbackBo = new BaseCreateCallbackBo(templateCode,costApply.getId()+""); |
|
|
|
seeYonService.createCallbackStatus(callbackBo); |
|
|
|
activitySlottingFeeMapper.updatePassFlagByCostApplyId(costApply.getId(),2); |
|
|
|
|
|
|
|
//请求校验是否成功
|
|
|
|
AsyncManager.me().execute(AsyncFactory.submitCostApply(costApply)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 创建协议类的申请DATA |
|
|
|
* @param id |
|
|
|
* @param tbsCostApply |
|
|
|
* @param activityList |
|
|
|
* @param payConditions |
|
|
|
* @param supplier |
|
|
|
* @param sysUser |
|
|
|
* @param data |
|
|
|
*/ |
|
|
|
private void buildContractApplyData(String id, TbsCostApply tbsCostApply, List<TbsActivity> activityList, List<TbsActivityPayCondition> payConditions, BmsSupplier supplier, SysUser sysUser, Map<String, Object> data) { |
|
|
|
data.put("title", tbsCostApply.getChargeTheme()); |
|
|
|
data.put("orgId", tbsCostApply.getId().toString()); |
|
|
|
data.put("costApplyCode", tbsCostApply.getCode()); |
|
|
@ -304,7 +410,16 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC |
|
|
|
LambdaQueryWrapper<TbsCostContract> lqw = new LambdaQueryWrapper<>(); |
|
|
|
lqw.eq(TbsCostContract::getCostApplyId, tbsCostApply.getId()); |
|
|
|
List<TbsCostContract> contracts = costContractMapper.selectList(lqw); |
|
|
|
|
|
|
|
if(contracts.size()>0){ |
|
|
|
//活动的科目和成本中心
|
|
|
|
List<TbsActivityCenter> tbsActivityCenters = tbsActivityCenterService.listByCostApplyId(Long.parseLong(id)); |
|
|
|
String concatCenterCodes = tbsActivityCenters.stream().map(TbsActivityCenter::getCenterCode).collect(Collectors.joining(",")); |
|
|
|
String concatCenterNames = tbsActivityCenters.stream().map(TbsActivityCenter::getCenterName).collect(Collectors.joining(",")); |
|
|
|
List<TbsActivitySubject> tbsActivitySubjects = tbsActivitySubjectService.listByCostApplyId(Long.parseLong(id)); |
|
|
|
String concatSubjectCodes = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectCode).collect(Collectors.joining(",")); |
|
|
|
String concatSubjectNames = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectName).collect(Collectors.joining(",")); |
|
|
|
|
|
|
|
TbsCostContract contract = contracts.get(0); |
|
|
|
data.put("payee",contract.getPayee()); |
|
|
|
data.put("bankName",contract.getBankName()); |
|
|
@ -314,6 +429,12 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC |
|
|
|
data.put("sealNum",contract.getSealNum()); |
|
|
|
data.put("fileNum",contract.getFileNum()); |
|
|
|
|
|
|
|
data.put("accountCode",concatSubjectCodes); |
|
|
|
data.put("accountName",concatSubjectNames); |
|
|
|
data.put("costCenterNo",concatCenterCodes); |
|
|
|
data.put("costCenterName",concatCenterNames); |
|
|
|
|
|
|
|
|
|
|
|
data.put("contractName",contract.getContractName()); |
|
|
|
data.put("contractTotalMoney",contract.getContractAmount()); |
|
|
|
data.put("signDate",contract.getSignTime()==null?null:contract.getSignTime().toString()); |
|
|
@ -361,13 +482,6 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC |
|
|
|
dataActivity.setMoney(centerGoods.getCenterGoodsAmount()); |
|
|
|
subList.add(dataActivity); |
|
|
|
} |
|
|
|
//活动的科目和成本中心
|
|
|
|
List<TbsActivityCenter> tbsActivityCenters = tbsActivityCenterService.listByCostApplyId(Long.parseLong(id)); |
|
|
|
String concatCenterCodes = tbsActivityCenters.stream().map(TbsActivityCenter::getCenterCode).collect(Collectors.joining(",")); |
|
|
|
String concatCenterNames = tbsActivityCenters.stream().map(TbsActivityCenter::getCenterName).collect(Collectors.joining(",")); |
|
|
|
List<TbsActivitySubject> tbsActivitySubjects = tbsActivitySubjectService.listByCostApplyId(Long.parseLong(id)); |
|
|
|
String concatSubjectCodes = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectCode).collect(Collectors.joining(",")); |
|
|
|
String concatSubjectNames = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectName).collect(Collectors.joining(",")); |
|
|
|
// 付款条件
|
|
|
|
for (TbsActivityPayCondition payCondition : payConditions) { |
|
|
|
TbsActivity currActivity = null; |
|
|
@ -387,10 +501,6 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC |
|
|
|
subPayment.setPayCompleteState(stateMsg); |
|
|
|
subPayment.setPayRemark(payCondition.getRemark()); |
|
|
|
subPayment.setPayCode(payCondition.getCode()); |
|
|
|
subPayment.setAccountCode(concatSubjectCodes); |
|
|
|
subPayment.setAccountName(concatSubjectNames); |
|
|
|
subPayment.setCostCenterNo(concatCenterCodes); |
|
|
|
subPayment.setCostCenterName(concatCenterNames); |
|
|
|
subList.add(subPayment); |
|
|
|
} |
|
|
|
|
|
|
@ -409,99 +519,6 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC |
|
|
|
} |
|
|
|
//关联
|
|
|
|
data.put("sub", subList); |
|
|
|
|
|
|
|
}else { |
|
|
|
//创建通用的费用申请Data
|
|
|
|
this.buildCommonApplyData(id, tbsCostApply, activityList, supplier, result, sysUser, data); |
|
|
|
} |
|
|
|
//修改申请编码
|
|
|
|
String templateCode = tbsCostApply.getContractFlag().equals(1) |
|
|
|
?TbsSeeYonConst.CostApplyContractConf.Code() |
|
|
|
:TbsSeeYonConst.CostApplyConf.Code(); |
|
|
|
BaseCreateProcessBo createProcess = new BaseCreateProcessBo(); |
|
|
|
createProcess.setTemplateCode(templateCode); |
|
|
|
createProcess.setMemberLoginName(sysUser.getSyAccount()); |
|
|
|
createProcess.setSubjectTitle(TbsSeeYonConst.PRE_TITLE_COST_APPLY + tbsCostApply.getChargeTheme()); |
|
|
|
createProcess.setTargetId(tbsCostApply.getId()+""); |
|
|
|
createProcess.setDataJson(JsonUtil.objectToJson(data)); |
|
|
|
R<String> flowIdResult = seeYonService.baseCreateProcess(createProcess); |
|
|
|
if(flowIdResult.getStatus()!=200){ |
|
|
|
Assert.throwEx("远程服务调用失败"); |
|
|
|
} |
|
|
|
String flowId = flowIdResult.getData(); |
|
|
|
String formId = null; |
|
|
|
R<String> formIdResult = seeYonService.getFormId(templateCode,tbsCostApply.getId()); |
|
|
|
if(formIdResult.getStatus()==200){ |
|
|
|
formId = formIdResult.getData(); |
|
|
|
} |
|
|
|
TbsCostApply costApply = new TbsCostApply(); |
|
|
|
costApply.setId(tbsCostApply.getId()); |
|
|
|
costApply.setSyFlowId(flowId); |
|
|
|
costApply.setSyFormId(formId); |
|
|
|
costApply.setChargeState(TbsCostApplyState.State_1_apply.getCode()); |
|
|
|
costApply.setSubmitTime(LocalDateTime.now()); |
|
|
|
this.updateById(costApply); |
|
|
|
costApply = this.getById(costApply.getId()); |
|
|
|
//移除历史记录
|
|
|
|
budgetCostItemService.removeByCostApplyId(costApply.getId()); |
|
|
|
//保存无命中条件的预算
|
|
|
|
if(CollectionUtil.isNotEmpty(result.getBudgetUnMatchList())){ |
|
|
|
List<TbsCostUnItem> costUnItems = result.getBudgetUnMatchList().stream() |
|
|
|
.map(obj-> CopierUtil.copy(obj,new TbsCostUnItem())).collect(Collectors.toList()); |
|
|
|
tbsCostUnItemService.saveBatch(costUnItems); |
|
|
|
} |
|
|
|
//重新保存
|
|
|
|
List<TbsBudgetCostItem> allBudgetItem = new ArrayList<>(); |
|
|
|
allBudgetItem.addAll(result.getBudgetMatchList()); |
|
|
|
allBudgetItem.addAll(result.getBudgetUnMatchList()); |
|
|
|
budgetCostItemService.saveBatch(allBudgetItem); |
|
|
|
//TODO 无匹配的预算item保存到 TbsCostUnItem
|
|
|
|
//保存预算使用日志
|
|
|
|
List<TbsBudgetLog> budgetLogList = saveBudgetLog(result, sysUser, costApply, result.getBudgetMatchList(),result.getActivityList()); |
|
|
|
if(tbsCostApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())){ |
|
|
|
if(CollectionUtil.isNotEmpty(budgetLogList)){ |
|
|
|
budgetLogService.saveBatch(budgetLogList); |
|
|
|
} |
|
|
|
}else { |
|
|
|
//排除历史记录
|
|
|
|
LambdaQueryWrapper<TbsBudgetLog> logLqw = new LambdaQueryWrapper<>(); |
|
|
|
logLqw.eq(TbsBudgetLog::getCostApplyId,costApply.getId()); |
|
|
|
logLqw.eq(TbsBudgetLog::getRollbackFlag, BudgetLogRollbackFlag.State_1); |
|
|
|
List<TbsBudgetLog> oldLogList = budgetLogService.list(logLqw); |
|
|
|
List<TbsBudgetLog> oldLogList4Upd = oldLogList.stream().map(a->{ |
|
|
|
TbsBudgetLog budgetLog = new TbsBudgetLog(); |
|
|
|
budgetLog.setId(a.getId()); |
|
|
|
budgetLog.setRollbackFlag(BudgetLogRollbackFlag.State_2); |
|
|
|
return budgetLog; |
|
|
|
}).collect(Collectors.toList()); |
|
|
|
budgetLogService.updateBatchById(oldLogList4Upd); |
|
|
|
oldLogList = oldLogList.stream().filter(a-> |
|
|
|
a.getOptType().equals(BudgetLogOptFlag.State_1.getCode()) || a.getOptType().equals(BudgetLogOptFlag.State_6.getCode()) |
|
|
|
).collect(Collectors.toList()); |
|
|
|
for (TbsBudgetLog budgetLog : oldLogList) { |
|
|
|
budgetLog.setCreateBy(null); |
|
|
|
budgetLog.setCreateTime(null); |
|
|
|
budgetLog.setUpdateBy(null); |
|
|
|
budgetLog.setUpdateTime(null); |
|
|
|
budgetLog.setId(null); |
|
|
|
budgetLog.setAmount(budgetLog.getAmount().negate()); |
|
|
|
BudgetLogOptFlag optFlag = BudgetLogOptFlag.State_5; |
|
|
|
budgetLog.setAmount(TbsBudgetLogBuildUtil.buildAmount(budgetLog.getAmount(),optFlag)); |
|
|
|
budgetLog.setOptType(optFlag.getCode()); |
|
|
|
} |
|
|
|
budgetLogService.saveBatch(oldLogList); |
|
|
|
//将1改6
|
|
|
|
budgetLogList.forEach(a->a.setOptType(BudgetLogOptFlag.State_6.getCode())); |
|
|
|
budgetLogService.saveBatch(budgetLogList); |
|
|
|
} |
|
|
|
//创建流程后回调
|
|
|
|
BaseCreateCallbackBo callbackBo = new BaseCreateCallbackBo(templateCode,costApply.getId()+""); |
|
|
|
seeYonService.createCallbackStatus(callbackBo); |
|
|
|
activitySlottingFeeMapper.updatePassFlagByCostApplyId(costApply.getId(),2); |
|
|
|
|
|
|
|
//请求校验是否成功
|
|
|
|
AsyncManager.me().execute(AsyncFactory.submitCostApply(costApply)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void buildCommonApplyData(String id, TbsCostApply tbsCostApply, List<TbsActivity> activityList, BmsSupplier supplier, TbsBudgetCostResult result, SysUser sysUser, Map<String, Object> data) { |
|
|
|