子订单退款

This commit is contained in:
HH 2023-04-06 23:14:40 +08:00
parent bd5dbb500d
commit 29a09a7a58
10 changed files with 133 additions and 172 deletions

View File

@ -102,8 +102,7 @@ public class OrderController extends BaseController {
private IAfterServiceRecordService afterServiceRecordService;
@Resource
private OrderBehaviorService orderBehaviorService;
@Autowired
@Resource
private IWxMsgService wxMsgService;
/**
@ -1026,13 +1025,6 @@ public class OrderController extends BaseController {
// 查询子单加价记录
FinancialChangeRecord financialChangeRecord = financialChangeRecordService.selectNotPayRecordByDetailId(detail.getId());
BigDecimal changeMoney = financialChangeRecord == null ? BigDecimal.ZERO : financialChangeRecord.getChangeMoney();
// 查询子单加价记录
// FinancialChangeRecord changeRecordQry = new FinancialChangeRecord();
// changeRecordQry.setOrderDetailId(detail.getId());
// List<FinancialChangeRecord> financialChangeRecords = financialChangeRecordService.selectFinancialChangeRecordList(changeRecordQry);
// if (CollectionUtils.isNotEmpty(financialChangeRecords)) {
// detailPayMoney = detailPayMoney.add(financialChangeRecords.get(0).getChangeMoney());
// }
// 地址信息
CustomerAddress customerAddress = addressService.selectByCustomerAddressId(orderMaster.getAddressId());
@ -1051,7 +1043,7 @@ public class OrderController extends BaseController {
// 查询是否超时
OrderTimeoutRecord orderTimeoutRecord = orderFineRecordService.selectByDetailIdAndStatus(detail.getId(), detail.getOrderStatus());
Boolean isOverTime = orderTimeoutRecord == null ? false : true;
Boolean isOverTime = orderTimeoutRecord != null;
if (this.checkIsOnlyServer(orderMaster.getId(), detail.getWorkerId())) {
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(detail.getOrderMasterId());
@ -1260,7 +1252,7 @@ public class OrderController extends BaseController {
// 查询是否超时
OrderTimeoutRecord orderTimeoutRecord = orderFineRecordService.selectByDetailIdAndStatus(detail.getId(), detail.getOrderStatus());
Boolean isOverTime = orderTimeoutRecord == null ? false : true;
Boolean isOverTime = orderTimeoutRecord != null;
if (Boolean.TRUE.equals(orderDetail.getIsOverTime()) && !isOverTime) {
continue;
}
@ -1281,7 +1273,7 @@ public class OrderController extends BaseController {
orderListResponse.setTotalMoney(financialDetail.getTotalMoney());
orderListResponse.setPayMoney(financialDetail.getPayMoney());
orderListResponse.setWorkerName(worker.getName());
orderListResponse.setWorkerPhone(worker == null ? "" : worker.getPhone());
orderListResponse.setWorkerPhone(worker.getPhone());
orderListResponse.setWorkerId(detail.getWorkerId());
orderListResponse.setCustomerName(customerAddress.getName());
orderListResponse.setCustomerPhone(customerAddress.getPhone());

View File

@ -739,8 +739,8 @@ public class OrderDetailController extends BaseController {
*/
@PostMapping("/cancel")
@ResponseBody
public AjaxResult cancel(Long orderDetailId) {
orderDetailService.cancel(orderDetailId);
public AjaxResult applyForCancel(Long orderDetailId) throws BaseAdaPayException {
orderDetailService.applyForCancel(orderDetailId);
return AjaxResult.success();
}
@ -752,7 +752,7 @@ public class OrderDetailController extends BaseController {
*/
@PostMapping("/cancel/agree")
@ResponseBody
public AjaxResult cancelAgree(Long orderDetailId, Integer agree) {
public AjaxResult cancelAgree(Long orderDetailId, Integer agree) throws BaseAdaPayException {
orderDetailService.cancelAgree(orderDetailId, agree);
return AjaxResult.success();
}

View File

@ -1,7 +1,5 @@
package com.ghy.web.controller.order;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.model.AdapayStatusEnum;
import com.ghy.common.annotation.Log;
import com.ghy.common.constant.UserConstants;
import com.ghy.common.core.controller.BaseController;
@ -9,7 +7,8 @@ import com.ghy.common.core.domain.AjaxResult;
import com.ghy.common.core.page.PageDomain;
import com.ghy.common.core.page.TableDataInfo;
import com.ghy.common.core.page.TableSupport;
import com.ghy.common.enums.*;
import com.ghy.common.enums.BusinessType;
import com.ghy.common.enums.ImgType;
import com.ghy.common.utils.ExceptionUtil;
import com.ghy.common.utils.StringUtils;
import com.ghy.common.utils.poi.ExcelUtil;
@ -35,7 +34,10 @@ import com.ghy.payment.domain.FinancialChangeRecord;
import com.ghy.payment.domain.FinancialDetail;
import com.ghy.payment.domain.FinancialMaster;
import com.ghy.payment.domain.OrderTimeoutRecord;
import com.ghy.payment.service.*;
import com.ghy.payment.service.FinancialChangeRecordService;
import com.ghy.payment.service.FinancialDetailService;
import com.ghy.payment.service.FinancialMasterService;
import com.ghy.payment.service.OrderFineRecordService;
import com.ghy.system.domain.SysArea;
import com.ghy.system.service.ISysAreaService;
import com.ghy.web.pojo.vo.OrderListResponse;
@ -50,15 +52,12 @@ import com.huifu.adapay.core.exception.BaseAdaPayException;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.ModelMap;
import org.springframework.util.Assert;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@ -80,8 +79,6 @@ public class OrderMasterController extends BaseController {
@Resource
private GoodsAreaService goodsAreaService;
@Resource
private AdapayService adapayService;
@Resource
private WorkerService workerService;
@Resource
private IWorkerCertificationService workerCertificationService;
@ -737,7 +734,7 @@ public class OrderMasterController extends BaseController {
*/
@PostMapping("/cancel")
@ResponseBody
public AjaxResult cancel(Long orderMasterId) {
public AjaxResult cancel(Long orderMasterId) throws BaseAdaPayException {
orderMasterService.cancel(orderMasterId);
return AjaxResult.success();
}
@ -833,77 +830,4 @@ public class OrderMasterController extends BaseController {
return true;
}
/**
* 撤销支付适用于延迟分账的订单
*
* @param orderMasterId 主订单ID
*/
@PostMapping("reverse")
@ResponseBody
@Transactional(rollbackFor = Exception.class)
public AjaxResult reverse(Long orderMasterId) throws BaseAdaPayException {
OrderMaster orderMaster = orderMasterService.selectById(orderMasterId);
Assert.notNull(orderMaster, "找不到对应的订单");
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMasterId);
Assert.notNull(financialMaster, "找不到订单");
Assert.isTrue(!PayStatus.WAIT_PAY.getCode().equals(financialMaster.getPayStatus()), "订单未支付");
Assert.isTrue(!PayStatus.CANCEL.getCode().equals(financialMaster.getPayStatus()), "订单已取消");
Assert.isTrue(!PayStatus.REFUND.getCode().equals(financialMaster.getPayStatus()), "订单已退款");
boolean paid = PayStatus.PAID.getCode().equals(financialMaster.getPayStatus()) ||
PayStatus.PAYED_ADD.getCode().equals(financialMaster.getPayStatus());
Assert.isTrue(paid, "订单未支付");
Assert.hasText(financialMaster.getPaymentId(), "找不到订单的支付记录,请联系管理员");
// 改主订单的订单状态和支付状态
orderMasterService.updateStatus(orderMasterId, OrderStatus.CANCEL.code());
orderMasterService.updatePayStatus(orderMasterId, PayStatus.REFUND.getCode());
// 改子订单的订单状态和支付状态
OrderDetail odUpdate = new OrderDetail();
odUpdate.setOrderMasterId(orderMasterId);
odUpdate.setPayStatus(PayStatus.REFUND.getCode());
odUpdate.setOrderStatus(OrderStatus.CANCEL.code());
orderDetailService.updateByOrderMasterId(odUpdate);
// 主订单金额=订单原价+加价
BigDecimal payMoney = financialMaster.getPayMoney();
List<FinancialChangeRecord> fcrList = financialChangeRecordService.selectByMasterId(orderMasterId);
for (FinancialChangeRecord fcr : fcrList) {
// 把已支付的加价单退了 并从主单金额里减去
if (PayStatus.PAID.getCode().equals(fcr.getPayStatus())) {
financialChangeRecordService.refund(orderMaster.getDeptId(), fcr);
payMoney = payMoney.subtract(fcr.getChangeMoney());
}
}
List<FinancialDetail> fdList = financialDetailService.selectByFinancialMasterId(financialMaster.getId());
for (FinancialDetail fd : fdList) {
// 如果有已退款或正在退款的子财务单 从主单金额里减去
if (PayStatus.REFUND.getCode().equals(fd.getPayStatus()) ||
PayStatus.REFUNDING.getCode().equals(fd.getPayStatus()) ||
PayStatus.REVERSING.getCode().equals(fd.getPayStatus())) {
payMoney = payMoney.subtract(fd.getPayMoney());
} else if (PayStatus.PAID.getCode().equals(fd.getPayStatus()) ||
PayStatus.PAYED_ADD.getCode().equals(fd.getPayStatus())) {
// 修改子单状态
financialDetailService.updatePayStatus(fd.getId(), PayStatus.REVERSING.getCode());
}
}
if (payMoney.compareTo(BigDecimal.ZERO) < 1) {
logger.info("无需退款 reverseAmt={}", payMoney);
}
String reverseAmt = payMoney.setScale(2, RoundingMode.DOWN).toString();
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt, RefundType.ROM);
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status")) ||
AdapayStatusEnum.pending.code.equals(response.getString("status"))) {
// 主订单退款 直接修改主财务单状态为退款中
String reverseId = response.getString("id");
financialMaster.setPayStatus(PayStatus.REVERSING.getCode());
financialMaster.setReverseId(reverseId);
financialMasterService.updateFinancialMaster(financialMaster);
} else {
logger.error("FM[{}]撤销支付失败: {}", financialMaster.getId(), response.toJSONString());
}
return AjaxResult.success();
}
}

View File

@ -79,7 +79,7 @@ public interface OrderDetailService {
*
* @param orderDetailId 子订单ID
*/
void cancel(Long orderDetailId);
void applyForCancel(Long orderDetailId) throws BaseAdaPayException;
/**
* 师傅审核取消子订单申请
@ -87,7 +87,7 @@ public interface OrderDetailService {
* @param orderDetailId 子订单ID
* @param agree 0=不同意 1=同意
*/
void cancelAgree(Long orderDetailId, Integer agree);
void cancelAgree(Long orderDetailId, Integer agree) throws BaseAdaPayException;
/**
* 通过主订单ID批量更新子订单

View File

@ -96,7 +96,7 @@ public interface OrderMasterService {
*
* @param orderMasterId 主订单ID
*/
void cancel(Long orderMasterId);
void cancel(Long orderMasterId) throws BaseAdaPayException;
/**
* 师傅同意取消主订单

View File

@ -211,7 +211,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
@Override
@Transactional(rollbackFor = Exception.class)
public void cancel(Long orderDetailId) {
public void applyForCancel(Long orderDetailId) throws BaseAdaPayException {
OrderDetail orderDetail = selectById(orderDetailId);
Assert.notNull(orderDetail, "找不到对应的子订单");
@ -236,11 +236,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
case 1: // 待接单和待排期状态可直接取消
orderDetailMapper.updateStatus(orderDetailId, OrderStatus.CANCEL.code());
// 发起退款
try {
refund(orderDetail);
} catch (BaseAdaPayException e) {
logger.error("子订单[code={}]退款失败", orderDetail.getCode(), e);
}
break;
case 2: // 待上门状态需要师傅同意才能取消
orderDetailMapper.updateStatus(orderDetailId, OrderStatus.GOING_CANCEL.code());
@ -256,37 +252,63 @@ public class OrderDetailServiceImpl implements OrderDetailService {
}
}
/**
* 子单全额退款
*
* @param orderDetail
* @throws BaseAdaPayException
*/
private void refund(OrderDetail orderDetail) throws BaseAdaPayException {
FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(orderDetail.getId());
BigDecimal payMoney = financialDetail.getPayMoney();
Long orderDetailId = orderDetail.getId();
OrderMaster orderMaster = orderMasterMapper.selectById(orderDetail.getOrderMasterId());
Assert.notNull(orderMaster, "OrderMaster is null !");
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId());
Assert.notNull(financialMaster, "FinancialMaster is null !");
// 把子订单对应的子财务单状态更新为已退款
FinancialDetail update = new FinancialDetail();
update.setId(financialDetail.getId());
update.setPayStatus(PayStatus.REFUND.getCode());
financialDetailService.updateFinancialDetail(update);
// 退款金额
BigDecimal refundMoney = BigDecimal.ZERO;
if (BigDecimal.ZERO.compareTo(payMoney) > -1) {
logger.info("子订单[code={}]待退款金额<=0不需要退款", orderDetail.getCode());
List<FinancialChangeRecord> fcrList = financialChangeRecordService.selectByDetailIds(orderDetailId.toString());
// 先把这个子单的加价单全退了
for (FinancialChangeRecord fcr : fcrList) {
financialChangeRecordService.refund(orderDetail.getDeptId(), fcr);
// 子单对应的财务单里也加上了加价单的金额 所以这里减掉
refundMoney = refundMoney.subtract(fcr.getChangeMoney());
}
List<FinancialDetail> fdList = financialDetailService.selectListByOrderDetailId(orderDetailId);
for (FinancialDetail fd : fdList) {
if (PayStatus.REFUND.getCode().equals(fd.getPayStatus()) ||
PayStatus.REFUNDING.getCode().equals(fd.getPayStatus()) ||
PayStatus.REVERSING.getCode().equals(fd.getPayStatus())) {
// 减去退款中和已退款的子财务单金额
refundMoney = refundMoney.subtract(fd.getPayMoney());
} else if (PayStatus.PAID.getCode().equals(fd.getPayStatus())) {
refundMoney = refundMoney.add(fd.getPayMoney());
}
financialDetailService.updatePayStatus(fd.getId(), PayStatus.REFUND.getCode());
}
if (BigDecimal.ZERO.compareTo(refundMoney) > -1) {
logger.info("子订单[id={}]待退款金额<=0不需要退款", orderDetailId);
return;
}
// 发起退款
OrderMaster orderMaster = orderMasterMapper.selectById(orderDetail.getOrderMasterId());
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId());
String refundAmt = AdapayUtils.bigDecimalToString(payMoney);
String refundAmt = AdapayUtils.bigDecimalToString(refundMoney);
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), refundAmt, RefundType.ROD);
logger.debug("子订单退款结果: " + response.toJSONString());
boolean status = AdapayStatusEnum.pending.code.equals(response.getString("status")) ||
AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
// 如果退款失败 这里携带失败原因抛出异常 回滚订单状态
Assert.isTrue(status, response.getString("error_msg"));
logger.info("子订单[code={}]退款成功", orderDetail.getCode());
logger.info("子订单[id={}]退款成功", orderDetailId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancelAgree(Long orderDetailId, Integer agree) {
public void cancelAgree(Long orderDetailId, Integer agree) throws BaseAdaPayException {
OrderDetail orderDetail = selectById(orderDetailId);
Assert.notNull(orderDetail, "找不到对应的子订单");
if (Integer.valueOf(1).equals(agree)) {
@ -294,11 +316,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
// 修改主订单状态为已取消
orderDetailMapper.updateStatus(orderDetailId, OrderStatus.CANCEL.code());
// 发起退款
try {
refund(orderDetail);
} catch (BaseAdaPayException e) {
logger.error("子订单[code={}]退款失败", orderDetail.getCode(), e);
}
} else {
// 师傅不同意取消订单
Integer orderStatus = orderDetail.getOrderStatus();
@ -528,7 +546,8 @@ public class OrderDetailServiceImpl implements OrderDetailService {
@Override
@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);
if (orderDetail == null) {
throw new BaseException("子单不存在!");
@ -556,12 +575,13 @@ public class OrderDetailServiceImpl implements OrderDetailService {
// 创建改单记录
financialChangeRecord = new FinancialChangeRecord();
financialChangeRecord.setOrderDetailId(orderDetailId);
financialChangeRecord.setOrderMasterId(orderDetail.getOrderMasterId());
financialChangeRecord.setChangeMoney(changeMoney);
financialChangeRecord.setStatus(0);
financialChangeRecord.setPayStatus(0);
financialChangeRecord.setType(type);
financialChangeRecord.setRemark(remark);
affectedRows = financialChangeRecordService.insertFinancialChangeRecord(financialChangeRecord);
affectedRows = financialChangeRecordService.insert(financialChangeRecord);
}
if (changeMoney.compareTo(BigDecimal.ZERO) != 0 && affectedRows != 1) {
throw new Exception("加价记录新增或者修改失败");

View File

@ -14,9 +14,11 @@ import com.ghy.order.mapper.OrderMasterMapper;
import com.ghy.order.request.AppOrderRequest;
import com.ghy.order.service.OrderDetailService;
import com.ghy.order.service.OrderMasterService;
import com.ghy.payment.domain.FinancialChangeRecord;
import com.ghy.payment.domain.FinancialDetail;
import com.ghy.payment.domain.FinancialMaster;
import com.ghy.payment.service.AdapayService;
import com.ghy.payment.service.FinancialChangeRecordService;
import com.ghy.payment.service.FinancialDetailService;
import com.ghy.payment.service.FinancialMasterService;
import com.huifu.adapay.core.exception.BaseAdaPayException;
@ -30,6 +32,7 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
@ -56,6 +59,8 @@ public class OrderMasterServiceImpl implements OrderMasterService {
private FinancialMasterService financialMasterService;
@Resource
private FinancialDetailService financialDetailService;
@Resource
private FinancialChangeRecordService financialChangeRecordService;
private static final AtomicLong INDEX = new AtomicLong(1L);
@ -274,7 +279,7 @@ public class OrderMasterServiceImpl implements OrderMasterService {
@Override
@Transactional(rollbackFor = Exception.class)
public void cancel(Long orderMasterId) {
public void cancel(Long orderMasterId) throws BaseAdaPayException {
OrderMaster orderMaster = selectById(orderMasterId);
Assert.notNull(orderMaster, "找不到对应的订单");
switch (orderMaster.getOrderStatus()) {
@ -288,11 +293,7 @@ public class OrderMasterServiceImpl implements OrderMasterService {
update.setOrderStatus(OrderStatus.CANCEL.code());
orderDetailService.updateByOrderMasterId(update);
// 发起退款
try {
refund(orderMaster);
} catch (BaseAdaPayException e) {
logger.error("订单[code={}]退款失败", orderMaster.getCode(), e);
}
break;
case 2: // 待上门状态需要师傅同意才能取消
updateStatus(orderMasterId, OrderStatus.GOING_CANCEL.code());
@ -347,48 +348,68 @@ public class OrderMasterServiceImpl implements OrderMasterService {
* @param orderMaster 主订单
*/
private void refund(OrderMaster orderMaster) throws BaseAdaPayException {
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId());
// 支付状态
Integer payStatus = financialMaster.getPayStatus();
if (!payStatus.equals(1)) {
// 如果状态不是已支付 则不需要退款
return;
}
List<FinancialDetail> financialDetails = financialDetailService.selectByFinancialMasterId(financialMaster.getId());
Assert.notNull(orderMaster, "找不到对应的订单");
Long orderMasterId = orderMaster.getId();
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMasterId);
Assert.notNull(financialMaster, "找不到订单");
Assert.isTrue(!PayStatus.WAIT_PAY.getCode().equals(financialMaster.getPayStatus()), "订单未支付");
Assert.isTrue(!PayStatus.CANCEL.getCode().equals(financialMaster.getPayStatus()), "订单已取消");
Assert.isTrue(!PayStatus.REFUND.getCode().equals(financialMaster.getPayStatus()), "订单已退款");
boolean paid = PayStatus.PAID.getCode().equals(financialMaster.getPayStatus()) ||
PayStatus.PAYED_ADD.getCode().equals(financialMaster.getPayStatus());
Assert.isTrue(paid, "订单未支付");
Assert.hasText(financialMaster.getPaymentId(), "找不到订单的支付记录,请联系管理员");
// 主订单实付金额 - 已退款金额 = 待退款金额
// 改主订单的订单状态和支付状态
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
updatePayStatus(orderMasterId, PayStatus.REFUND.getCode());
// 改子订单的订单状态和支付状态
OrderDetail odUpdate = new OrderDetail();
odUpdate.setOrderMasterId(orderMasterId);
odUpdate.setPayStatus(PayStatus.REFUND.getCode());
odUpdate.setOrderStatus(OrderStatus.CANCEL.code());
orderDetailService.updateByOrderMasterId(odUpdate);
// 主订单金额=订单原价+加价
BigDecimal payMoney = financialMaster.getPayMoney();
for (FinancialDetail fd : financialDetails) {
if (FinancialDetailType.RETURN_FEE.getCode().equals(fd.getFinancialDetailType())) {
// 如果有退款子财务单 则减去子财务单的已退款金额
List<FinancialChangeRecord> fcrList = financialChangeRecordService.selectByMasterId(orderMasterId);
for (FinancialChangeRecord fcr : fcrList) {
// 把已支付的加价单退了 并从主单金额里减去
if (PayStatus.PAID.getCode().equals(fcr.getPayStatus())) {
financialChangeRecordService.refund(orderMaster.getDeptId(), fcr);
payMoney = payMoney.subtract(fcr.getChangeMoney());
}
}
List<FinancialDetail> fdList = financialDetailService.selectByFinancialMasterId(financialMaster.getId());
for (FinancialDetail fd : fdList) {
// 如果有已退款或正在退款的子财务单 从主单金额里减去
if (PayStatus.REFUND.getCode().equals(fd.getPayStatus()) ||
PayStatus.REFUNDING.getCode().equals(fd.getPayStatus()) ||
PayStatus.REVERSING.getCode().equals(fd.getPayStatus())) {
payMoney = payMoney.subtract(fd.getPayMoney());
} else if (PayStatus.PAID.getCode().equals(fd.getPayStatus()) ||
PayStatus.PAYED_ADD.getCode().equals(fd.getPayStatus())) {
// 修改子单状态
financialDetailService.updatePayStatus(fd.getId(), PayStatus.REVERSING.getCode());
}
}
if (BigDecimal.ZERO.compareTo(payMoney) > -1) {
logger.info("订单[code={}]待退款金额<=0不需要退款", orderMaster.getCode());
return;
if (payMoney.compareTo(BigDecimal.ZERO) < 1) {
logger.info("无需退款 reverseAmt={}", payMoney);
}
// 把主财务单状态设置为已退款
FinancialMaster fmUpdate = new FinancialMaster();
fmUpdate.setId(financialMaster.getId());
fmUpdate.setPayStatus(PayStatus.REFUND.getCode());
financialMasterService.updateFinancialMaster(fmUpdate);
// 把所有子财务单状态设置为已退款
FinancialDetail fdUpdate = new FinancialDetail();
fdUpdate.setFinancialMasterId(financialMaster.getId());
fdUpdate.setPayStatus(PayStatus.REFUND.getCode());
financialDetailService.updateByFinancialMasterId(fdUpdate);
String refundAmt = AdapayUtils.bigDecimalToString(payMoney);
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), refundAmt, RefundType.ROM);
logger.debug("退款结果: " + response.toJSONString());
boolean status = AdapayStatusEnum.pending.code.equals(response.getString("status")) ||
AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
// 如果退款失败 这里携带失败原因抛出异常 回滚订单状态
Assert.isTrue(status, response.getString("error_msg"));
logger.info("订单[code={}]退款成功", orderMaster.getCode());
String reverseAmt = payMoney.setScale(2, RoundingMode.DOWN).toString();
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt, RefundType.ROM);
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status")) ||
AdapayStatusEnum.pending.code.equals(response.getString("status"))) {
// 主订单退款 直接修改主财务单状态为退款中
String reverseId = response.getString("id");
financialMaster.setPayStatus(PayStatus.REVERSING.getCode());
financialMaster.setReverseId(reverseId);
financialMasterService.updateFinancialMaster(financialMaster);
} else {
logger.error("FM[{}]撤销支付失败: {}", financialMaster.getId(), response.toJSONString());
}
}
@Override

View File

@ -2,6 +2,7 @@ package com.ghy.payment.domain;
import com.ghy.common.annotation.Excel;
import com.ghy.common.core.domain.BaseEntity;
import com.ghy.common.enums.FinancialDetailType;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -49,7 +50,10 @@ public class FinancialDetail extends BaseEntity {
@Excel(name = "实付金额", cellType = Excel.ColumnType.STRING)
private BigDecimal payMoney;
@Excel(name = "财务子单类型,1师傅转派/2多级分销/3平台抽成/4撤销支付或退款/5超时罚金", cellType = Excel.ColumnType.NUMERIC)
/**
* {@link FinancialDetailType}
*/
@Excel(name = "财务子单类型", cellType = Excel.ColumnType.NUMERIC)
private Integer financialDetailType;
/**

View File

@ -40,7 +40,7 @@ public interface FinancialChangeRecordService {
* @param financialChangeRecord 改价记录
* @return 结果
*/
int insertFinancialChangeRecord(FinancialChangeRecord financialChangeRecord);
int insert(FinancialChangeRecord financialChangeRecord);
/**
* 修改改价记录

View File

@ -86,7 +86,7 @@ public class FinancialChangeRecordServiceImpl implements FinancialChangeRecordSe
* @return 结果
*/
@Override
public int insertFinancialChangeRecord(FinancialChangeRecord financialChangeRecord) {
public int insert(FinancialChangeRecord financialChangeRecord) {
financialChangeRecord.setLeftMoney(financialChangeRecord.getChangeMoney());
return financialChangeRecordMapper.insertFinancialChangeRecord(financialChangeRecord);
}