feat:独立分账
This commit is contained in:
@@ -252,7 +252,7 @@ public class SplitOrderServiceImpl implements SplitOrderService {
|
||||
//分账失败 释放锁
|
||||
redisUtil.unlock(lockKey);
|
||||
log.info("confirmSplitOrder:{}",e.getMessage());
|
||||
throw new ServiceException(ErrorCodeEnum.TRANSFER_ERROR);
|
||||
throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE);
|
||||
}
|
||||
existing.setConfirmer(userInfo.getUserId());
|
||||
existing.setStatus(accountTransferDTO.getTradeStatus());
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.cool.store.service.store;
|
||||
|
||||
import com.cool.store.entity.order.PreAllocationRecordDO;
|
||||
import com.cool.store.entity.order.StoreOrderDO;
|
||||
import com.cool.store.entity.wallet.WalletTradeDO;
|
||||
import com.cool.store.request.store.PreAllocationQueryShopRequest;
|
||||
import com.cool.store.request.store.PreAllocationSaveRequest;
|
||||
import com.cool.store.request.store.TransRequest;
|
||||
@@ -29,4 +30,11 @@ public interface PreAllocationRecordService {
|
||||
|
||||
Boolean trans(TransRequest transRequest);
|
||||
|
||||
/**
|
||||
* 分账状态刷新
|
||||
* @param walletTradeDO
|
||||
* @return
|
||||
*/
|
||||
Boolean transStatusRefresh(WalletTradeDO walletTradeDO);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.cool.store.service.store.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollStreamUtil;
|
||||
import com.alibaba.excel.converters.bigdecimal.BigDecimalNumberConverter;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.constants.RedisConstant;
|
||||
import com.cool.store.dao.FranchiseFeeDAO;
|
||||
@@ -18,6 +19,7 @@ import com.cool.store.dto.fees.WalletAllocationDTO;
|
||||
import com.cool.store.dto.wallet.AccountInfoDTO;
|
||||
import com.cool.store.dto.wallet.AccountTransferDTO;
|
||||
import com.cool.store.dto.wallet.BatchTransferDTO;
|
||||
import com.cool.store.dto.wallet.TradeRecordDTO;
|
||||
import com.cool.store.entity.FranchiseFeeDO;
|
||||
import com.cool.store.entity.LineInfoDO;
|
||||
import com.cool.store.entity.ShopInfoDO;
|
||||
@@ -38,14 +40,12 @@ import com.cool.store.enums.fees.WalletFeeItemEnum;
|
||||
import com.cool.store.enums.order.StoreOrderStatusEnum;
|
||||
import com.cool.store.enums.point.ShopSubStageEnum;
|
||||
import com.cool.store.enums.point.ShopSubStageStatusEnum;
|
||||
import com.cool.store.enums.wallet.TradeTypeEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.mapper.FranchiseFeeMapper;
|
||||
import com.cool.store.request.store.PreAllocationSaveRequest;
|
||||
import com.cool.store.request.store.TransRequest;
|
||||
import com.cool.store.request.wallet.BatchTransferQueryRequest;
|
||||
import com.cool.store.request.wallet.BatchTransferRequest;
|
||||
import com.cool.store.request.wallet.OutStoreIdRequest;
|
||||
import com.cool.store.request.wallet.TransferRequest;
|
||||
import com.cool.store.request.wallet.*;
|
||||
import com.cool.store.request.xgj.PushFranchiseFeeRequest;
|
||||
import com.cool.store.request.xgj.ReceiptRequest;
|
||||
import com.cool.store.service.PushService;
|
||||
@@ -54,10 +54,7 @@ import com.cool.store.service.fees.WalletPayInfoService;
|
||||
import com.cool.store.service.order.MiniStoreOrderService;
|
||||
import com.cool.store.service.store.PreAllocationRecordService;
|
||||
import com.cool.store.service.wallet.WalletApiService;
|
||||
import com.cool.store.utils.BeanUtil;
|
||||
import com.cool.store.utils.GenerateNoUtil;
|
||||
import com.cool.store.utils.RedisUtil;
|
||||
import com.cool.store.utils.StringUtil;
|
||||
import com.cool.store.utils.*;
|
||||
import com.cool.store.vo.order.MiniStoreOrderDetailVO;
|
||||
import com.cool.store.vo.order.PreAllocationRecordVO;
|
||||
import com.sun.xml.bind.v2.TODO;
|
||||
@@ -78,6 +75,7 @@ import java.util.stream.Stream;
|
||||
|
||||
import static com.cool.store.enums.order.StoreOrderStatusEnum.PAY_FAIL;
|
||||
import static com.cool.store.enums.wallet.WalletTradeModuleEnum.STANDARD_STORE;
|
||||
import static com.cool.store.enums.wallet.WalletTradeModuleEnum.TRANSFER;
|
||||
|
||||
/**
|
||||
* @Auther zx_szh
|
||||
@@ -740,21 +738,76 @@ public class PreAllocationRecordServiceImpl implements PreAllocationRecordServic
|
||||
if (CollectionUtils.isEmpty(accountInfoList)){
|
||||
throw new ServiceException(ErrorCodeEnum.NOT_EXIST_WANG_SHANG_ACCOUNT);
|
||||
}
|
||||
//校验金额
|
||||
AccountInfoDTO accountInfoDTO = accountInfoList.get(0);
|
||||
String totalAmount = accountInfoDTO.getTotalAmount();
|
||||
Boolean amountSupport = BigDecimalUtils.greaterThanOrEqual(new BigDecimal(totalAmount), record.getPayAmount());
|
||||
if (!amountSupport){
|
||||
throw new ServiceException(ErrorCodeEnum.WALLET_BALANCE_INSUFFICIENT);
|
||||
}
|
||||
AccountTransferDTO accountTransferDTO ;
|
||||
try {
|
||||
AccountInfoDTO accountInfoDTO = accountInfoList.get(0);
|
||||
accountTransferDTO = walletPayInfoService.accountPay(record.getExpenseType(), record.getPayAmount(),
|
||||
record.getPayeeCode(), accountInfoDTO.getAccountNo(), record.getPayNo(), transRequest.getRemark());
|
||||
}catch (Exception e){
|
||||
//分账失败 释放锁
|
||||
redisUtil.unlock(lockKey);
|
||||
log.info("confirmSplitOrder:{}",e.getMessage());
|
||||
//todo 改为明确的提示
|
||||
throw new ServiceException(ErrorCodeEnum.TRANSFER_ERROR);
|
||||
log.error("confirmSplitOrder:{}",e.getMessage());
|
||||
throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE);
|
||||
}
|
||||
record.setAllocationStatus(AllocationPayStatusEnum.PAYING.getStatus());
|
||||
//先改为分账中
|
||||
preAllocationRecordDAO.updateByPrimaryKeySelective(record);
|
||||
WalletTradeDO walletTradeDO = new WalletTradeDO();
|
||||
walletTradeDO.setPayStatus(accountTransferDTO.getTradeStatus());
|
||||
walletTradeDO.setModule(TRANSFER.getModule());
|
||||
walletTradeDO.setRemark(transRequest.getRemark());
|
||||
walletTradeDO.setPayAmount(new BigDecimal(accountTransferDTO.getAmount()));
|
||||
walletTradeDO.setPayTime(new Date());
|
||||
walletTradeDO.setPayNo(record.getPayNo());
|
||||
walletTradeDO.setTradeId(String.valueOf(accountTransferDTO.getTradeId()));
|
||||
walletTradeDO.setType(TradeTypeEnum.ADD_BY_HAND.getStatus());
|
||||
walletTradeDAO.insertSelective(walletTradeDO);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean transStatusRefresh(WalletTradeDO walletTradeDO) {
|
||||
BillDetailRequest request = new BillDetailRequest();
|
||||
request.setTradeId(Long.valueOf(walletTradeDO.getTradeId()));
|
||||
TradeRecordDTO billDetail = walletApiService.getBillDetail(request);
|
||||
walletTradeDO.setPayStatus(billDetail.getTradeStatus());
|
||||
walletTradeDAO.updateByPrimaryKeySelective(walletTradeDO);
|
||||
PreAllocationRecordDO preAllocationRecordDO = preAllocationRecordDAO.queryPageByPayNo(walletTradeDO.getPayNo());
|
||||
preAllocationRecordDO.setAllocationStatus(billDetail.getTradeStatus());
|
||||
preAllocationRecordDO.setUpdateTime(new Date());
|
||||
preAllocationRecordDAO.updateByPrimaryKeySelective(preAllocationRecordDO);
|
||||
if (AllocationPayStatusEnum.PAID.getStatus().equals(walletTradeDO.getPayStatus())) {
|
||||
ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(preAllocationRecordDO.getShopId());
|
||||
//订单状态更新
|
||||
|
||||
StoreOrderDO storeOrder = storeOrderDAO.getById(preAllocationRecordDO.getOrderId());
|
||||
//部分支付
|
||||
StoreOrderDO updateOrder = StoreOrderDO.builder()
|
||||
.id(storeOrder.getId())
|
||||
.status(StoreOrderStatusEnum.PART_OF_WAIT_PAY.getCode())
|
||||
.updateTime(new Date())
|
||||
.build();
|
||||
//当前缴纳金额 = 本次缴纳前已缴纳金额+本次缴纳金额
|
||||
BigDecimal currentAmount = new BigDecimal(billDetail.getAmount());
|
||||
BigDecimal paidAmount = storeOrder.getPaidAmount().add(currentAmount);
|
||||
BigDecimal unpaidAmount = storeOrder.getTotalAmount().subtract(paidAmount);
|
||||
//支付成功 修改金额,支付中 回调的时候习惯
|
||||
updateOrder.setPaidAmount(paidAmount);
|
||||
updateOrder.setUnpaidAmount(unpaidAmount);
|
||||
updateOrder.setPayTime(new Date());
|
||||
if (BigDecimalUtils.equals(unpaidAmount,new BigDecimal(0))){
|
||||
//剩余缴纳金额是0 缴费完成
|
||||
updateOrder.setStatus( StoreOrderStatusEnum.PAID.getCode());
|
||||
}
|
||||
storeOrderDAO.updateSelective(updateOrder);
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user