|
@@ -10,7 +10,6 @@ import org.dromara.backstage.basics.domain.vo.PtWorkstationVo;
|
|
|
import org.dromara.backstage.cardCenter.domain.bo.PtSubsidyitemBo;
|
|
import org.dromara.backstage.cardCenter.domain.bo.PtSubsidyitemBo;
|
|
|
import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
|
|
import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
|
|
|
import org.dromara.backstage.cardCenter.domain.vo.PtSubsidyitemVo;
|
|
import org.dromara.backstage.cardCenter.domain.vo.PtSubsidyitemVo;
|
|
|
-import org.dromara.backstage.cardCenter.service.IPtSubsidyitemService;
|
|
|
|
|
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;
|
|
@@ -18,10 +17,7 @@ import org.dromara.backstage.payment.domain.bo.PurseInOutBo;
|
|
|
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;
|
|
|
import org.dromara.common.core.domain.R;
|
|
import org.dromara.common.core.domain.R;
|
|
|
-import org.dromara.common.core.enums.BalanceUpdateEnum;
|
|
|
|
|
-import org.dromara.common.core.enums.CreditStatusEnum;
|
|
|
|
|
-import org.dromara.common.core.enums.CreditTypeEnum;
|
|
|
|
|
-import org.dromara.common.core.enums.SystemUseTypeEnum;
|
|
|
|
|
|
|
+import org.dromara.common.core.enums.*;
|
|
|
import org.dromara.common.core.exception.consume.ConsumeException;
|
|
import org.dromara.common.core.exception.consume.ConsumeException;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -48,6 +44,12 @@ import java.util.Map;
|
|
|
public class PayOrderBusiness {
|
|
public class PayOrderBusiness {
|
|
|
|
|
|
|
|
private final PayBaseBusiness payBaseBusiness;
|
|
private final PayBaseBusiness payBaseBusiness;
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 生成收支原始订单信息,写t_xf_creditAccountBack表
|
|
|
|
|
+ * @param orderBo 收支订单业务对象
|
|
|
|
|
+ * @return 原始订单信息
|
|
|
|
|
+ */
|
|
|
public XfCreditAccountBackVo createOrder(PurseInOutBo orderBo) {
|
|
public XfCreditAccountBackVo createOrder(PurseInOutBo orderBo) {
|
|
|
log.info("[{}订单信息验证-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
log.info("[{}订单信息验证-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
|
// 获取创建订单的辅助信息
|
|
// 获取创建订单的辅助信息
|
|
@@ -58,15 +60,22 @@ public class PayOrderBusiness {
|
|
|
PtWorkstationVo workstationVo = payBaseBusiness.checkWorkStation(orderBo);
|
|
PtWorkstationVo workstationVo = payBaseBusiness.checkWorkStation(orderBo);
|
|
|
|
|
|
|
|
// 生成原始订单记录
|
|
// 生成原始订单记录
|
|
|
- // 生成原始订单记录前先计算收支后的钱包余额,这里只是记录下收支完成后的钱包应有余额,但还没有实际更新钱包余额
|
|
|
|
|
log.info("[{}订单验证通过,创建订单]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
log.info("[{}订单验证通过,创建订单]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
|
|
|
+ // 生成原始订单记录前先计算收支后的钱包余额,这里只是记录下收支完成后的钱包应有余额,但还没有实际更新钱包余额
|
|
|
payBaseBusiness.calculateBalance(userBagVo,orderBo);
|
|
payBaseBusiness.calculateBalance(userBagVo,orderBo);
|
|
|
return payBaseBusiness.createOriginalRecord(orderBo, userAccountVo,
|
|
return payBaseBusiness.createOriginalRecord(orderBo, userAccountVo,
|
|
|
userCardVo, userBagVo, termVo, workstationVo);
|
|
userCardVo, userBagVo, termVo, workstationVo);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 收支订单入库
|
|
|
|
|
+ * 写/更新表:收支明细表:t_xf_creditAccount 个人日统计表:t_xf_userTotal 账户钱包表:t_pt_bag
|
|
|
|
|
+ * @param orderBo 收支订单业务对象
|
|
|
|
|
+ * @return 入库后的收支订单业务对象
|
|
|
|
|
+ */
|
|
|
@Transactional(rollbackFor = ConsumeException.class)
|
|
@Transactional(rollbackFor = ConsumeException.class)
|
|
|
- public PtBagVo postOrder(PurseInOutBo orderBo) {
|
|
|
|
|
|
|
+ public PurseInOutBo postOrder(PurseInOutBo orderBo) {
|
|
|
|
|
+ //校验待入库的原始订单
|
|
|
payBaseBusiness.ValidOriginalRecord(orderBo.getOriginalId());
|
|
payBaseBusiness.ValidOriginalRecord(orderBo.getOriginalId());
|
|
|
// 获取入库订单的辅助信息
|
|
// 获取入库订单的辅助信息
|
|
|
PtUserAccountVo userAccountVo = payBaseBusiness.checkUserAccount(orderBo);
|
|
PtUserAccountVo userAccountVo = payBaseBusiness.checkUserAccount(orderBo);
|
|
@@ -78,65 +87,76 @@ public class PayOrderBusiness {
|
|
|
log.info("[{}订单处理收支明细]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
log.info("[{}订单处理收支明细]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
|
XfCreditAccountVo orderDetailVo = payBaseBusiness.keepAccounts(orderBo, userAccountVo, userCardVo, userBagVo, termVo, workstationVo, orderBo.getOriginalId());
|
|
XfCreditAccountVo orderDetailVo = payBaseBusiness.keepAccounts(orderBo, userAccountVo, userCardVo, userBagVo, termVo, workstationVo, orderBo.getOriginalId());
|
|
|
orderBo.setCreditId(orderDetailVo.getCreditId());
|
|
orderBo.setCreditId(orderDetailVo.getCreditId());
|
|
|
-
|
|
|
|
|
|
|
+ orderBo.setBalance(userBagVo.getBalance());
|
|
|
//如果交易类型不为收管理费,则继续下面的操作以完成订单入库
|
|
//如果交易类型不为收管理费,则继续下面的操作以完成订单入库
|
|
|
if(!orderBo.getCreditType().equals(CreditTypeEnum.COMMISSION_CHARGE)){
|
|
if(!orderBo.getCreditType().equals(CreditTypeEnum.COMMISSION_CHARGE)){
|
|
|
- // TODO 2024-10-29 22:54:57 luoyibo 处理个人日统计表
|
|
|
|
|
|
|
+ // 处理个人日统计表
|
|
|
log.info("[{}订单处理人日统计表]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
log.info("[{}订单处理人日统计表]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
|
payBaseBusiness.createOrUpdateUserTotal(orderBo, userAccountVo, userCardVo);
|
|
payBaseBusiness.createOrUpdateUserTotal(orderBo, userAccountVo, userCardVo);
|
|
|
|
|
|
|
|
- // TODO 2024-10-29 22:55:48 luoyibo 更新个人钱包余额
|
|
|
|
|
|
|
+ // 更新个人钱包余额
|
|
|
log.info("[{}订单处理钱包余额]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
log.info("[{}订单处理钱包余额]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
|
PtBagVo afterBagVo = payBaseBusiness.updateBalance(orderBo);
|
|
PtBagVo afterBagVo = payBaseBusiness.updateBalance(orderBo);
|
|
|
-
|
|
|
|
|
- // TODO 2024-10-30 14:43:15 luoyibo 入账成功,更新原始订单的入账状态
|
|
|
|
|
|
|
+ orderBo.setBalance(afterBagVo.getBalance());
|
|
|
|
|
+ // 入账成功,更新原始订单的入账状态
|
|
|
log.info("[{}订单更新入账状态]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
log.info("[{}订单更新入账状态]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
|
payBaseBusiness.updateOriginalOrderStatus(orderBo, CreditStatusEnum.SUCCESS.code(), afterBagVo.getBalance());
|
|
payBaseBusiness.updateOriginalOrderStatus(orderBo, CreditStatusEnum.SUCCESS.code(), afterBagVo.getBalance());
|
|
|
-
|
|
|
|
|
- return afterBagVo;
|
|
|
|
|
}
|
|
}
|
|
|
- return null;
|
|
|
|
|
|
|
+ return orderBo;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 普通收支业务处理:充值/批量充值 退款/批量退款
|
|
|
|
|
+ * @param orderBo 收支业务对象
|
|
|
|
|
+ * @return 处理结果
|
|
|
|
|
+ */
|
|
|
@Transactional(rollbackFor = ConsumeException.class)
|
|
@Transactional(rollbackFor = ConsumeException.class)
|
|
|
- public R<Object> createNormalOrder(PurseInOutBo orderBo) {
|
|
|
|
|
|
|
+ public R<PurseInOutBo> createNormalOrder(PurseInOutBo orderBo) {
|
|
|
//将收支请求写入原始收支记录表
|
|
//将收支请求写入原始收支记录表
|
|
|
log.info("[准备创建{}订单-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
log.info("[准备创建{}订单-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
|
XfCreditAccountBackVo OriginalOrder = createOrder(orderBo);
|
|
XfCreditAccountBackVo OriginalOrder = createOrder(orderBo);
|
|
|
orderBo.setOriginalId(OriginalOrder.getBackId());
|
|
orderBo.setOriginalId(OriginalOrder.getBackId());
|
|
|
|
|
|
|
|
//原始收支记录成功,收支入账
|
|
//原始收支记录成功,收支入账
|
|
|
- log.info("[{}订单入账]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
|
|
|
- PtBagVo result = postOrder(orderBo);
|
|
|
|
|
|
|
+ log.info("准备[{}订单入账]-[{}]",orderBo.getCreditType().message(), JSONUtil.toJsonStr(orderBo));
|
|
|
|
|
+ PurseInOutBo result = postOrder(orderBo);
|
|
|
|
|
|
|
|
return R.ok(result);
|
|
return R.ok(result);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 补助收支入账
|
|
|
|
|
+ * @return 入账结果
|
|
|
|
|
+ */
|
|
|
@Transactional(rollbackFor = ConsumeException.class)
|
|
@Transactional(rollbackFor = ConsumeException.class)
|
|
|
public R<Object> createSubsidyOrder(){
|
|
public R<Object> createSubsidyOrder(){
|
|
|
List<String> infoList = new ArrayList<>();
|
|
List<String> infoList = new ArrayList<>();
|
|
|
Map<String, Integer> mapCount = new HashMap<>();
|
|
Map<String, Integer> mapCount = new HashMap<>();
|
|
|
mapCount.put("successCount",0);
|
|
mapCount.put("successCount",0);
|
|
|
mapCount.put("errorCount",0);
|
|
mapCount.put("errorCount",0);
|
|
|
-
|
|
|
|
|
|
|
+ //获取需要入账的补助明细
|
|
|
List<PtSubsidyitemVo> list = payBaseBusiness.selectPostSubsidyItem();
|
|
List<PtSubsidyitemVo> list = payBaseBusiness.selectPostSubsidyItem();
|
|
|
- if(ObjUtil.isEmpty(list)||list.size()<=0){
|
|
|
|
|
- return R.ok("没有需要入账的补助明细");
|
|
|
|
|
|
|
+ if(ObjUtil.isEmpty(list)|| list.isEmpty()){
|
|
|
|
|
+ return R.fail("[补助到账]-[没有需要入账的补助明细]");
|
|
|
}
|
|
}
|
|
|
- list.forEach(item->{
|
|
|
|
|
|
|
+ list.parallelStream().forEach(item->{
|
|
|
PurseInOutBo orderBo = createSubsidyPostBo(item);
|
|
PurseInOutBo orderBo = createSubsidyPostBo(item);
|
|
|
int successCount;
|
|
int successCount;
|
|
|
int errorCount;
|
|
int errorCount;
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- R<Object> result = createNormalOrder(orderBo);
|
|
|
|
|
|
|
+ R<PurseInOutBo> result = createNormalOrder(orderBo);
|
|
|
if (result.getCode() == R.SUCCESS) {
|
|
if (result.getCode() == R.SUCCESS) {
|
|
|
- successCount = mapCount.get("successCount");
|
|
|
|
|
- successCount ++;
|
|
|
|
|
- mapCount.put("successCount",successCount);
|
|
|
|
|
|
|
+ //到账成功,更新补助明细的到账状态
|
|
|
item.setGetDate(DateUtil.date());
|
|
item.setGetDate(DateUtil.date());
|
|
|
item.setFillStatus("Y");
|
|
item.setFillStatus("Y");
|
|
|
PtSubsidyitemBo bo = BeanUtil.copyProperties(item, PtSubsidyitemBo.class);
|
|
PtSubsidyitemBo bo = BeanUtil.copyProperties(item, PtSubsidyitemBo.class);
|
|
|
- payBaseBusiness.updatePostSubsidyItemStatus(bo);
|
|
|
|
|
|
|
+ boolean bl = payBaseBusiness.updatePostSubsidyItemStatus(bo);
|
|
|
|
|
+ if(bl){
|
|
|
|
|
+ successCount = mapCount.get("successCount");
|
|
|
|
|
+ successCount ++;
|
|
|
|
|
+ mapCount.put("successCount",successCount);
|
|
|
|
|
+ }
|
|
|
} else {
|
|
} else {
|
|
|
errorCount = mapCount.get("errorCount");
|
|
errorCount = mapCount.get("errorCount");
|
|
|
errorCount ++;
|
|
errorCount ++;
|
|
@@ -147,16 +167,82 @@ public class PayOrderBusiness {
|
|
|
infoList.add(MessageFormat.format("[补助到账失败]-[补助信息:{0}]-[错误信息:{1}]", JSONUtil.toJsonStr(orderBo), e.getMessage()));
|
|
infoList.add(MessageFormat.format("[补助到账失败]-[补助信息:{0}]-[错误信息:{1}]", JSONUtil.toJsonStr(orderBo), e.getMessage()));
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
- log.info("补助到账完成,成功[{}]条,失败[{}]条", mapCount.get("successCount"), mapCount.get("errorCount"));
|
|
|
|
|
|
|
+ String message = MessageFormat.format("补助到账完成,成功[{0}]条,失败[{1}]条", mapCount.get("successCount"), mapCount.get("errorCount"));
|
|
|
infoList.forEach(log::error);
|
|
infoList.forEach(log::error);
|
|
|
- return R.ok();
|
|
|
|
|
|
|
+ log.info(message);
|
|
|
|
|
+ return R.ok(message);
|
|
|
|
|
+ }
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 资金收支时计算管理费
|
|
|
|
|
+ * @param bo 资金收支业务对象
|
|
|
|
|
+ * @return 管理费收支业务对象
|
|
|
|
|
+ */
|
|
|
|
|
+ public PurseInOutBo computeCommission(PurseInOutBo bo){
|
|
|
|
|
+ return payBaseBusiness.computeCommission(bo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 充值入账
|
|
|
|
|
+ * @param bo 充值业务对象
|
|
|
|
|
+ * @return 入账结果
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional(rollbackFor = ConsumeException.class)
|
|
|
|
|
+ public R<PurseInOutBo> recharge(PurseInOutBo bo){
|
|
|
|
|
+ bo.setUseType(SystemUseTypeEnum.CONSUME);
|
|
|
|
|
+ PurseInOutBo commissionBo = computeCommission(bo);
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (commissionBo != null) {
|
|
|
|
|
+ R<PurseInOutBo> commissionResult = createNormalOrder(commissionBo);
|
|
|
|
|
+ if (commissionResult.getCode() != R.SUCCESS) {
|
|
|
|
|
+ return R.fail(commissionResult.getMsg());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ R<PurseInOutBo> result = createNormalOrder(bo);
|
|
|
|
|
+ if (result.getCode() == R.SUCCESS) {
|
|
|
|
|
+ return R.ok(result.getData());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return R.fail(result.getMsg());
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ return R.fail(e.getMessage());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public static PurseInOutBo createSubsidyPostBo(PtSubsidyitemVo item) {
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * @param bo 退款业务对象
|
|
|
|
|
+ * @return 退款结果
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional(rollbackFor = ConsumeException.class)
|
|
|
|
|
+ public R<PurseInOutBo>refund(PurseInOutBo bo){
|
|
|
|
|
+ //校验钱包余额是否充足
|
|
|
|
|
+ PtBagVo bagVo = payBaseBusiness.checkUserBag(bo);
|
|
|
|
|
+ if (bagVo.getBalance().compareTo(bo.getReceiptMoney()) < 0) {
|
|
|
|
|
+ return R.fail(MessageFormat.format("钱包余额不足,当前余额为:{0}", bagVo.getBalance()),bo);
|
|
|
|
|
+ }
|
|
|
|
|
+ bo.setUseType(SystemUseTypeEnum.CONSUME);
|
|
|
|
|
+ //退款是记支出,所以金额设置为负数
|
|
|
|
|
+ bo.setReceiptMoney(bo.getReceiptMoney().negate());
|
|
|
|
|
+ try {
|
|
|
|
|
+ R<PurseInOutBo> result = createNormalOrder(bo);
|
|
|
|
|
+ if (result.getCode() == R.SUCCESS) {
|
|
|
|
|
+ return R.ok(result.getData());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return R.fail(result.getMsg(),bo);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ return R.fail(e.getMessage(),bo);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 将要入账的补助信息转成收支订单业务对象
|
|
|
|
|
+ * @param item 补助信息
|
|
|
|
|
+ * @return 收支订单
|
|
|
|
|
+ */
|
|
|
|
|
+ private static PurseInOutBo createSubsidyPostBo(PtSubsidyitemVo item) {
|
|
|
PurseInOutBo orderBo = new PurseInOutBo();
|
|
PurseInOutBo orderBo = new PurseInOutBo();
|
|
|
orderBo.setUserId(item.getUserId());
|
|
orderBo.setUserId(item.getUserId());
|
|
|
orderBo.setBagCode(item.getBagCode());
|
|
orderBo.setBagCode(item.getBagCode());
|
|
|
- orderBo.setPayStyle("4");
|
|
|
|
|
|
|
+ orderBo.setPayStyle(PayStyleEnum.OTHER.code().toString());
|
|
|
orderBo.setTakeCommission("0");
|
|
orderBo.setTakeCommission("0");
|
|
|
orderBo.setReceiptMoney(item.getFillMoney());
|
|
orderBo.setReceiptMoney(item.getFillMoney());
|
|
|
orderBo.setOperationMode(BalanceUpdateEnum.RECHARGE);
|
|
orderBo.setOperationMode(BalanceUpdateEnum.RECHARGE);
|