主订单退款完成

This commit is contained in:
HH 2023-03-29 23:11:20 +08:00
parent 24ed9cc666
commit bd5dbb500d
8 changed files with 52 additions and 13 deletions

View File

@ -9,10 +9,7 @@ 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.BusinessType;
import com.ghy.common.enums.ImgType;
import com.ghy.common.enums.PayStatus;
import com.ghy.common.enums.RefundType;
import com.ghy.common.enums.*;
import com.ghy.common.utils.ExceptionUtil;
import com.ghy.common.utils.StringUtils;
import com.ghy.common.utils.poi.ExcelUtil;
@ -857,11 +854,14 @@ public class OrderMasterController extends BaseController {
Assert.isTrue(paid, "订单未支付");
Assert.hasText(financialMaster.getPaymentId(), "找不到订单的支付记录,请联系管理员");
// 先改状态 后面出错就回滚
orderMasterService.updatePayStatus(orderMasterId, PayStatus.REVERSING.getCode());
// 改主订单的订单状态和支付状态
orderMasterService.updateStatus(orderMasterId, OrderStatus.CANCEL.code());
orderMasterService.updatePayStatus(orderMasterId, PayStatus.REFUND.getCode());
// 改子订单的订单状态和支付状态
OrderDetail odUpdate = new OrderDetail();
odUpdate.setOrderMasterId(orderMasterId);
odUpdate.setPayStatus(PayStatus.REVERSING.getCode());
odUpdate.setPayStatus(PayStatus.REFUND.getCode());
odUpdate.setOrderStatus(OrderStatus.CANCEL.code());
orderDetailService.updateByOrderMasterId(odUpdate);
// 主订单金额=订单原价+加价
@ -881,6 +881,10 @@ public class OrderMasterController extends BaseController {
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());
}
}
@ -892,11 +896,14 @@ public class OrderMasterController extends BaseController {
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"))) {
// TODO 保存reverseId
return AjaxResult.success();
// 主订单退款 直接修改主财务单状态为退款中
String reverseId = response.getString("id");
financialMaster.setPayStatus(PayStatus.REVERSING.getCode());
financialMaster.setReverseId(reverseId);
financialMasterService.updateFinancialMaster(financialMaster);
} else {
// TODO 重试
return AjaxResult.error(response.getString("error_msg"));
logger.error("FM[{}]撤销支付失败: {}", financialMaster.getId(), response.toJSONString());
}
return AjaxResult.success();
}
}

View File

@ -411,6 +411,6 @@ public class OrderMasterServiceImpl implements OrderMasterService {
@Override
public void refundSucceeded(String reverseId) {
// TODO
financialMasterService.refundSucceeded(reverseId);
}
}

View File

@ -58,6 +58,9 @@ public class FinancialMaster extends BaseEntity {
@Excel(name = "Adapay的唯一支付ID", cellType = Excel.ColumnType.STRING)
private String paymentId;
@Excel(name = "Adapay的撤销支付ID", cellType = Excel.ColumnType.STRING)
private String reverseId;
private List<Long> ids;
private Integer type;

View File

@ -77,4 +77,11 @@ public interface FinancialMasterMapper {
FinancialMaster selectByPaymentId(String paymentId);
List<FinancialMaster> selectByOrderMasterIds(@Param(value = "orderMasterIds") Set<Long> orderMasterIds);
/**
* 撤销支付成功
*
* @param reverseId 撤销支付ID
*/
void refundSucceeded(@Param("reverseId") String reverseId);
}

View File

@ -98,4 +98,6 @@ public interface FinancialMasterService {
* @param paymentId 支付ID
*/
FinancialMaster selectByPaymentId(String paymentId);
void refundSucceeded(String reverseId);
}

View File

@ -3,12 +3,14 @@ package com.ghy.payment.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.model.AdapayStatusEnum;
import com.ghy.common.core.text.Convert;
import com.ghy.common.enums.PayStatus;
import com.ghy.common.enums.RefundType;
import com.ghy.payment.domain.FinancialChangeRecord;
import com.ghy.payment.mapper.FinancialChangeRecordMapper;
import com.ghy.payment.service.AdapayService;
import com.ghy.payment.service.FinancialChangeRecordService;
import com.huifu.adapay.core.exception.BaseAdaPayException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -23,6 +25,7 @@ import java.util.StringJoiner;
/**
* @author clunt
*/
@Slf4j
@Service
public class FinancialChangeRecordServiceImpl implements FinancialChangeRecordService {
@ -141,7 +144,10 @@ public class FinancialChangeRecordServiceImpl implements FinancialChangeRecordSe
FinancialChangeRecord update = new FinancialChangeRecord();
update.setId(fcr.getId());
update.setReverseId(response.getString("id"));
update.setPayStatus(PayStatus.REFUNDING.getCode());
update(update);
} else {
log.error("改价单退款失败: {}", response.toJSONString());
}
}

View File

@ -155,6 +155,11 @@ public class FinancialMasterServiceImpl implements FinancialMasterService {
return financialMasterMapper.selectByPaymentId(paymentId);
}
@Override
public void refundSucceeded(String reverseId) {
financialMasterMapper.refundSucceeded(reverseId);
}
@Override
public List<FinancialMaster> selectByOrderMasterIds(Set<Long> orderMasterIds) {
if (CollectionUtils.isEmpty(orderMasterIds)) {

View File

@ -18,6 +18,7 @@
<result property="payStatus" column="pay_status"/>
<result property="payTime" column="pay_time"/>
<result property="paymentId" column="payment_id"/>
<result property="reverseId" column="reverse_id"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
@ -27,7 +28,7 @@
<sql id="selectFinancialMaster">
SELECT id, dept_id, code, order_master_id, order_master_code, total_money, discount_money, pay_money, server_money,
pay_type, pay_status, pay_time, payment_id, create_by, create_time, update_by, update_time, remark
pay_type, pay_status, pay_time, payment_id, reverse_id, create_by, create_time, update_by, update_time, remark
FROM financial_master
</sql>
@ -102,6 +103,7 @@
<if test="payTime != null">pay_time = #{payTime},</if>
<if test="payMoney != null">pay_money = #{payMoney},</if>
<if test="paymentId != null and paymentId != ''">payment_id = #{paymentId},</if>
<if test="reverseId != null and reverseId != ''">reverse_id = #{reverseId},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
update_time = SYSDATE()
</set>
@ -131,6 +133,13 @@
WHERE code = #{orderMasterCode}
</update>
<update id="refundSucceeded">
UPDATE financial_master SET
pay_status = 3 ,
update_time = SYSDATE()
WHERE reverse_id = #{reverseId}
</update>
<insert id="insertFinancialMaster" parameterType="com.ghy.payment.domain.FinancialMaster" useGeneratedKeys="true" keyProperty="id">
INSERT INTO financial_master(
<if test="deptId != null">dept_id,</if>