|
@@ -3,6 +3,7 @@ package org.dromara.backstage.business.payments;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjUtil;
|
|
import cn.hutool.core.util.ObjUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.dromara.backstage.basics.domain.vo.PtWorkstationVo;
|
|
import org.dromara.backstage.basics.domain.vo.PtWorkstationVo;
|
|
|
import org.dromara.backstage.basics.service.IPtWorkstationService;
|
|
import org.dromara.backstage.basics.service.IPtWorkstationService;
|
|
@@ -10,12 +11,15 @@ import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
|
|
|
import org.dromara.backstage.cardCenter.service.IPtCardService;
|
|
import org.dromara.backstage.cardCenter.service.IPtCardService;
|
|
|
import org.dromara.backstage.consumption.domain.bo.XfCreditAccountBackBo;
|
|
import org.dromara.backstage.consumption.domain.bo.XfCreditAccountBackBo;
|
|
|
import org.dromara.backstage.consumption.domain.bo.XfCreditAccountBo;
|
|
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.XfCreditAccountBackVo;
|
|
|
import org.dromara.backstage.consumption.domain.vo.XfCreditAccountVo;
|
|
import org.dromara.backstage.consumption.domain.vo.XfCreditAccountVo;
|
|
|
import org.dromara.backstage.consumption.domain.vo.XfTermVo;
|
|
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.IXfCreditAccountBackService;
|
|
|
import org.dromara.backstage.consumption.service.IXfCreditAccountService;
|
|
import org.dromara.backstage.consumption.service.IXfCreditAccountService;
|
|
|
import org.dromara.backstage.consumption.service.IXfTermService;
|
|
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.bo.PtBagBo;
|
|
|
import org.dromara.backstage.payment.domain.vo.PtBagVo;
|
|
import org.dromara.backstage.payment.domain.vo.PtBagVo;
|
|
|
import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
|
|
import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
|
|
@@ -26,10 +30,14 @@ import org.dromara.common.core.exception.payments.PaymentsException;
|
|
|
import org.dromara.common.core.utils.MessageUtils;
|
|
import org.dromara.common.core.utils.MessageUtils;
|
|
|
import org.dromara.common.core.utils.RecordIdUtils;
|
|
import org.dromara.common.core.utils.RecordIdUtils;
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* name: PaymentsBusiness
|
|
* name: PaymentsBusiness
|
|
@@ -44,6 +52,7 @@ import java.util.Date;
|
|
|
@RequiredArgsConstructor
|
|
@RequiredArgsConstructor
|
|
|
@Service
|
|
@Service
|
|
|
public class PaymentsBusiness {
|
|
public class PaymentsBusiness {
|
|
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(PaymentsBusiness.class);
|
|
|
private final IPtWorkstationService workstationService;
|
|
private final IPtWorkstationService workstationService;
|
|
|
private final IPtUserAccountService userAccountService;
|
|
private final IPtUserAccountService userAccountService;
|
|
|
private final IXfTermService termService;
|
|
private final IXfTermService termService;
|
|
@@ -51,35 +60,40 @@ public class PaymentsBusiness {
|
|
|
private final IPtBagService bagService;
|
|
private final IPtBagService bagService;
|
|
|
private final IXfCreditAccountBackService creditAccountBackService;
|
|
private final IXfCreditAccountBackService creditAccountBackService;
|
|
|
private final IXfCreditAccountService creditAccountService;
|
|
private final IXfCreditAccountService creditAccountService;
|
|
|
|
|
+ private final IXfUserTotalService userTotalService;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 账户资金收支时获取必要的辅助信息
|
|
* 账户资金收支时获取必要的辅助信息
|
|
|
*
|
|
*
|
|
|
- * @param bo 资金收支信息
|
|
|
|
|
- * @param accountVo 资金收支账户信息
|
|
|
|
|
- * @param cardVo 资金收支卡片信息
|
|
|
|
|
- * @param bagVo 资金收支钱包信息
|
|
|
|
|
- * @param termVo 资金收支消费设备信息
|
|
|
|
|
- * @param workstationVo 资金收支工作站信息
|
|
|
|
|
|
|
+ * @param bo 资金收支信息
|
|
|
|
|
+ * @return 辅助信息列表
|
|
|
*/
|
|
*/
|
|
|
- public void getOtherInfo(PtBagBo bo, PtUserAccountVo accountVo, PtCardVo cardVo, PtBagVo bagVo, XfTermVo termVo, PtWorkstationVo workstationVo) {
|
|
|
|
|
|
|
+ public List<Object> getOtherInfo(PtBagBo bo) {
|
|
|
|
|
+ List<Object> list = new ArrayList<>();
|
|
|
//1.人员辅助信息
|
|
//1.人员辅助信息
|
|
|
- accountVo = userAccountService.queryById(bo.getUserId());
|
|
|
|
|
|
|
+ PtUserAccountVo userAccountVo = userAccountService.queryById(bo.getUserId());
|
|
|
|
|
+ list.add(userAccountVo);
|
|
|
//2.卡片辅助信息
|
|
//2.卡片辅助信息
|
|
|
|
|
+ PtCardVo ptCardVo;
|
|
|
if (bo.getCardId() > 0) {
|
|
if (bo.getCardId() > 0) {
|
|
|
//如果传入了cardId,根据cardId查询卡片信息
|
|
//如果传入了cardId,根据cardId查询卡片信息
|
|
|
- cardVo = cardService.queryById(bo.getCardId());
|
|
|
|
|
|
|
+ ptCardVo = cardService.queryById(bo.getCardId());
|
|
|
} else {
|
|
} else {
|
|
|
//查询当前人的正常主卡
|
|
//查询当前人的正常主卡
|
|
|
- cardVo = cardService.queryMainCardByUserId(bo.getUserId());
|
|
|
|
|
|
|
+ ptCardVo = cardService.queryMainCardByUserId(bo.getUserId());
|
|
|
}
|
|
}
|
|
|
|
|
+ list.add(ptCardVo);
|
|
|
//3.钱包辅助信息
|
|
//3.钱包辅助信息
|
|
|
- bagVo = bagService.queryById(bo.getBagId());
|
|
|
|
|
|
|
+ PtBagVo ptBagVo = bagService.queryById(bo.getBagId());
|
|
|
|
|
+ list.add(ptBagVo);
|
|
|
//4.设备辅助信息
|
|
//4.设备辅助信息
|
|
|
- termVo = termService.queryByNo(bo.getTermNo() == null ? 0 : bo.getTermNo());
|
|
|
|
|
|
|
+ XfTermVo xfTermVo = termService.queryByNo(bo.getTermNo() == null ? 0 : bo.getTermNo());
|
|
|
|
|
+ list.add(xfTermVo);
|
|
|
//5.工作站辅助信息
|
|
//5.工作站辅助信息
|
|
|
- workstationVo = workstationService.queryById(bo.getStationId());
|
|
|
|
|
|
|
+ PtWorkstationVo ptWorkstationVo = workstationService.queryById(bo.getStationId());
|
|
|
|
|
+ list.add(ptWorkstationVo);
|
|
|
|
|
|
|
|
|
|
+ return list;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -128,12 +142,13 @@ public class PaymentsBusiness {
|
|
|
if (ObjUtil.isNotEmpty(workstationVo)) {
|
|
if (ObjUtil.isNotEmpty(workstationVo)) {
|
|
|
xfCreditaccountbackBo.setStationId(workstationVo.getStationId());
|
|
xfCreditaccountbackBo.setStationId(workstationVo.getStationId());
|
|
|
}
|
|
}
|
|
|
- //xfCreditaccountbackBo.setRecordId();
|
|
|
|
|
- //xfCreditaccountbackBo.setGroupId();
|
|
|
|
|
- //xfCreditaccountbackBo.setCreditId();
|
|
|
|
|
- //xfCreditaccountbackBo.setOriginalId();
|
|
|
|
|
- //xfCreditaccountbackBo.setSmsSend();
|
|
|
|
|
- return creditAccountBackService.createOriginalRecord(xfCreditaccountbackBo);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ 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;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -189,11 +204,64 @@ public class PaymentsBusiness {
|
|
|
|
|
|
|
|
xfCreditaccountbo.setOriginalId(originalId);
|
|
xfCreditaccountbo.setOriginalId(originalId);
|
|
|
|
|
|
|
|
- //xfCreditaccountbo.setRecordId(0L);
|
|
|
|
|
- return creditAccountService.keepAccounts(xfCreditaccountbo);
|
|
|
|
|
|
|
+ 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 资金收支信息
|
|
|
|
|
+ */
|
|
|
|
|
+ public void createOrderNormal(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));
|
|
|
|
|
+
|
|
|
|
|
+ //3.收支入账,此处只需要入收支明细表就可以了
|
|
|
|
|
+ log.info("[{}订单生成完成,开始生成{}收支记录]-{}", bo.getCreditType().message(), bo.getCreditType().message(), JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ keepAccounts(bo, accountVo, cardVo, bagVo, termVo, workstationVo, creditBackVo.getBackId());
|
|
|
|
|
+
|
|
|
|
|
+ //4.写日统计表
|
|
|
|
|
+ log.info("[收支记录生成完成,开始写个人日统计表]-{}", JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ createOrUpdateUserTotal(bo, accountVo, cardVo);
|
|
|
|
|
+ }
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 收支入账前校验收支原始记录
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param originalId 原始记录Id
|
|
|
|
|
+ */
|
|
|
private void ValidOriginalRecord(String originalId){
|
|
private void ValidOriginalRecord(String originalId){
|
|
|
String message;
|
|
String message;
|
|
|
XfCreditAccountBackVo xfCreditaccountbackVo = creditAccountBackService.queryById(originalId);
|
|
XfCreditAccountBackVo xfCreditaccountbackVo = creditAccountBackService.queryById(originalId);
|
|
@@ -207,6 +275,14 @@ public class PaymentsBusiness {
|
|
|
throw new PaymentsException("资金收支-原始记录", message);
|
|
throw new PaymentsException("资金收支-原始记录", message);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 生成资金收支备份表和收支表的32位主键Id
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param bo 资金收支信息
|
|
|
|
|
+ * @param accountVo 人员账户信息
|
|
|
|
|
+ * @param bagVo 账户钱包信息
|
|
|
|
|
+ * @return 生成的记录Id
|
|
|
|
|
+ */
|
|
|
@NotNull
|
|
@NotNull
|
|
|
private String getRecordKeyId(PtBagBo bo, PtUserAccountVo accountVo, PtBagVo bagVo) {
|
|
private String getRecordKeyId(PtBagBo bo, PtUserAccountVo accountVo, PtBagVo bagVo) {
|
|
|
BigDecimal a = new BigDecimal(100);
|
|
BigDecimal a = new BigDecimal(100);
|