修改子订单完成的逻辑
This commit is contained in:
parent
6e8f2cdba0
commit
2c3b5d6b54
|
|
@ -13,7 +13,6 @@ import com.ghy.common.enums.PayStatus;
|
||||||
import com.ghy.common.exception.base.BaseException;
|
import com.ghy.common.exception.base.BaseException;
|
||||||
import com.ghy.common.utils.AdapayUtils;
|
import com.ghy.common.utils.AdapayUtils;
|
||||||
import com.ghy.common.utils.ObjectUtils;
|
import com.ghy.common.utils.ObjectUtils;
|
||||||
import com.ghy.common.utils.StringUtils;
|
|
||||||
import com.ghy.order.domain.OrderDetail;
|
import com.ghy.order.domain.OrderDetail;
|
||||||
import com.ghy.order.domain.OrderGoods;
|
import com.ghy.order.domain.OrderGoods;
|
||||||
import com.ghy.order.domain.OrderMaster;
|
import com.ghy.order.domain.OrderMaster;
|
||||||
|
|
@ -32,6 +31,7 @@ import com.ghy.payment.service.FinancialMasterService;
|
||||||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
@ -84,6 +84,10 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
@Resource
|
@Resource
|
||||||
private OrderGoodsService orderGoodsService;
|
private OrderGoodsService orderGoodsService;
|
||||||
|
|
||||||
|
// Adapay 手续费率 默认0.008
|
||||||
|
@Value("${adapay.fee_rate:0.008}")
|
||||||
|
private String feeRate;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int insertOrderDetail(OrderDetail orderDetail) {
|
public int insertOrderDetail(OrderDetail orderDetail) {
|
||||||
return orderDetailMapper.insertOrderDetail(orderDetail);
|
return orderDetailMapper.insertOrderDetail(orderDetail);
|
||||||
|
|
@ -113,7 +117,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
Integer masterServerGoodsNum = masterGoodsMap.get(orderGoods.getGoodsStandardId()).getServerGoodsNum();
|
Integer masterServerGoodsNum = masterGoodsMap.get(orderGoods.getGoodsStandardId()).getServerGoodsNum();
|
||||||
masterGoodsMap.get(orderGoods.getGoodsStandardId()).setServerGoodsNum(masterServerGoodsNum += orderGoods.getServerGoodsNum());
|
masterGoodsMap.get(orderGoods.getGoodsStandardId()).setServerGoodsNum(masterServerGoodsNum += orderGoods.getServerGoodsNum());
|
||||||
});
|
});
|
||||||
} else if (OrderStatus.FINISH_CHECK.code() == originOrderDetail.getOrderStatus() && orderDetail.getOrderStatus() < OrderStatus.FINISH_CHECK.code()){
|
} else if (OrderStatus.FINISH_CHECK.code() == originOrderDetail.getOrderStatus() && orderDetail.getOrderStatus() < OrderStatus.FINISH_CHECK.code()) {
|
||||||
List<OrderGoods> orderGoodsList = orderGoodsService.selectByOrderDetailId(orderDetail.getId());
|
List<OrderGoods> orderGoodsList = orderGoodsService.selectByOrderDetailId(orderDetail.getId());
|
||||||
orderGoodsList.stream().forEach(orderGoods -> {
|
orderGoodsList.stream().forEach(orderGoods -> {
|
||||||
orderGoods.setServerGoodsNum(0);
|
orderGoods.setServerGoodsNum(0);
|
||||||
|
|
@ -124,7 +128,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// 更新主单关联商品
|
// 更新主单关联商品
|
||||||
masterOrderGoodsList.stream().forEach(masterOrderGoods ->{
|
masterOrderGoodsList.stream().forEach(masterOrderGoods -> {
|
||||||
orderGoodsService.updateOrderGoods(masterOrderGoods);
|
orderGoodsService.updateOrderGoods(masterOrderGoods);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -321,7 +325,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
* 子订单确认完成
|
* 子订单确认完成
|
||||||
* 1.修改子订单状态为 OrderStatus.FINISH.code
|
* 1.修改子订单状态为 OrderStatus.FINISH.code
|
||||||
* 2.将子订单对应的子财务单确认分账
|
* 2.将子订单对应的子财务单确认分账
|
||||||
* 3.异步提现至银行卡
|
* 3.提现至银行卡
|
||||||
*
|
*
|
||||||
* @param orderDetailId 子订单ID
|
* @param orderDetailId 子订单ID
|
||||||
*/
|
*/
|
||||||
|
|
@ -331,127 +335,163 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
public synchronized void finish(Long orderDetailId) throws BaseAdaPayException {
|
public synchronized void finish(Long orderDetailId) throws BaseAdaPayException {
|
||||||
// 校验订单
|
// 校验订单
|
||||||
OrderDetail orderDetail = selectById(orderDetailId);
|
OrderDetail orderDetail = selectById(orderDetailId);
|
||||||
if(orderDetail == null){
|
if (orderDetail == null) {
|
||||||
throw new BaseException("找不到对应的子订单");
|
throw new BaseException("找不到对应的子订单");
|
||||||
}
|
}
|
||||||
|
String odCode = orderDetail.getCode();
|
||||||
Assert.isTrue(!orderDetail.getOrderStatus().equals(OrderStatus.FINISH.code()), "订单已经是完成状态");
|
Assert.isTrue(!orderDetail.getOrderStatus().equals(OrderStatus.FINISH.code()), "订单已经是完成状态");
|
||||||
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderDetail.getOrderMasterId());
|
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderDetail.getOrderMasterId());
|
||||||
if(financialMaster == null){
|
if (financialMaster == null) {
|
||||||
throw new BaseException("找不到主财务单");
|
throw new BaseException("找不到主财务单");
|
||||||
}
|
}
|
||||||
PaymentDTO payment = financialMasterService.selectPaymentById(financialMaster.getPaymentId());
|
PaymentDTO payment = financialMasterService.selectPaymentById(financialMaster.getPaymentId());
|
||||||
if(payment == null){
|
if (payment == null) {
|
||||||
throw new BaseException("找不到支付记录");
|
throw new BaseException("找不到支付记录");
|
||||||
}
|
}
|
||||||
List<FinancialDetail> financialDetail = financialDetailService.selectListByOrderDetailId(orderDetailId);
|
List<FinancialDetail> financialDetails = financialDetailService.selectListByOrderDetailId(orderDetailId);
|
||||||
if(financialDetail == null){
|
if (CollectionUtils.isEmpty(financialDetails)) {
|
||||||
throw new BaseException("找不到子财务单");
|
throw new BaseException("找不到子财务单");
|
||||||
}
|
}
|
||||||
if(financialDetail.get(0).getPayStatus() != 1){
|
// 子订单对应的子财务单只有一条 直接取出
|
||||||
|
FinancialDetail financialDetail = financialDetails.get(0);
|
||||||
|
if (financialDetail.getPayStatus() != 1) {
|
||||||
throw new BaseException("订单不是“已支付”状态");
|
throw new BaseException("订单不是“已支付”状态");
|
||||||
}
|
}
|
||||||
|
Long financialMasterId = financialDetail.getFinancialMasterId();
|
||||||
|
// 找到 type=平台抽成 的子财务单 用来承担手续费
|
||||||
|
List<FinancialDetail> details = financialDetailService.selectByFinancialMasterIdAndType(financialMasterId, 3);
|
||||||
|
FinancialDetail platformFD = details.get(0);
|
||||||
|
FinancialDetail update = new FinancialDetail();
|
||||||
|
update.setId(platformFD.getId());
|
||||||
|
|
||||||
|
logger.debug("子订单[code={}]的完单流程开始", odCode);
|
||||||
|
|
||||||
// 更新订单状态
|
// 更新订单状态
|
||||||
orderDetailMapper.updateStatus(orderDetailId, OrderStatus.FINISH.code());
|
orderDetailMapper.updateStatus(orderDetailId, OrderStatus.FINISH.code());
|
||||||
// 找到所有的加价记录
|
|
||||||
|
// 加价单手续费补偿成功与否
|
||||||
|
boolean compensate = false;
|
||||||
|
// 加价单手续费
|
||||||
|
BigDecimal feeAmt = null;
|
||||||
|
// 待提现金额
|
||||||
|
BigDecimal dtx = BigDecimal.ZERO;
|
||||||
|
// 子单收款人的memberId
|
||||||
|
String memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), financialDetail.getDeptId());
|
||||||
|
|
||||||
|
// --------------------- 改价单分账部分 start ---------------------
|
||||||
|
// 查询子订单的加价记录
|
||||||
List<FinancialChangeRecord> financialChangeRecords = financialChangeRecordService.selectByDetailIds(String.valueOf(orderDetailId));
|
List<FinancialChangeRecord> financialChangeRecords = financialChangeRecordService.selectByDetailIds(String.valueOf(orderDetailId));
|
||||||
if(!CollectionUtils.isEmpty(financialChangeRecords)){
|
if (financialChangeRecords.size() == 0) {
|
||||||
|
logger.debug("子订单[code={}]没有改价单", odCode);
|
||||||
|
} else if (financialChangeRecords.size() == 1) {
|
||||||
ArrayList<DivMember> divMembers = new ArrayList<>();
|
ArrayList<DivMember> divMembers = new ArrayList<>();
|
||||||
financialChangeRecords.forEach(financialChangeRecord -> {
|
// 改价记录只会有一条 直接取出
|
||||||
// 递增解决分账
|
FinancialChangeRecord fcRecord = financialChangeRecords.get(0);
|
||||||
financialDetail.forEach(detail->{
|
// 待提现金额里加入改价单金额
|
||||||
BigDecimal money;
|
dtx = dtx.add(fcRecord.getChangeMoney());
|
||||||
// 剩余金额足够本次分账
|
// 这里先自己承担手续费 后面再用平台抽成来补偿
|
||||||
if(financialChangeRecord.getLeftMoney().compareTo(detail.getPayMoney()) > 0){
|
DivMember divMember = new DivMember(memberId, AdapayUtils.bigDecimalToString(fcRecord.getChangeMoney()), true);
|
||||||
money = detail.getPayMoney();
|
divMembers.add(divMember);
|
||||||
detail.setPayMoney(BigDecimal.ZERO);
|
//调用分账
|
||||||
}else {
|
logger.info("子订单[code={}]的[改价单]的分账信息: {}", odCode, JSON.toJSONString(divMembers));
|
||||||
// 剩余金额不够分账
|
JSONObject response;
|
||||||
money = financialChangeRecord.getLeftMoney();
|
response = adapayService.paymentConfirm(financialDetail.getDeptId(), fcRecord.getRemark(),
|
||||||
detail.setPayMoney(detail.getPayMoney().subtract(money));
|
payment.getOrderNo() + "_" + System.currentTimeMillis(),
|
||||||
}
|
String.valueOf(fcRecord.getLeftMoney()), divMembers, null, null);
|
||||||
String memberId = AdapayUtils.getWorkerMemberId(detail.getPayeeId(), detail.getDeptId());
|
logger.info("子订单[code={}]的[改价单]的分账结果: {}", odCode, response.toJSONString());
|
||||||
DivMember divMember = new DivMember(memberId, AdapayUtils.bigDecimalToString(money), false);
|
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
|
||||||
divMembers.add(divMember);
|
// 如果确认支付失败 这里抛出异常 回滚订单状态
|
||||||
});
|
Assert.isTrue(status, response.getString("error_msg"));
|
||||||
//调用分账
|
// 这是被扣掉的手续费
|
||||||
logger.info("子订单[code={}]分账信息: {}", orderDetail.getCode(), JSON.toJSONString(divMembers));
|
String fee_amt = response.getString("fee_amt");
|
||||||
JSONObject response;
|
feeAmt = new BigDecimal(fee_amt);
|
||||||
try {
|
if (feeAmt.compareTo(platformFD.getPayMoney()) < 0 && !"0.00".equals(fee_amt)) {
|
||||||
response = adapayService.paymentConfirm(financialDetail.get(0).getDeptId(), financialChangeRecord.getRemark(), payment.getOrderNo() + "_" + System.currentTimeMillis(),
|
// 用平台抽成来补偿改价单的手续费 修改平台抽成子财务单金额
|
||||||
String.valueOf(financialChangeRecord.getLeftMoney()), divMembers, null, null);
|
update.setPayMoney(platformFD.getPayMoney().subtract(feeAmt));
|
||||||
logger.info("子订单[code={}]分账结果: {}", orderDetail.getCode(), response.toJSONString());
|
int i = financialDetailService.updateFinancialDetail(update);
|
||||||
} catch (BaseAdaPayException e) {
|
compensate = i > 0;
|
||||||
throw new RuntimeException(e);
|
} else {
|
||||||
}
|
logger.warn("主订单[code={}]的平台抽成金额不足以承担子订单[code={}]的[改价单]的手续费",
|
||||||
});
|
orderDetail.getOrderMasterCode(), odCode);
|
||||||
|
// 平台抽成不足以承担改价单手续费了 那没办法了只能自己承担
|
||||||
|
// 待提现金额里减去改价单手续费
|
||||||
|
dtx = dtx.subtract(feeAmt);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.error("financialChangeRecords.size = " + financialChangeRecords.size());
|
||||||
}
|
}
|
||||||
|
// --------------------- 改价单分账部分 end ---------------------
|
||||||
|
|
||||||
|
// --------------------- 子财务单分账部分 start ---------------------
|
||||||
// 分账账户信息
|
// 分账账户信息
|
||||||
Map<String, DivMember> divMemberMap = new HashMap<>();
|
|
||||||
ArrayList<DivMember> divMembers = new ArrayList<>();
|
ArrayList<DivMember> divMembers = new ArrayList<>();
|
||||||
BigDecimal feeAmount = BigDecimal.ZERO;
|
// 子单的金额
|
||||||
for (FinancialDetail detail : financialDetail) {
|
BigDecimal fdPayMoney = financialDetail.getPayMoney();
|
||||||
if (BigDecimal.ZERO.compareTo(detail.getPayMoney()) > -1) {
|
// 实际要分账的金额(子单的金额 + 平台补偿改价单手续费)
|
||||||
logger.info("子财务单[code={}]支付金额<=0,不需要分账", detail.getCode());
|
BigDecimal payMoney;
|
||||||
// 支付金额<=0的话 不需要走下面的流程了
|
if (compensate) {
|
||||||
continue;
|
// 平台补偿改价单手续费
|
||||||
}
|
payMoney = fdPayMoney.add(feeAmt);
|
||||||
// 重复的数据一次提现
|
} else {
|
||||||
String memberId = AdapayUtils.getWorkerMemberId(detail.getPayeeId(), detail.getDeptId());
|
// 平台不补偿改价单手续费
|
||||||
DivMember divMember;
|
payMoney = fdPayMoney;
|
||||||
if(divMemberMap.containsKey(memberId)){
|
|
||||||
divMember = divMemberMap.get(memberId);
|
|
||||||
divMember.setAmount(AdapayUtils.bigDecimalToString(new BigDecimal(divMember.getAmount()).add(detail.getPayMoney())));
|
|
||||||
}else {
|
|
||||||
divMember = new DivMember(memberId, AdapayUtils.bigDecimalToString(detail.getPayMoney()), false);
|
|
||||||
divMemberMap.put(memberId, divMember);
|
|
||||||
}
|
|
||||||
feeAmount = feeAmount.add(detail.getPayMoney());
|
|
||||||
}
|
}
|
||||||
for (Map.Entry<String, DivMember> entry : divMemberMap.entrySet()) {
|
if (BigDecimal.ZERO.compareTo(payMoney) > -1) {
|
||||||
divMembers.add(entry.getValue());
|
logger.info("子财务单[code={}] 应支付金额={} 不需要分账", financialDetail.getCode(), payMoney);
|
||||||
|
} else {
|
||||||
|
// 接单师傅的分账信息
|
||||||
|
String payMoneyS = AdapayUtils.bigDecimalToString(payMoney);
|
||||||
|
DivMember divMember = new DivMember(memberId, payMoneyS, false);
|
||||||
|
divMembers.add(divMember);
|
||||||
|
|
||||||
|
// 计算本次分账的手续费 保留两位小数(向上取整)
|
||||||
|
BigDecimal fee = payMoney.multiply(new BigDecimal(feeRate)).setScale(2, RoundingMode.UP);
|
||||||
|
// 平台的分账信息 用来承担手续费
|
||||||
|
DivMember feeDivMember = new DivMember("0", fee.toString(), true);
|
||||||
|
divMembers.add(feeDivMember);
|
||||||
|
|
||||||
|
logger.info("子订单[code={}]分账信息: {}", odCode, JSON.toJSONString(divMembers));
|
||||||
|
JSONObject response = adapayService.paymentConfirm(financialDetail.getDeptId(), payment.getId(), payment.getOrderNo() + "_" + System.currentTimeMillis(),
|
||||||
|
fee.add(payMoney).toString(), divMembers, null, null);
|
||||||
|
logger.info("子订单[code={}]分账结果: {}", odCode, response.toJSONString());
|
||||||
|
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
|
||||||
|
// 如果确认支付失败 这里抛出异常 回滚订单状态
|
||||||
|
Assert.isTrue(status, response.getString("error_msg"));
|
||||||
|
// 待提现金额里加入子财务单金额
|
||||||
|
dtx = dtx.add(payMoney);
|
||||||
|
// 修改平台抽成子财务单金额
|
||||||
|
update.setPayMoney(platformFD.getPayMoney().subtract(fee));
|
||||||
|
financialDetailService.updateFinancialDetail(update);
|
||||||
}
|
}
|
||||||
BigDecimal fee = BigDecimal.ZERO;
|
// --------------------- 子财务单分账部分 end ---------------------
|
||||||
if(feeAmount.multiply(BigDecimal.valueOf(0.004)).compareTo(BigDecimal.valueOf(0.01)) < 1){
|
|
||||||
fee = fee.add(BigDecimal.valueOf(0.01));
|
// --------------------- 自动提现流程 start ---------------------
|
||||||
}else {
|
// 走到这里确认分账成功了 进入自动提现流程
|
||||||
fee = feeAmount.multiply(BigDecimal.valueOf(0.004));
|
logger.info("子订单[code={}]开始自动提现", odCode);
|
||||||
|
if (BigDecimal.ZERO.compareTo(dtx) > -1) {
|
||||||
|
logger.info("子订单[code={}] 待提现金额={} 无需提现", odCode, dtx);
|
||||||
}
|
}
|
||||||
DivMember feeDivMember = new DivMember("0", AdapayUtils.bigDecimalToString(fee), true);
|
try {
|
||||||
divMembers.add(feeDivMember);
|
String orderNo = AdapayUtils.createOrderNo(AdapayOrderType.DRAW_CASH);
|
||||||
|
// 待提现金额
|
||||||
BigDecimal totalMoney = feeAmount.add(fee.setScale(2, RoundingMode.CEILING));
|
String cashAmt = AdapayUtils.bigDecimalToString(dtx);
|
||||||
// 扣除交易费用
|
JSONObject drawCashResponse = adapayService.drawCash(financialDetail.getDeptId(), orderNo, "T1",
|
||||||
String sureMoney = AdapayUtils.bigDecimalToString(totalMoney);
|
cashAmt, memberId, "订单结算", null);
|
||||||
|
boolean drawCashStatus = AdapayStatusEnum.pending.code.equals(drawCashResponse.getString("status")) ||
|
||||||
logger.info("子订单[code={}]分账信息: {}", orderDetail.getCode(), JSON.toJSONString(divMembers));
|
AdapayStatusEnum.succeeded.code.equals(drawCashResponse.getString("status"));
|
||||||
JSONObject response = adapayService.paymentConfirm(financialDetail.get(0).getDeptId(), payment.getId(), payment.getOrderNo() + "_" + System.currentTimeMillis(),
|
if (drawCashStatus) {
|
||||||
sureMoney, divMembers, null, null);
|
// 提现成功
|
||||||
logger.info("子订单[code={}]分账结果: {}", orderDetail.getCode(), response.toJSONString());
|
logger.info("子订单[code={}]自动提现成功", odCode);
|
||||||
|
} else {
|
||||||
boolean status = AdapayStatusEnum.pending.code.equals(response.getString("status")) ||
|
// 提现失败 把信息记录到error日志里
|
||||||
AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
|
logger.error("自动发起提现失败: 子订单code={}, deptId={}, memberId={}, amount={}, 失败信息: {}", odCode,
|
||||||
// 如果确认支付失败 这里抛出异常 回滚订单状态
|
financialDetail.getDeptId(), memberId, cashAmt, drawCashResponse.toJSONString());
|
||||||
Assert.isTrue(status, response.getString("error_msg"));
|
|
||||||
// 走到这里确认分账成功了 异步进入自动提现流程
|
|
||||||
logger.info("子订单[code={}]开始自动提现", orderDetail.getCode());
|
|
||||||
divMembers.forEach(member -> {
|
|
||||||
try {
|
|
||||||
String orderNo = AdapayUtils.createOrderNo(AdapayOrderType.DRAW_CASH);
|
|
||||||
JSONObject drawCashResponse = adapayService.drawCash(financialDetail.get(0).getDeptId(), orderNo, "T1",
|
|
||||||
member.getAmount(), member.getMemberId(), "订单结算", null);
|
|
||||||
|
|
||||||
boolean drawCashStatus = AdapayStatusEnum.pending.code.equals(drawCashResponse.getString("status")) ||
|
|
||||||
AdapayStatusEnum.succeeded.code.equals(drawCashResponse.getString("status"));
|
|
||||||
|
|
||||||
if (!drawCashStatus) {
|
|
||||||
//如果提现失败 把信息记录到error日志里
|
|
||||||
logger.error("自动发起提现失败: deptId={}, memberId={}, amount={}, 失败原因:{}", financialDetail.get(0).getDeptId(),
|
|
||||||
member.getMemberId(), member.getAmount(), drawCashResponse.getString("error_msg"));
|
|
||||||
}
|
|
||||||
} catch (BaseAdaPayException e) {
|
|
||||||
logger.error("自动发起提现失败: orderDetailId={}, memberId={}, cashAmt={}", orderDetailId, member.getMemberId(), member.getAmount(), e);
|
|
||||||
}
|
}
|
||||||
});
|
} catch (Exception e) {
|
||||||
|
logger.error("自动发起提现失败: 子订单code={}, deptId={}, memberId={}", odCode, financialDetail.getDeptId(), memberId, e);
|
||||||
|
}
|
||||||
|
// --------------------- 自动提现流程 end ---------------------
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -463,7 +503,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public int changePrice(Long orderDetailId, BigDecimal changeMoney, Integer type, String remark) throws Exception {
|
public int changePrice(Long orderDetailId, BigDecimal changeMoney, Integer type, String remark) throws Exception {
|
||||||
OrderDetail orderDetail = orderDetailMapper.selectById(orderDetailId);
|
OrderDetail orderDetail = orderDetailMapper.selectById(orderDetailId);
|
||||||
if(orderDetail==null){
|
if (orderDetail == null) {
|
||||||
throw new BaseException("子单不存在!");
|
throw new BaseException("子单不存在!");
|
||||||
}
|
}
|
||||||
FinancialChangeRecord param = new FinancialChangeRecord();
|
FinancialChangeRecord param = new FinancialChangeRecord();
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,8 @@ public class FinancialDetail extends BaseEntity {
|
||||||
* 收款人ID
|
* 收款人ID
|
||||||
* 当财务子单类型是师傅转派时 收款人ID是师傅或徒弟的workerId
|
* 当财务子单类型是师傅转派时 收款人ID是师傅或徒弟的workerId
|
||||||
* 当财务子单类型是多级分销时 收款人ID是分销者的customerId
|
* 当财务子单类型是多级分销时 收款人ID是分销者的customerId
|
||||||
* 当财务子单类型是4或5时 无需填写收款人ID
|
* 当财务子单类型是4时 无需填写收款人ID
|
||||||
|
* 当财务子单类型是3,5时 金额属于平台 无需填写收款人ID
|
||||||
*/
|
*/
|
||||||
@Excel(name = "收款人ID", cellType = Excel.ColumnType.NUMERIC)
|
@Excel(name = "收款人ID", cellType = Excel.ColumnType.NUMERIC)
|
||||||
private Long payeeId;
|
private Long payeeId;
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,25 @@ public class AdapayService {
|
||||||
* @param feeMode String(1) 手续费收取模式:O-商户手续费账户扣取手续费,I-交易金额中扣取手续费;值为空时,默认值为I;若为O时,分账对象列表中不支持传入手续费承担方
|
* @param feeMode String(1) 手续费收取模式:O-商户手续费账户扣取手续费,I-交易金额中扣取手续费;值为空时,默认值为I;若为O时,分账对象列表中不支持传入手续费承担方
|
||||||
* @param description String(128) 附加说明
|
* @param description String(128) 附加说明
|
||||||
* @return 成功时同步返回一个包含 支付确认对象的JSON https://docs.adapay.tech/api/trade.html#id54
|
* @return 成功时同步返回一个包含 支付确认对象的JSON https://docs.adapay.tech/api/trade.html#id54
|
||||||
|
* 成功示例:{
|
||||||
|
* "order_no": "TEST18888888888_001",
|
||||||
|
* "created_time": "1670932918",
|
||||||
|
* "confirm_amt": "10.00",
|
||||||
|
* "confirmed_amt": "0.00",
|
||||||
|
* "reserved_amt": "0.00",
|
||||||
|
* "div_members": [{
|
||||||
|
* "member_id": "W7D888",
|
||||||
|
* "amount": "10.00",
|
||||||
|
* "fee_flag": "Y"
|
||||||
|
* }],
|
||||||
|
* "refunded_amt": "0.00",
|
||||||
|
* "prod_mode": "true",
|
||||||
|
* "id": "0021120221213200158990448709336858888888",
|
||||||
|
* "app_id": "app_01af32e7-6173-414f-88e5-79cae64d5e24",
|
||||||
|
* "fee_amt": "0.08",
|
||||||
|
* "object": "payment_confirm",
|
||||||
|
* "status": "succeeded"
|
||||||
|
* }
|
||||||
*/
|
*/
|
||||||
public JSONObject paymentConfirm(@NotNull Long deptId, @NotNull String paymentId, @NotNull String orderNo,
|
public JSONObject paymentConfirm(@NotNull Long deptId, @NotNull String paymentId, @NotNull String orderNo,
|
||||||
@NotNull String confirmAmt, List<DivMember> divMembers,
|
@NotNull String confirmAmt, List<DivMember> divMembers,
|
||||||
|
|
@ -278,6 +297,22 @@ public class AdapayService {
|
||||||
* @param deviceInfo 前端设备信息 https://docs.adapay.tech/api/appendix.html#deviceinfo
|
* @param deviceInfo 前端设备信息 https://docs.adapay.tech/api/appendix.html#deviceinfo
|
||||||
* @param divMembers 分账对象信息列表 https://docs.adapay.tech/api/appendix.html#divmembers
|
* @param divMembers 分账对象信息列表 https://docs.adapay.tech/api/appendix.html#divmembers
|
||||||
* @return 同步返回一个 支付对象,详见 https://docs.adapay.tech/api/trade.html#id2
|
* @return 同步返回一个 支付对象,详见 https://docs.adapay.tech/api/trade.html#id2
|
||||||
|
* 成功示例: {
|
||||||
|
* "order_no": "TEST18888888888_001",
|
||||||
|
* "created_time": "1670932358",
|
||||||
|
* "party_order_id": "02212212137155817188888",
|
||||||
|
* "pay_amt": "10.00",
|
||||||
|
* "expend": {
|
||||||
|
* "qrcode_url": "https://qr.alipay.com/bax022139la4gqagxbti8888"
|
||||||
|
* },
|
||||||
|
* "prod_mode": "true",
|
||||||
|
* "pay_channel": "alipay_qr",
|
||||||
|
* "query_url": "https://api.adapay.tech/v1/expire/payments/1/cff1102a8a0d5d4be1d444acb7726fdd",
|
||||||
|
* "id": "002112022121319523810448706986096888888",
|
||||||
|
* "app_id": "app_01af32e7-6173-414f-88e5-79cae64d5e24",
|
||||||
|
* "object": "payment",
|
||||||
|
* "status": "succeeded"
|
||||||
|
* }
|
||||||
*/
|
*/
|
||||||
public JSONObject pay(@NotNull Long deptId, @NotNull String payChannel, @NotNull PayParam payParam,
|
public JSONObject pay(@NotNull Long deptId, @NotNull String payChannel, @NotNull PayParam payParam,
|
||||||
Expend expend, DeviceInfo deviceInfo,
|
Expend expend, DeviceInfo deviceInfo,
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ import java.util.Map;
|
||||||
public interface FinancialDetailService {
|
public interface FinancialDetailService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param countTime 是否查询准确时间
|
* @param countTime 是否查询准确时间
|
||||||
* @param financialDetailTypes 子财务单类型
|
* @param financialDetailTypes 子财务单类型
|
||||||
* @param payeeId 收款人id
|
* @param payeeId 收款人id
|
||||||
* @return 月份集合
|
* @return 月份集合
|
||||||
*/
|
*/
|
||||||
List<FinancialCountResponse> count(String countTime, List<Integer> financialDetailTypes, Integer payeeId);
|
List<FinancialCountResponse> count(String countTime, List<Integer> financialDetailTypes, Integer payeeId);
|
||||||
|
|
@ -67,6 +67,7 @@ public interface FinancialDetailService {
|
||||||
int deleteFinancialDetailByIds(String ids);
|
int deleteFinancialDetailByIds(String ids);
|
||||||
|
|
||||||
int deleteFinancialDetailByOrderDetailId(Long orderDetailId);
|
int deleteFinancialDetailByOrderDetailId(Long orderDetailId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验财务细单编码是否重复
|
* 校验财务细单编码是否重复
|
||||||
*
|
*
|
||||||
|
|
@ -102,4 +103,12 @@ public interface FinancialDetailService {
|
||||||
* @param financialDetail 子财务单
|
* @param financialDetail 子财务单
|
||||||
*/
|
*/
|
||||||
void updateByFinancialMasterId(FinancialDetail financialDetail);
|
void updateByFinancialMasterId(FinancialDetail financialDetail);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询主财务单下指定类型的子财务单
|
||||||
|
*
|
||||||
|
* @param financialMasterId 主财务单id
|
||||||
|
* @param type 子财务单类型 FinancialDetail.financialDetailType
|
||||||
|
*/
|
||||||
|
List<FinancialDetail> selectByFinancialMasterIdAndType(Long financialMasterId, int type);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,14 @@ public class FinancialDetailServiceImpl implements FinancialDetailService {
|
||||||
financialDetailMapper.updateByFinancialMasterId(financialDetail);
|
financialDetailMapper.updateByFinancialMasterId(financialDetail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FinancialDetail> selectByFinancialMasterIdAndType(Long financialMasterId, int type) {
|
||||||
|
FinancialDetail financialDetail = new FinancialDetail();
|
||||||
|
financialDetail.setFinancialMasterId(financialMasterId);
|
||||||
|
financialDetail.setFinancialDetailType(type);
|
||||||
|
return financialDetailMapper.selectFinancialDetailList(financialDetail);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<Long, FinancialDetail> byOrderIdInMap(List<Long> orderIdList) {
|
public Map<Long, FinancialDetail> byOrderIdInMap(List<Long> orderIdList) {
|
||||||
Map<Long, FinancialDetail> longFinancialDetailHashMap = new HashMap<>();
|
Map<Long, FinancialDetail> longFinancialDetailHashMap = new HashMap<>();
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,9 @@
|
||||||
<if test="payeeId != null">
|
<if test="payeeId != null">
|
||||||
and payee_id = #{payeeId}
|
and payee_id = #{payeeId}
|
||||||
</if>
|
</if>
|
||||||
|
<if test="financialDetailType != null">
|
||||||
|
and financial_detail_type = #{financialDetailType}
|
||||||
|
</if>
|
||||||
<if test="financialDetailTypes != null and financialDetailTypes.size > 0">
|
<if test="financialDetailTypes != null and financialDetailTypes.size > 0">
|
||||||
and financial_detail_type in
|
and financial_detail_type in
|
||||||
<foreach item="item" collection="financialDetailTypes" open="(" separator="," close=")">
|
<foreach item="item" collection="financialDetailTypes" open="(" separator="," close=")">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue