package com.fjhx.account.flow; import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.fjhx.account.entity.account.dto.AccountPaymentDto; import com.fjhx.account.entity.account.dto.AccountRequestFundsDto; import com.fjhx.account.entity.account.enums.AccountRequestFundsStatusEnum; import com.fjhx.account.entity.account.enums.PaymentStatusEnum; import com.fjhx.account.entity.account.po.AccountRequestFunds; import com.fjhx.account.entity.account.po.AccountRequestFundsDetail; import com.fjhx.account.service.account.AccountPaymentService; import com.fjhx.account.service.account.AccountRequestFundsDetailService; import com.fjhx.account.service.account.AccountRequestFundsService; import com.fjhx.common.constant.SourceConstant; import com.fjhx.common.utils.Assert; import com.fjhx.file.utils.ObsFileUtil; import com.fjhx.flow.core.FlowDelegate; import com.ruoyi.common.exception.ServiceException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.List; /** * 请款流程 * * @Author:caozj * @DATE:2023/4/3 17:38 */ @DS(SourceConstant.ACCOUNT) @Component public class AccountRequestFundsFlow extends FlowDelegate { @Autowired private AccountPaymentService accountPaymentService; @Autowired private AccountRequestFundsService accountRequestFundsService; @Autowired private AccountRequestFundsDetailService accountRequestFundsDetailService; @Override public String getFlowKey() { return "account_request_funds_flow"; } /** * 发起流程 * * @param flowId 流程ID * @param submitData 请款表信息 * @return */ @Override public Long start(Long flowId, JSONObject submitData) { // 获取提交数据 AccountRequestFundsDto accountRequestFundsDto = submitData.toJavaObject(AccountRequestFundsDto.class); // 添加请款表的信息 accountRequestFundsDto.setStatus(AccountRequestFundsStatusEnum.UNDER_REVIEW.getKey()); accountRequestFundsService.save(accountRequestFundsDto); // 添加请款详情表的信息 List accountRequestFundsDetailList = accountRequestFundsDto.getAccountRequestFundsDetailList(); if (CollectionUtils.isNotEmpty(accountRequestFundsDetailList)) { accountRequestFundsDetailList.forEach(item -> item.setAccountRequestFundsId(accountRequestFundsDto.getId())); accountRequestFundsDetailService.saveBatch(accountRequestFundsDetailList); } // 添加附件信息 ObsFileUtil.saveFile(accountRequestFundsDto.getFileList(), accountRequestFundsDto.getId()); return accountRequestFundsDto.getId(); } /** * 结束流程 * * @param flowId 流程ID * @param businessId 业务ID * @param submitData 请款表信息 */ @Override public void end(Long flowId, Long businessId, JSONObject submitData) { // 通过业务ID查询请款数据 AccountRequestFunds accountRequestFunds = accountRequestFundsService.getById(businessId); if (ObjectUtils.isEmpty(accountRequestFunds)) { throw new ServiceException("请款表的数据不存在"); } // 修改请款状态为审批通过 accountRequestFunds.setStatus(AccountRequestFundsStatusEnum.PASS.getKey()); // 修改核销状态以及预支单核销状态为已核销 if ("3".equals(accountRequestFunds.getType())) { accountRequestFunds.setWriteOffStatus(1); // 修改预支单核销状态 AccountRequestFunds advance = accountRequestFundsService.getById(accountRequestFunds.getAdvanceId()); Assert.notEmpty(advance, "查询不到关联预支单信息"); advance.setWriteOffStatus(1); accountRequestFundsService.updateById(advance); } accountRequestFundsService.updateById(accountRequestFunds); // 添加打款的数据 addPayment(accountRequestFunds); } /** * 添加打款表的数据 */ private void addPayment(AccountRequestFunds accountRequestFunds) { AccountPaymentDto accountPayment = new AccountPaymentDto(); accountPayment.setDepartmentId(accountRequestFunds.getDepartmentId()); accountPayment.setCorporationId(accountRequestFunds.getCorporationId()); accountPayment.setBusinessId(accountRequestFunds.getId()); accountPayment.setPaymentTime(accountRequestFunds.getPaymentTime()); accountPayment.setCurrency(accountRequestFunds.getCurrency()); accountPayment.setStatus(PaymentStatusEnum.UNDER_REVIEW.getKey()); accountPayment.setType(accountRequestFunds.getType()); accountPayment.setPaymentRemark(accountRequestFunds.getPaymentRemarks()); accountPayment.setPaymentMethod(accountRequestFunds.getPaymentMethod()); accountPayment.setIncomeAmount(accountRequestFunds.getTotal()); accountPayment.setName(accountRequestFunds.getName()); accountPayment.setBusinessManagementId(accountRequestFunds.getAccountManagementId()); accountPayment.setOpeningBank(accountRequestFunds.getOpeningBank()); accountPayment.setAccountOpening(accountRequestFunds.getAccountOpening()); accountPayment.setInterbankNumber(accountRequestFunds.getInterbankNumber()); accountPayment.setDataUser(accountRequestFunds.getCreateUser()); accountPayment.setApplyForTime(accountRequestFunds.getCreateTime()); // 如果是核销 核销数据审批通过后,根据“核销总额 - 预支总额”生成“待打款”数据 if ("3".equals(accountRequestFunds.getType())) { BigDecimal subtract = accountRequestFunds.getTotal().subtract(accountRequestFunds.getAdvanceAmounts()); accountPayment.setAmount(subtract); if (subtract.compareTo(BigDecimal.ZERO) <= 0) {//不生成打款数据 return; } } else { accountPayment.setAmount(accountRequestFunds.getTotal()); } accountPaymentService.save(accountPayment); } }