This commit is contained in:
gaowdong 2025-04-14 18:04:16 +08:00
parent 5a9abe6a2c
commit ebd524e694
9 changed files with 75 additions and 6 deletions

View File

@ -22,7 +22,7 @@ public interface AccTradeMapper {
*/ */
public AccTrade selectAccTradeByTradeId(Long tradeId); public AccTrade selectAccTradeByTradeId(Long tradeId);
public AccTrade selectAccTradeByOrderNo(String orderNo); public List<AccTrade> selectAccTradeByOrderNo(String orderNo);
/** /**
* 查询账户交易记录列表 * 查询账户交易记录列表

View File

@ -22,7 +22,7 @@ public interface IAccTradeService {
*/ */
public AccTrade selectAccTradeByTradeId(Long tradeId); public AccTrade selectAccTradeByTradeId(Long tradeId);
public AccTrade selectAccTradeByOrderNo(String orderNo); public List<AccTrade> selectAccTradeByOrderNo(String orderNo);
/** /**
* 查询账户交易记录列表 * 查询账户交易记录列表

View File

@ -39,7 +39,7 @@ public class AccTradeServiceImpl implements IAccTradeService {
} }
@Override @Override
public AccTrade selectAccTradeByOrderNo(String orderNo) { public List<AccTrade> selectAccTradeByOrderNo(String orderNo) {
return accTradeMapper.selectAccTradeByOrderNo(orderNo); return accTradeMapper.selectAccTradeByOrderNo(orderNo);
} }

View File

@ -0,0 +1,28 @@
package com.bonus.canteen.core.order.constants;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public enum OrderRefundStateEnum {
FINISH(1, "已退单"),
PART_SUCC(2, "部分退单");
private final Integer key;
private final String desc;
private OrderRefundStateEnum(Integer key, String desc) {
this.key = key;
this.desc = desc;
}
public Integer getKey() {
return this.key;
}
public String getDesc() {
return this.desc;
}
}

View File

@ -27,7 +27,7 @@ import javax.servlet.http.HttpServletResponse;
* @date 2025-04-14 * @date 2025-04-14
*/ */
@Controller @Controller
@RequestMapping("/system/info") @RequestMapping("/order")
public class OrderInfoController extends BaseController public class OrderInfoController extends BaseController
{ {
@Autowired @Autowired
@ -69,6 +69,15 @@ public class OrderInfoController extends BaseController
return toAjax(orderInfoService.insertOrderInfo(orderAddParam)); return toAjax(orderInfoService.insertOrderInfo(orderAddParam));
} }
@SysLog(title = "退单", module = "订单", businessType = OperaType.UPDATE)
@PostMapping("/refund/{orderId}")
@ResponseBody
public AjaxResult refund(@PathVariable("orderId") Long orderId)
{
orderInfoService.refund(orderId);
return AjaxResult.success();
}
/** /**
* 修改订单 * 修改订单
*/ */

View File

@ -60,4 +60,6 @@ public interface IOrderInfoService
* @return 结果 * @return 结果
*/ */
public int deleteOrderInfoByOrderId(Long orderId); public int deleteOrderInfoByOrderId(Long orderId);
public void refund(Long orderId);
} }

View File

@ -2,6 +2,7 @@ package com.bonus.canteen.core.order.service.impl;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Objects;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.crypto.digest.DigestUtil;
@ -10,8 +11,11 @@ import com.bonus.canteen.core.account.constants.AccWalletIdEnum;
import com.bonus.canteen.core.account.domain.AccWalletInfo; import com.bonus.canteen.core.account.domain.AccWalletInfo;
import com.bonus.canteen.core.account.domain.WalletUpdateDTO; import com.bonus.canteen.core.account.domain.WalletUpdateDTO;
import com.bonus.canteen.core.account.mq.AccMqSender; import com.bonus.canteen.core.account.mq.AccMqSender;
import com.bonus.canteen.core.account.service.IAccTradeService;
import com.bonus.canteen.core.account.service.IAccWalletInfoService; import com.bonus.canteen.core.account.service.IAccWalletInfoService;
import com.bonus.canteen.core.common.utils.RedisUtil; import com.bonus.canteen.core.common.utils.RedisUtil;
import com.bonus.canteen.core.order.constants.OrderRefundStateEnum;
import com.bonus.canteen.core.order.constants.OrderStateEnum;
import com.bonus.canteen.core.order.domain.OrderInfo; import com.bonus.canteen.core.order.domain.OrderInfo;
import com.bonus.canteen.core.order.domain.param.OrderAddParam; import com.bonus.canteen.core.order.domain.param.OrderAddParam;
import com.bonus.canteen.core.order.mapper.OrderInfoMapper; import com.bonus.canteen.core.order.mapper.OrderInfoMapper;
@ -44,6 +48,8 @@ public class OrderInfoServiceImpl implements IOrderInfoService
private OrderInfoMapper orderInfoMapper; private OrderInfoMapper orderInfoMapper;
@Autowired @Autowired
private IAccWalletInfoService accWalletInfoService; private IAccWalletInfoService accWalletInfoService;
@Autowired
private IAccTradeService accTradeService;
/** /**
* 查询订单 * 查询订单
@ -188,4 +194,27 @@ public class OrderInfoServiceImpl implements IOrderInfoService
{ {
return orderInfoMapper.deleteOrderInfoByOrderId(orderId); return orderInfoMapper.deleteOrderInfoByOrderId(orderId);
} }
@Override
public void refund(Long orderId) {
if(Objects.isNull(orderId) || orderId <= 0) {
throw new ServiceException("订单ID不能为空");
}
OrderInfo orderInfo = selectOrderInfoByOrderId(orderId);
if(Objects.isNull(orderInfo)) {
throw new ServiceException("订单不存在");
}
if(!PayStateEnum.PAY_SUCC.getKey().equals(orderInfo.getPayState())) {
throw new ServiceException("订单未支付");
}
if(orderInfo.getOrderRefundState().equals(OrderRefundStateEnum.FINISH.getKey())) {
throw new ServiceException("订单已退款");
}
String refundKey = String.format("sc:order_refund_order_%s", orderId);
if (!RedisUtil.setNx(refundKey, LeConstants.COMMON_YES, 2)) {
log.info("订单退款处理中:{}", refundKey);
throw new ServiceException("订单退款处理中");
}
accTradeService.selectAccTradeByOrderNo(String.valueOf(orderId));
}
} }

View File

@ -30,6 +30,7 @@ import java.io.PrintWriter;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
@ -75,7 +76,7 @@ public class NotifyCotroller {
String third_trade_no = request.getParameter("trade_no"); String third_trade_no = request.getParameter("trade_no");
//交易状态 //交易状态
String trade_status = request.getParameter("trade_status"); String trade_status = request.getParameter("trade_status");
AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(order_no); AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(order_no).get(0);
if (AliPayTradeStatusEnum.TRADE_STATUS_FINISHED.getKey().equals(trade_status)) { if (AliPayTradeStatusEnum.TRADE_STATUS_FINISHED.getKey().equals(trade_status)) {
//判断该笔订单是否已经做过处理 //判断该笔订单是否已经做过处理
//如果没做过处理根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详情判断金额是否等于 total_amount并执行商户的业务程序 //如果没做过处理根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详情判断金额是否等于 total_amount并执行商户的业务程序

View File

@ -117,7 +117,7 @@ public class PayController {
updateTrade.setPayState(PayStateEnum.PAY_SUCC.getKey()); updateTrade.setPayState(PayStateEnum.PAY_SUCC.getKey());
updateTrade.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue()); updateTrade.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue());
updateTrade.setFailReason(trade_status); updateTrade.setFailReason(trade_status);
AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(accTradeVo.getOrderNo()); AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(accTradeVo.getOrderNo()).get(0);
if (PayStateEnum.PAY_INPROCESS.getKey().equals(accTradeInDB.getPayState())) { if (PayStateEnum.PAY_INPROCESS.getKey().equals(accTradeInDB.getPayState())) {
BigDecimal totalAmount = new BigDecimal(response.getTotalAmount()); BigDecimal totalAmount = new BigDecimal(response.getTotalAmount());
WalletUpdateDTO walletUpdateDTO = new WalletUpdateDTO(); WalletUpdateDTO walletUpdateDTO = new WalletUpdateDTO();