|
|
@@ -1,319 +0,0 @@
|
|
|
-package org.dromara.backstage.business.payments;
|
|
|
-
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
-import cn.hutool.core.util.ObjUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
-import cn.hutool.json.JSONUtil;
|
|
|
-import lombok.RequiredArgsConstructor;
|
|
|
-import org.dromara.backstage.basics.domain.vo.PtWorkstationVo;
|
|
|
-import org.dromara.backstage.basics.service.IPtWorkstationService;
|
|
|
-import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
|
|
|
-import org.dromara.backstage.cardCenter.service.IPtCardService;
|
|
|
-import org.dromara.backstage.consumption.domain.bo.XfCreditAccountBackBo;
|
|
|
-import org.dromara.backstage.consumption.domain.bo.XfCreditAccountBo;
|
|
|
-import org.dromara.backstage.consumption.domain.bo.XfUserTotalBo;
|
|
|
-import org.dromara.backstage.consumption.domain.vo.XfCreditAccountBackVo;
|
|
|
-import org.dromara.backstage.consumption.domain.vo.XfCreditAccountVo;
|
|
|
-import org.dromara.backstage.consumption.domain.vo.XfTermVo;
|
|
|
-import org.dromara.backstage.consumption.domain.vo.XfUserTotalVo;
|
|
|
-import org.dromara.backstage.consumption.service.IXfCreditAccountBackService;
|
|
|
-import org.dromara.backstage.consumption.service.IXfCreditAccountService;
|
|
|
-import org.dromara.backstage.consumption.service.IXfTermService;
|
|
|
-import org.dromara.backstage.consumption.service.IXfUserTotalService;
|
|
|
-import org.dromara.backstage.payment.domain.bo.PtBagBo;
|
|
|
-import org.dromara.backstage.payment.domain.vo.PtBagVo;
|
|
|
-import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
|
|
|
-import org.dromara.backstage.payment.service.IPtBagService;
|
|
|
-import org.dromara.backstage.payment.service.IPtUserAccountService;
|
|
|
-import org.dromara.common.core.enums.CreditStatusEnum;
|
|
|
-import org.dromara.common.core.exception.payments.PaymentsException;
|
|
|
-import org.dromara.common.core.utils.MessageUtils;
|
|
|
-import org.dromara.common.core.utils.RecordIdUtils;
|
|
|
-import org.jetbrains.annotations.NotNull;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-
|
|
|
-/**
|
|
|
- * name: PaymentsBusiness
|
|
|
- * package: org.dromara.backstage.business.payments.strategy
|
|
|
- * description: 资金收支业务处理类
|
|
|
- * date: 2024-08-20 20:21:39 20:21
|
|
|
- *
|
|
|
- * @author luoyibo
|
|
|
- * @version 0.1
|
|
|
- * @since JDK 1.8
|
|
|
- */
|
|
|
-@RequiredArgsConstructor
|
|
|
-@Service
|
|
|
-public class PaymentsBusiness {
|
|
|
- private static final Logger log = LoggerFactory.getLogger(PaymentsBusiness.class);
|
|
|
- private final IPtWorkstationService workstationService;
|
|
|
- private final IPtUserAccountService userAccountService;
|
|
|
- private final IXfTermService termService;
|
|
|
- private final IPtCardService cardService;
|
|
|
- private final IPtBagService bagService;
|
|
|
- private final IXfCreditAccountBackService creditAccountBackService;
|
|
|
- private final IXfCreditAccountService creditAccountService;
|
|
|
- private final IXfUserTotalService userTotalService;
|
|
|
-
|
|
|
- /**
|
|
|
- * 账户资金收支时获取必要的辅助信息
|
|
|
- *
|
|
|
- * @param bo 资金收支信息
|
|
|
- * @return 辅助信息列表
|
|
|
- */
|
|
|
- public List<Object> getOtherInfo(PtBagBo bo) {
|
|
|
- List<Object> list = new ArrayList<>();
|
|
|
- //1.人员辅助信息
|
|
|
- PtUserAccountVo userAccountVo = userAccountService.queryById(bo.getUserId());
|
|
|
- list.add(userAccountVo);
|
|
|
- //2.卡片辅助信息
|
|
|
- PtCardVo ptCardVo;
|
|
|
- if (bo.getCardId() != null && bo.getCardId() > 0) {
|
|
|
- //如果传入了cardId,根据cardId查询卡片信息
|
|
|
- ptCardVo = cardService.queryById(bo.getCardId());
|
|
|
- } else {
|
|
|
- //查询当前人的正常主卡
|
|
|
- ptCardVo = cardService.queryMainCardByUserId(bo.getUserId());
|
|
|
- }
|
|
|
- list.add(ptCardVo);
|
|
|
- //3.钱包辅助信息
|
|
|
- PtBagVo ptBagVo = bagService.queryByUserBagCode(bo.getUserId(), bo.getBagCode());
|
|
|
- list.add(ptBagVo);
|
|
|
- //4.设备辅助信息
|
|
|
- XfTermVo xfTermVo = termService.queryByNo(bo.getTermNo() == null ? 0 : bo.getTermNo());
|
|
|
- list.add(xfTermVo);
|
|
|
- //5.工作站辅助信息
|
|
|
- PtWorkstationVo ptWorkstationVo = workstationService.queryById(bo.getStationId());
|
|
|
- list.add(ptWorkstationVo);
|
|
|
-
|
|
|
- return list;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 生成原始收支记录(收支流水备份表)
|
|
|
- *
|
|
|
- * @param bo 资金收支信息
|
|
|
- * @param accountVo 资金收支账户信息
|
|
|
- * @param cardVo 资金收支卡片信息
|
|
|
- * @param termVo 资金收支消费设备信息
|
|
|
- * @param workstationVo 资金收支工作站信息
|
|
|
- * @return 原始收支记录
|
|
|
- */
|
|
|
- public XfCreditAccountBackVo createOriginalRecord(PtBagBo bo, PtUserAccountVo accountVo, PtCardVo cardVo, PtBagVo bagVo, XfTermVo termVo, PtWorkstationVo workstationVo) {
|
|
|
- XfCreditAccountBackBo xfCreditaccountbackBo = new XfCreditAccountBackBo();
|
|
|
- String backId = getRecordKeyId(bo, accountVo, bagVo);
|
|
|
- xfCreditaccountbackBo.setBackId(backId);
|
|
|
-
|
|
|
- //设置交易数据
|
|
|
- xfCreditaccountbackBo.setCreditTime(new Date());
|
|
|
- xfCreditaccountbackBo.setCreditType(bo.getCreditType().code().toString());
|
|
|
- xfCreditaccountbackBo.setReceiptMoney(bo.getReceiptMoney());
|
|
|
- xfCreditaccountbackBo.setPayStyle(bo.getPayStyle());
|
|
|
- xfCreditaccountbackBo.setCreditStatus(CreditStatusEnum.CREATE.code());
|
|
|
- xfCreditaccountbackBo.setUseType(bo.getUseType().code());
|
|
|
- xfCreditaccountbackBo.setOperatorId(bo.getOperatorId());
|
|
|
-
|
|
|
- //设置交易人数据
|
|
|
- xfCreditaccountbackBo.setUserId(bo.getUserId());
|
|
|
-
|
|
|
- //设置交易卡片数据mq
|
|
|
- if (ObjUtil.isNotEmpty(cardVo)) {
|
|
|
- xfCreditaccountbackBo.setCardNo(cardVo.getCardNo());
|
|
|
- //xfCreditaccountbackBo.setMainCard(cardVo.getMainCard());
|
|
|
- }
|
|
|
- //设置账户钱包信息
|
|
|
- xfCreditaccountbackBo.setBagType(bagVo.getBagCode());
|
|
|
- xfCreditaccountbackBo.setCardValue(bagVo.getBalance());
|
|
|
-
|
|
|
- //设置交易设备信息
|
|
|
- if (ObjUtil.isNotEmpty(termVo)) {
|
|
|
- xfCreditaccountbackBo.setTermNo(termVo.getTermNo());
|
|
|
- xfCreditaccountbackBo.setTermRecordId(bo.getTermRecordId());
|
|
|
- }
|
|
|
-
|
|
|
- //设置交易工作站信息
|
|
|
- if (ObjUtil.isNotEmpty(workstationVo)) {
|
|
|
- xfCreditaccountbackBo.setStationId(workstationVo.getStationId());
|
|
|
- }
|
|
|
-
|
|
|
- XfCreditAccountBackVo creditAccountBackVo = creditAccountBackService.createOriginalRecord(xfCreditaccountbackBo);
|
|
|
- if (ObjUtil.isEmpty(creditAccountBackVo)) {
|
|
|
- String message = MessageUtils.message("payments.OriginalRecord.create", JSONUtil.parse(bo));
|
|
|
- throw new PaymentsException("资金收支-原始记录", message);
|
|
|
- }
|
|
|
- return creditAccountBackVo;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 收支记账(收支流水表)
|
|
|
- *
|
|
|
- * @param bo 资金收支信息
|
|
|
- * @param accountVo 资金收支账户信息
|
|
|
- * @param cardVo 资金收支卡片信息
|
|
|
- * @param termVo 资金收支消费设备信息
|
|
|
- * @param workstationVo 资金收支工作站信息
|
|
|
- * @param originalId 原始收支记录Id(收支备份表主键)
|
|
|
- * @return 正式收支记录
|
|
|
- */
|
|
|
- public XfCreditAccountVo keepAccounts(PtBagBo bo, PtUserAccountVo accountVo, PtCardVo cardVo, PtBagVo bagVo, XfTermVo termVo, PtWorkstationVo workstationVo, String originalId) {
|
|
|
- //校验要处理的原始收支记录
|
|
|
- ValidOriginalRecord(originalId);
|
|
|
- XfCreditAccountBo xfCreditaccountbo = new XfCreditAccountBo();
|
|
|
- String accountId = getRecordKeyId(bo, accountVo, bagVo);
|
|
|
- xfCreditaccountbo.setCreditId(accountId);
|
|
|
-
|
|
|
- //设置交易数据
|
|
|
- xfCreditaccountbo.setCreditTime(DateUtil.date());
|
|
|
- xfCreditaccountbo.setCreditType(bo.getCreditType().code().toString());
|
|
|
- xfCreditaccountbo.setReceiptMoney(bo.getReceiptMoney());
|
|
|
- xfCreditaccountbo.setPayStyle(bo.getPayStyle());
|
|
|
- xfCreditaccountbo.setUseType(bo.getUseType().code());
|
|
|
-
|
|
|
- //设置交易账户信息
|
|
|
- xfCreditaccountbo.setUserId(accountVo.getUserId());
|
|
|
- xfCreditaccountbo.setUserNumb(accountVo.getUserNumb());
|
|
|
- xfCreditaccountbo.setRealName(accountVo.getRealName());
|
|
|
- xfCreditaccountbo.setDeptId(accountVo.getDeptId());
|
|
|
- xfCreditaccountbo.setDeptName(accountVo.getDeptName());
|
|
|
- //设置设备信息
|
|
|
- xfCreditaccountbo.setTermNo(termVo.getTermNo());
|
|
|
- xfCreditaccountbo.setTermName(termVo.getTermName());
|
|
|
- xfCreditaccountbo.setTermRecordId(bo.getTermRecordId());
|
|
|
- //设置工作站信息
|
|
|
- xfCreditaccountbo.setStationNumb(workstationVo.getStationNumb());
|
|
|
- xfCreditaccountbo.setStationName(workstationVo.getStationName());
|
|
|
- //设置卡片信息
|
|
|
- xfCreditaccountbo.setCardNo(cardVo.getCardNo());
|
|
|
- xfCreditaccountbo.setCardValue(bagVo.getBalance());
|
|
|
- xfCreditaccountbo.setCardType(cardVo.getCardType());
|
|
|
- xfCreditaccountbo.setCardCount(bagVo.getRechargeCount() + 1);
|
|
|
- xfCreditaccountbo.setCardTypeName(cardVo.getCardTypeName());
|
|
|
- xfCreditaccountbo.setMainCard(cardVo.getMainCard());
|
|
|
- //设置钱包信息
|
|
|
- xfCreditaccountbo.setBagType(bagVo.getBagCode());
|
|
|
- // 设置操作员信息
|
|
|
- xfCreditaccountbo.setOperatorId(bo.getOperatorId());
|
|
|
- xfCreditaccountbo.setOperatorName(bo.getOperatorName());
|
|
|
-
|
|
|
- xfCreditaccountbo.setOriginalId(originalId);
|
|
|
-
|
|
|
- XfCreditAccountVo creditAccountVo = creditAccountService.keepAccounts(xfCreditaccountbo);
|
|
|
- if (ObjUtil.isEmpty(creditAccountVo)) {
|
|
|
- String message = MessageUtils.message("payments.keepAccounts.create", originalId);
|
|
|
- throw new PaymentsException("资金收支-收支入账", message);
|
|
|
- }
|
|
|
- return creditAccountVo;
|
|
|
- }
|
|
|
-
|
|
|
- public XfUserTotalVo createOrUpdateUserTotal(PtBagBo bo, PtUserAccountVo accountVo, PtCardVo cardVo) {
|
|
|
- XfUserTotalBo xfUserTotalBo = new XfUserTotalBo();
|
|
|
- xfUserTotalBo.setUserId(accountVo.getUserId());
|
|
|
- xfUserTotalBo.setUserNumb(accountVo.getUserNumb());
|
|
|
- xfUserTotalBo.setRealName(accountVo.getRealName());
|
|
|
- xfUserTotalBo.setDeptName(accountVo.getDeptName());
|
|
|
- xfUserTotalBo.setCardNo(cardVo.getCardNo());
|
|
|
- xfUserTotalBo.setDateDay(DateUtil.format(new Date(), "yyyy-MM-dd"));
|
|
|
- xfUserTotalBo.setUseType(bo.getUseType().code());
|
|
|
- xfUserTotalBo.setCreditMoney(bo.getReceiptMoney());
|
|
|
-
|
|
|
- return userTotalService.createOrUpdateUserTotal(xfUserTotalBo);
|
|
|
- }
|
|
|
-
|
|
|
- public PtBagVo updateBalance(PtBagBo bagBo) {
|
|
|
- return bagService.updateBalanceByBo(bagBo);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 通用收支入账处理逻辑
|
|
|
- * 这里主要是处理一次性完成的原始订单生成、收支记账
|
|
|
- *
|
|
|
- * @param bo 资金收支信息
|
|
|
- * @return 辅助信息
|
|
|
- */
|
|
|
- public List<Object> createOrderMin(PtBagBo bo) {
|
|
|
- log.info("[开始生成{}订单]-{}", bo.getCreditType().message(), JSONUtil.toJsonStr(bo));
|
|
|
- //1.处理入账需要的其它信息
|
|
|
- List<Object> list = getOtherInfo(bo);
|
|
|
- PtUserAccountVo accountVo = list.get(0) == null ? new PtUserAccountVo() : (PtUserAccountVo) list.get(0);
|
|
|
- PtCardVo cardVo = list.get(1) == null ? new PtCardVo() : (PtCardVo) list.get(1);
|
|
|
- PtBagVo bagVo = list.get(2) == null ? new PtBagVo() : (PtBagVo) list.get(2);
|
|
|
- XfTermVo termVo = list.get(3) == null ? new XfTermVo() : (XfTermVo) list.get(3);
|
|
|
- PtWorkstationVo workstationVo = list.get(4) == null ? new PtWorkstationVo() : (PtWorkstationVo) list.get(4);
|
|
|
-
|
|
|
- //2.创建收支订单
|
|
|
- XfCreditAccountBackVo creditBackVo = createOriginalRecord(bo, (PtUserAccountVo) list.get(0),
|
|
|
- (PtCardVo) list.get(1), (PtBagVo) list.get(2), (XfTermVo) list.get(3), (PtWorkstationVo) list.get(4));
|
|
|
- bo.setOriginalId(creditBackVo.getBackId());
|
|
|
- //3.收支入账,此处只需要入收支明细表就可以了
|
|
|
- log.info("[{}订单生成完成,开始生成{}收支记录]-{}", bo.getCreditType().message(), bo.getCreditType().message(), JSONUtil.toJsonStr(bo));
|
|
|
- XfCreditAccountVo creditVo = keepAccounts(bo, accountVo, cardVo, bagVo, termVo, workstationVo, creditBackVo.getBackId());
|
|
|
- bo.setCreditId(creditVo.getCreditId());
|
|
|
- return list;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 通用收支入账处理逻辑
|
|
|
- * 这里主要是处理一次性完成的原始订单生成、收支记账和更新个人日统计表功能
|
|
|
- *
|
|
|
- * @param bo 资金收支信息
|
|
|
- */
|
|
|
- public void createOrderNormal(PtBagBo bo) {
|
|
|
- List<Object> list = createOrderMin(bo);
|
|
|
- PtUserAccountVo accountVo = list.get(0) == null ? new PtUserAccountVo() : (PtUserAccountVo) list.get(0);
|
|
|
- PtCardVo cardVo = list.get(1) == null ? new PtCardVo() : (PtCardVo) list.get(1);
|
|
|
-
|
|
|
- //4.写日统计表
|
|
|
- log.info("[收支记录生成完成,开始写个人日统计表]-{}", JSONUtil.toJsonStr(bo));
|
|
|
- createOrUpdateUserTotal(bo, accountVo, cardVo);
|
|
|
- }
|
|
|
-
|
|
|
- public void updateOrderStatus(PtBagBo bo, Integer status, BigDecimal cardValue) {
|
|
|
- creditAccountBackService.updateStatusById(bo.getOriginalId(), status, bo.getCreditId(), cardValue);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 收支入账前校验收支原始记录
|
|
|
- *
|
|
|
- * @param originalId 原始记录Id
|
|
|
- */
|
|
|
- private void ValidOriginalRecord(String originalId) {
|
|
|
- String message;
|
|
|
- XfCreditAccountBackVo xfCreditaccountbackVo = creditAccountBackService.queryById(originalId);
|
|
|
- if (ObjUtil.isEmpty(xfCreditaccountbackVo)) {
|
|
|
- message = MessageUtils.message("payments.OriginalRecord.get", originalId);
|
|
|
- throw new PaymentsException("资金收支-原始记录", message);
|
|
|
- }
|
|
|
- String accountId = xfCreditaccountbackVo.getCreditId();
|
|
|
- if (StrUtil.isNotEmpty(accountId)) {
|
|
|
- message = MessageUtils.message("payments.OriginalRecord.isPost", originalId, accountId);
|
|
|
- throw new PaymentsException("资金收支-原始记录", message);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 生成资金收支备份表和收支表的32位主键Id
|
|
|
- *
|
|
|
- * @param bo 资金收支信息
|
|
|
- * @param accountVo 人员账户信息
|
|
|
- * @param bagVo 账户钱包信息
|
|
|
- * @return 生成的记录Id
|
|
|
- */
|
|
|
- @NotNull
|
|
|
- private String getRecordKeyId(PtBagBo bo, PtUserAccountVo accountVo, PtBagVo bagVo) {
|
|
|
- BigDecimal a = new BigDecimal(100);
|
|
|
- int key3 = 0;
|
|
|
- if (bo.getReceiptMoney().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- key3 = bo.getReceiptMoney().multiply(a).intValue();
|
|
|
- } else {
|
|
|
- key3 = bo.getReceiptMoney().negate().multiply(a).intValue();
|
|
|
- }
|
|
|
- return RecordIdUtils.getRecordId(new Date(), Short.parseShort(bo.getCreditType().code().toString()), Integer.parseInt(accountVo.getUserNo().toString()), key3, Integer.parseInt(bagVo.getBagCode()));
|
|
|
- }
|
|
|
-}
|