主订单退款完成

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.PageDomain;
import com.ghy.common.core.page.TableDataInfo; import com.ghy.common.core.page.TableDataInfo;
import com.ghy.common.core.page.TableSupport; import com.ghy.common.core.page.TableSupport;
import com.ghy.common.enums.BusinessType; import com.ghy.common.enums.*;
import com.ghy.common.enums.ImgType;
import com.ghy.common.enums.PayStatus;
import com.ghy.common.enums.RefundType;
import com.ghy.common.utils.ExceptionUtil; import com.ghy.common.utils.ExceptionUtil;
import com.ghy.common.utils.StringUtils; import com.ghy.common.utils.StringUtils;
import com.ghy.common.utils.poi.ExcelUtil; import com.ghy.common.utils.poi.ExcelUtil;
@ -857,11 +854,14 @@ public class OrderMasterController extends BaseController {
Assert.isTrue(paid, "订单未支付"); Assert.isTrue(paid, "订单未支付");
Assert.hasText(financialMaster.getPaymentId(), "找不到订单的支付记录,请联系管理员"); 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(); OrderDetail odUpdate = new OrderDetail();
odUpdate.setOrderMasterId(orderMasterId); odUpdate.setOrderMasterId(orderMasterId);
odUpdate.setPayStatus(PayStatus.REVERSING.getCode()); odUpdate.setPayStatus(PayStatus.REFUND.getCode());
odUpdate.setOrderStatus(OrderStatus.CANCEL.code());
orderDetailService.updateByOrderMasterId(odUpdate); orderDetailService.updateByOrderMasterId(odUpdate);
// 主订单金额=订单原价+加价 // 主订单金额=订单原价+加价
@ -881,6 +881,10 @@ public class OrderMasterController extends BaseController {
PayStatus.REFUNDING.getCode().equals(fd.getPayStatus()) || PayStatus.REFUNDING.getCode().equals(fd.getPayStatus()) ||
PayStatus.REVERSING.getCode().equals(fd.getPayStatus())) { PayStatus.REVERSING.getCode().equals(fd.getPayStatus())) {
payMoney = payMoney.subtract(fd.getPayMoney()); 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); JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt, RefundType.ROM);
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status")) || if (AdapayStatusEnum.succeeded.code.equals(response.getString("status")) ||
AdapayStatusEnum.pending.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 { } else {
// TODO 重试 logger.error("FM[{}]撤销支付失败: {}", financialMaster.getId(), response.toJSONString());
return AjaxResult.error(response.getString("error_msg")); }
} return AjaxResult.success();
} }
} }

View File

@ -411,6 +411,6 @@ public class OrderMasterServiceImpl implements OrderMasterService {
@Override @Override
public void refundSucceeded(String reverseId) { 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) @Excel(name = "Adapay的唯一支付ID", cellType = Excel.ColumnType.STRING)
private String paymentId; private String paymentId;
@Excel(name = "Adapay的撤销支付ID", cellType = Excel.ColumnType.STRING)
private String reverseId;
private List<Long> ids; private List<Long> ids;
private Integer type; private Integer type;

View File

@ -77,4 +77,11 @@ public interface FinancialMasterMapper {
FinancialMaster selectByPaymentId(String paymentId); FinancialMaster selectByPaymentId(String paymentId);
List<FinancialMaster> selectByOrderMasterIds(@Param(value = "orderMasterIds") Set<Long> orderMasterIds); 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 * @param paymentId 支付ID
*/ */
FinancialMaster selectByPaymentId(String paymentId); 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.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.model.AdapayStatusEnum; import com.ghy.common.adapay.model.AdapayStatusEnum;
import com.ghy.common.core.text.Convert; import com.ghy.common.core.text.Convert;
import com.ghy.common.enums.PayStatus;
import com.ghy.common.enums.RefundType; import com.ghy.common.enums.RefundType;
import com.ghy.payment.domain.FinancialChangeRecord; import com.ghy.payment.domain.FinancialChangeRecord;
import com.ghy.payment.mapper.FinancialChangeRecordMapper; import com.ghy.payment.mapper.FinancialChangeRecordMapper;
import com.ghy.payment.service.AdapayService; import com.ghy.payment.service.AdapayService;
import com.ghy.payment.service.FinancialChangeRecordService; import com.ghy.payment.service.FinancialChangeRecordService;
import com.huifu.adapay.core.exception.BaseAdaPayException; import com.huifu.adapay.core.exception.BaseAdaPayException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -23,6 +25,7 @@ import java.util.StringJoiner;
/** /**
* @author clunt * @author clunt
*/ */
@Slf4j
@Service @Service
public class FinancialChangeRecordServiceImpl implements FinancialChangeRecordService { public class FinancialChangeRecordServiceImpl implements FinancialChangeRecordService {
@ -141,7 +144,10 @@ public class FinancialChangeRecordServiceImpl implements FinancialChangeRecordSe
FinancialChangeRecord update = new FinancialChangeRecord(); FinancialChangeRecord update = new FinancialChangeRecord();
update.setId(fcr.getId()); update.setId(fcr.getId());
update.setReverseId(response.getString("id")); update.setReverseId(response.getString("id"));
update.setPayStatus(PayStatus.REFUNDING.getCode());
update(update); update(update);
} else {
log.error("改价单退款失败: {}", response.toJSONString());
} }
} }

View File

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

View File

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