diff --git a/src/main/java/com/qs/serve/modules/seeyon/service/SeeYonService.java b/src/main/java/com/qs/serve/modules/seeyon/service/SeeYonService.java index 3fceda67..8337d2b2 100644 --- a/src/main/java/com/qs/serve/modules/seeyon/service/SeeYonService.java +++ b/src/main/java/com/qs/serve/modules/seeyon/service/SeeYonService.java @@ -17,7 +17,7 @@ import java.util.List; */ public interface SeeYonService { - R> commonListAffairs(String targetId,String syFormId, String templateId, String templateCode); + R> commonListAffairs(String targetId,String syFormId,String templateCode); R commonCommit(TbsAffairCommitBo affairCommit,String formCode); diff --git a/src/main/java/com/qs/serve/modules/seeyon/service/impl/SeeYonServiceImpl.java b/src/main/java/com/qs/serve/modules/seeyon/service/impl/SeeYonServiceImpl.java index 750a2151..b1658e64 100644 --- a/src/main/java/com/qs/serve/modules/seeyon/service/impl/SeeYonServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/seeyon/service/impl/SeeYonServiceImpl.java @@ -39,7 +39,7 @@ public class SeeYonServiceImpl implements SeeYonService { @Nullable @Override - public R> commonListAffairs(String targetId,String syFormId, String templateId, String templateCode) { + public R> commonListAffairs(String targetId,String syFormId, String templateCode) { SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); if(!StringUtils.hasText(sysUser.getSyUserId())||!StringUtils.hasText(sysUser.getSyAccount())){ return R.error("当前账号未绑定致远用户信息"); @@ -47,7 +47,6 @@ public class SeeYonServiceImpl implements SeeYonService { CtpAffairQo param = new CtpAffairQo(); param.setTargetId(targetId); param.setFormMainId(syFormId); - param.setTemplateId(templateId); param.setTemplateCode(templateCode); return this.listFormAffair(param); } diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java index 690eea12..dbd30705 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java @@ -297,9 +297,8 @@ public class TbsCostApplyController { if(costApplyParam.getSyFormId()==null){ return R.ok(); } - String templateId = TbsSeeYonConst.CostApplyConf.Id(); String templateCode = TbsSeeYonConst.CostApplyConf.Code(); - R> syResult = seeYonService.commonListAffairs(costApplyId+"",null,templateId,templateCode); + R> syResult = seeYonService.commonListAffairs(costApplyId+"",null,templateCode); List ctpAffairs = syResult.getData(); if(ctpAffairs.size()>0){ List oaUserIds = ctpAffairs.stream().map(CtpAffair::getMemberId).collect(Collectors.toList()); diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java index a11e2928..f52b691d 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java @@ -16,9 +16,10 @@ public class TbsAffairCommitBo { /** * 费用申请id、核销id */ - @NotNull private Long costApplyId; + private Long policyId; + /** 状态:0-否定,1-同意,2-退回 */ @NotNull private Integer state; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/vo/CtpAffairVo.java b/src/main/java/com/qs/serve/modules/tbs/entity/vo/CtpAffairVo.java index 5475355c..a0d05aba 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/vo/CtpAffairVo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/vo/CtpAffairVo.java @@ -19,6 +19,9 @@ public class CtpAffairVo { /** 费用申请信息 */ private TbsCostApply costApply; + /** 核销信息 */ + private Object policyInfo; + /** 费用核销信息 */ private VtbVerification verification; diff --git a/src/main/java/com/qs/serve/modules/tzc/common/TzPolicyItemStatus.java b/src/main/java/com/qs/serve/modules/tzc/common/TzPolicyItemStatus.java new file mode 100644 index 00000000..44beb0a5 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tzc/common/TzPolicyItemStatus.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.tzc.common; + +/** + * @author YenHex + * @since 2023/2/27 + */ +public interface TzPolicyItemStatus { + + Integer Status_0_Default = 0; + Integer Status_1_PassSuccess = 1; + Integer Status_2_SyncSuccess = 2; + Integer Status_3_Finished = 3; + +} diff --git a/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyController.java b/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyController.java index 1723d6a5..2bda9e3e 100644 --- a/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyController.java +++ b/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyController.java @@ -2,6 +2,8 @@ package com.qs.serve.modules.tzc.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qs.serve.common.model.annotation.SysLog; +import com.qs.serve.common.model.consts.BudgetLogOptFlag; +import com.qs.serve.common.model.consts.BudgetLogRollbackFlag; import com.qs.serve.common.model.dto.PageVo; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.BizType; @@ -10,8 +12,22 @@ import com.qs.serve.common.util.AuthContextUtils; import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.CopierUtil; import com.qs.serve.common.util.StringUtils; +import com.qs.serve.modules.seeyon.entity.CtpAffair; +import com.qs.serve.modules.seeyon.entity.CtpAffairQo; +import com.qs.serve.modules.seeyon.service.SeeYonService; +import com.qs.serve.modules.sys.entity.SysUser; +import com.qs.serve.modules.sys.service.SysUserService; +import com.qs.serve.modules.tbs.common.TbsCostApplyState; +import com.qs.serve.modules.tbs.common.TbsSeeYonConst; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.entity.TbsBudgetLog; +import com.qs.serve.modules.tbs.entity.TbsCostApply; +import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult; +import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; +import com.qs.serve.modules.tbs.service.TbsBudgetLogService; +import com.qs.serve.modules.tzc.common.TzPolicyItemStatus; import com.qs.serve.modules.tzc.common.TzcPolicyStatus; import com.qs.serve.modules.tzc.entity.TzcPolicyItem; import com.qs.serve.modules.tzc.service.TzcPolicyApplication; @@ -26,7 +42,10 @@ import com.qs.serve.modules.tzc.entity.TzcPolicy; import com.qs.serve.modules.tzc.service.TzcPolicyService; import javax.validation.Valid; +import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * 政策 政策 @@ -42,6 +61,9 @@ public class TzcPolicyController { private TzcPolicyService tzcPolicyService; private TzcPolicyItemService tzcPolicyItemService; private TzcPolicyApplication policyApplication; + private TbsBudgetLogService tbsBudgetLogService; + private SysUserService sysUserService; + private SeeYonService seeYonService; /** * 预览 @@ -55,13 +77,13 @@ public class TzcPolicyController { } /** - * 提交政策申请 - * @param id + * 提交审批 + * @param policyId * @return */ - @PostMapping("commitApply") - public R commitApply(Long id){ - policyApplication.commitPolicy(id); + @PostMapping("/commitPolicy/{policyId}") + public R commitPolicy(@PathVariable("policyId")Long policyId){ + policyApplication.commitPolicy(policyId); return R.ok(); } @@ -157,16 +179,172 @@ public class TzcPolicyController { } + /** - * 提交审批 + * 审批列表(用于详情页) * @param policyId * @return */ - @PostMapping("/commitPolicy/{policyId}") - public R commitPolicy(@PathVariable("policyId")Long policyId){ - + @GetMapping("/ListAffairs") + public R> pageMemberAffair(Long policyId){ + TzcPolicy tzcPolicy = tzcPolicyService.getById(policyId); + if(tzcPolicy.getSyFormId()==null){ + return R.ok(); + } + String templateCode = TbsSeeYonConst.CostApplyConf.Code(); + R> syResult = seeYonService.commonListAffairs(policyId+"",null,templateCode); + List ctpAffairs = syResult.getData(); + if(ctpAffairs.size()>0){ + List oaUserIds = ctpAffairs.stream().map(CtpAffair::getMemberId).collect(Collectors.toList()); + List userList = sysUserService.listByOaMemberIds(oaUserIds); + List result = new ArrayList<>(); + for (CtpAffair ctpAffair : ctpAffairs) { + CtpAffairVo ctpAffairVo = new CtpAffairVo(); + ctpAffairVo.setAffairInfo(ctpAffair); + for (SysUser user : userList) { + if(ctpAffair.getMemberId().equals(user.getSyUserId())){ + ctpAffairVo.setUserInfo(user.toSysUserVo()); + } + } + result.add(ctpAffairVo); + } + return R.ok(result); + } return R.ok(); } + /** + * 审批列表(翻页) + * @param param + * @return + */ + @GetMapping("/pageMemberAffair") + public R> pageMemberAffair(CtpAffairQo param){ + param.setTitle(param.getChargeTheme()); + param.setApplyUserName(param.getUserName()); + SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); + if(!StringUtils.hasText(sysUser.getSyUserId())||!StringUtils.hasText(sysUser.getSyAccount())){ + return R.error("当前账号未绑定致远用户信息"); + } + param.setMemberId(sysUser.getSyUserId()); + param.setTemplateId(TbsSeeYonConst.CostApplyConf.Id()); + param.setTemplateCode(TbsSeeYonConst.CostApplyConf.Code()); + R> syResult = seeYonService.pageMemberAffair(param); + PageVo pageVo = syResult.getData(); + List ctpAffairs = pageVo.getList(); + if(ctpAffairs.size()>0){ + List oaUserIds = ctpAffairs.stream().map(CtpAffair::getMemberId).collect(Collectors.toList()); + List userList = sysUserService.listByOaMemberIds(oaUserIds); + List policyIds = ctpAffairs.stream().map(CtpAffair::getCostApplyId).collect(Collectors.toList()); + List policyList = tzcPolicyService.listByIds(policyIds); + List result = new ArrayList<>(); + for (CtpAffair ctpAffair : ctpAffairs) { + CtpAffairVo ctpAffairVo = new CtpAffairVo(); + for (TzcPolicy policy : policyList) { + if(policy.getId().toString().equals(ctpAffair.getCostApplyId())){ + ctpAffairVo.setPolicyInfo(policy); + break; + } + } + for (SysUser user : userList) { + if(ctpAffair.getMemberId().equals(user.getSyUserId())){ + ctpAffairVo.setUserInfo(user.toSysUserVo()); + } + } + ctpAffairVo.setAffairInfo(ctpAffair); + result.add(ctpAffairVo); + } + PageVo costApplyPageVo = PageVo.initNewList(pageVo,result); + return R.ok(costApplyPageVo); + } + return R.byEmptyList(); + } + + /** + * 提交审批节点 + * @return + */ + @PostMapping("/commitAffair") + @SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.DELETE) + @PreAuthorize("hasRole('tbs:costApply:commit')") + public R commitAffair(@RequestBody @Valid TbsAffairCommitBo affairCommit){ + seeYonService.testConnection(); + Long policyId = affairCommit.getPolicyId(); + TzcPolicy tzcPolicy = tzcPolicyService.getById(policyId); + if(!tzcPolicy.getPolicyStatus().equals(TzcPolicyStatus.Status_1_Checking)){ + return R.error("费用申请处于未非审批状态!"); + } + R result = seeYonService.commonCommit(affairCommit,TbsSeeYonConst.CostApplyConf.Code()); + boolean isBackCommit = affairCommit.getState()==2; + if(result.getStatus()==200){ + // 判断是否含有下个节点 + String flag = result.getData(); + //审批中(next)、完成(finish)、拒绝(refused) + if("finish".equals(flag)){ + TzcPolicy policy = new TzcPolicy(); + policy.setId(tzcPolicy.getId()); + policy.setPolicyStatus(TzcPolicyStatus.Status_2_PassSuccess); + policy.setPassTime(LocalDateTime.now()); + tzcPolicyService.updateById(policy); + //更新活动通过时间 + TzcPolicyItem policyItem = new TzcPolicyItem(); + policyItem.setPolicyItemStatus(TzPolicyItemStatus.Status_1_PassSuccess); + LambdaQueryWrapper itemLqw = new LambdaQueryWrapper<>(); + itemLqw.eq(TzcPolicyItem::getPolicyId,tzcPolicy.getId()); + tzcPolicyItemService.update(policyItem,itemLqw); + return R.ok(); + }else if ("stop".equals(flag)){ + if(isBackCommit){ + TzcPolicy policy = new TzcPolicy(); + policy.setId(tzcPolicy.getId()); + policy.setPolicyStatus(TzcPolicyStatus.Status_4_RollBack); + tzcPolicyService.updateById(policy); + LambdaQueryWrapper logLqw = new LambdaQueryWrapper<>(); + logLqw.select(TbsBudgetLog::getId); + logLqw.eq(TbsBudgetLog::getPolicyId,tzcPolicy.getId()); + logLqw.eq(TbsBudgetLog::getRollbackFlag, BudgetLogRollbackFlag.State_0); + List budgetLogList = tbsBudgetLogService.list(logLqw); + budgetLogList.forEach(a->a.setRollbackFlag(BudgetLogRollbackFlag.State_1)); + tbsBudgetLogService.updateBatchById(budgetLogList); + return R.ok(); + }else { + TzcPolicy policy = new TzcPolicy(); + policy.setId(tzcPolicy.getId()); + policy.setPolicyStatus(TzcPolicyStatus.Status_3_Refuse); + tzcPolicyService.updateById(policy); + tzcPolicyService.releaseCost(policy.getId(), 1); + //移除日志 + LambdaQueryWrapper logLqw = new LambdaQueryWrapper<>(); + logLqw.eq(TbsBudgetLog::getPolicyId,tzcPolicy.getId()); + List oldLogList = tbsBudgetLogService.list(logLqw); + List oldLogList4Upd = oldLogList.stream().map(a->{ + TbsBudgetLog budgetLog = new TbsBudgetLog(); + budgetLog.setId(a.getId()); + budgetLog.setRollbackFlag(BudgetLogRollbackFlag.State_3); + return budgetLog; + }).collect(Collectors.toList()); + tbsBudgetLogService.updateBatchById(oldLogList4Upd); + for (TbsBudgetLog budgetLog : oldLogList) { + budgetLog.setCreateBy(null); + budgetLog.setCreateTime(null); + budgetLog.setUpdateBy(null); + budgetLog.setUpdateTime(null); + budgetLog.setId(null); + budgetLog.setAmount(budgetLog.getAmount().negate()); + budgetLog.setOptType(BudgetLogOptFlag.State_12); + } + tbsBudgetLogService.saveBatch(oldLogList); + return R.ok(); + } + }else if ("next".equals(flag)){ + return R.ok(); + } + }else if (result.getStatus()==500){ + return result; + } + return R.error("远程调用失败"); + } + + } diff --git a/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java b/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java index 3fbe9a3d..9a609a23 100644 --- a/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java +++ b/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java @@ -59,7 +59,7 @@ public class TzcPolicyItem implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate policyEndDate; - /** 状态:0-未使用;1-已使用;2-已用完 */ + /** 状态:0-未使用;1-已通过;2-已同步;3-已用完 */ @NotNull(message = "状态:0-未使用;1-已使用;2-已用完不能为空") private Integer policyItemStatus; diff --git a/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java b/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java index d968d253..ba056e31 100644 --- a/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java +++ b/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java @@ -184,9 +184,8 @@ public class VtbVerificationController { if(syFormId==null){ return R.ok(); } - String templateId = TbsSeeYonConst.CostCheckConf.Id(); String templateCode = TbsSeeYonConst.CostCheckConf.Code(); - R> result = seeYonService.commonListAffairs(verificationId+"",null, templateId,templateCode); + R> result = seeYonService.commonListAffairs(verificationId+"",null,templateCode); List result2 = verificationApplication.buildCtpAffairVoList(result.getData()); return R.ok(result2); }