fix
parent
3e22b86747
commit
2502dde831
|
|
@ -9,6 +9,7 @@ import com.ruoyi.common.core.controller.XktBaseController;
|
|||
import com.ruoyi.xkt.domain.AlipayCallback;
|
||||
import com.ruoyi.xkt.domain.FinanceBill;
|
||||
import com.ruoyi.xkt.domain.StoreOrder;
|
||||
import com.ruoyi.xkt.enums.EAlipayCallbackBizType;
|
||||
import com.ruoyi.xkt.enums.EProcessStatus;
|
||||
import com.ruoyi.xkt.manager.impl.AliPaymentMangerImpl;
|
||||
import com.ruoyi.xkt.service.IAlipayCallbackService;
|
||||
|
|
@ -85,6 +86,8 @@ public class AlipayCallbackController extends XktBaseController {
|
|||
//1. 商家需要验证该通知数据中的 out_trade_no 是否为商家系统中创建的订单号。
|
||||
StoreOrder order = storeOrderService.getByOrderNo(alipayCallback.getOutTradeNo());
|
||||
if (order != null) {
|
||||
//订单支付
|
||||
alipayCallback.setBizType(EAlipayCallbackBizType.ORDER_PAY.getValue());
|
||||
//2. 判断 total_amount 是否确实为该订单的实际金额(即商家订单创建时的金额)。
|
||||
if (!NumberUtil.equals(order.getTotalAmount(), alipayCallback.getTotalAmount())) {
|
||||
logger.warn("支付宝回调订单金额匹配失败:{}", params);
|
||||
|
|
@ -114,6 +117,7 @@ public class AlipayCallbackController extends XktBaseController {
|
|||
return SUCCESS;
|
||||
} else {
|
||||
//充值业务
|
||||
alipayCallback.setBizType(EAlipayCallbackBizType.RECHARGE.getValue());
|
||||
//1. 商家需要验证该通知数据中的 out_trade_no 是否为商家系统中创建的订单号。
|
||||
FinanceBill bill = financeBillService.getByBillNo(alipayCallback.getOutTradeNo());
|
||||
if (bill != null) {
|
||||
|
|
@ -138,8 +142,8 @@ public class AlipayCallbackController extends XktBaseController {
|
|||
return SUCCESS;
|
||||
}
|
||||
if (EProcessStatus.INIT.getValue().equals(info.getProcessStatus())) {
|
||||
//充值到账
|
||||
financeBillService.entryRechargeCollectionBill(bill.getBillNo());
|
||||
//更新回调状态,收款单到账
|
||||
alipayCallbackService.processRecharge(info);
|
||||
} else {
|
||||
logger.warn("支付回调重复请求处理: {}", info.getId());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,12 @@
|
|||
package com.ruoyi.framework.web.exception;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import com.ruoyi.common.constant.HttpStatus;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.text.Convert;
|
||||
import com.ruoyi.common.exception.DemoModeException;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.common.utils.html.EscapeUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
|
|
@ -11,13 +17,8 @@ import org.springframework.web.bind.MissingPathVariableException;
|
|||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
|
||||
import com.ruoyi.common.constant.HttpStatus;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.text.Convert;
|
||||
import com.ruoyi.common.exception.DemoModeException;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.common.utils.html.EscapeUtil;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* 全局异常处理器
|
||||
|
|
@ -58,7 +59,7 @@ public class GlobalExceptionHandler
|
|||
@ExceptionHandler(ServiceException.class)
|
||||
public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request)
|
||||
{
|
||||
log.error(e.getMessage(), e);
|
||||
log.error("请求地址'{}',发生业务异常'{}'", request.getRequestURI(), e.getMessage());
|
||||
Integer code = e.getCode();
|
||||
return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage());
|
||||
}
|
||||
|
|
@ -68,8 +69,8 @@ public class GlobalExceptionHandler
|
|||
* {@link cn.hutool.core.lang.Assert}
|
||||
*/
|
||||
@ExceptionHandler(IllegalArgumentException.class)
|
||||
public AjaxResult illegalArgumentException(IllegalArgumentException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
public AjaxResult illegalArgumentException(IllegalArgumentException e, HttpServletRequest request) {
|
||||
log.error("请求地址'{}',发生校验异常'{}'", request.getRequestURI(), e.getMessage());
|
||||
return AjaxResult.error(e.getMessage());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,10 @@ import java.math.BigDecimal;
|
|||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class AlipayCallback extends SimpleEntity {
|
||||
/**
|
||||
* 业务类型[1:订单支付 2:充值]
|
||||
*/
|
||||
private Integer bizType;
|
||||
/**
|
||||
* 通知的类型
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
package com.ruoyi.xkt.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author liangyq
|
||||
* @date 2025-05-13 14:39
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum EAlipayCallbackBizType {
|
||||
|
||||
ORDER_PAY(1, "订单支付"),
|
||||
RECHARGE(2, "充值"),
|
||||
;
|
||||
|
||||
private final Integer value;
|
||||
private final String label;
|
||||
|
||||
public static EAlipayCallbackBizType of(Integer value) {
|
||||
for (EAlipayCallbackBizType e : EAlipayCallbackBizType.values()) {
|
||||
if (e.getValue().equals(value)) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -30,4 +30,11 @@ public interface IAlipayCallbackService {
|
|||
* @param info
|
||||
*/
|
||||
void processOrderPaid(AlipayCallback info);
|
||||
|
||||
/**
|
||||
* 处理充值结果
|
||||
*
|
||||
* @param info
|
||||
*/
|
||||
void processRecharge(AlipayCallback info);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,4 +58,14 @@ public class AlipayCallbackServiceImpl implements IAlipayCallbackService {
|
|||
//创建收款单
|
||||
financeBillService.createOrderPaidCollectionBill(orderExt, info.getId(), EPayChannel.ALI_PAY);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void processRecharge(AlipayCallback info) {
|
||||
//更新回调状态
|
||||
info.setProcessStatus(EProcessStatus.SUCCESS.getValue());
|
||||
alipayCallbackMapper.updateById(info);
|
||||
//收款单到账
|
||||
financeBillService.entryRechargeCollectionBill(info.getOutTradeNo());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -383,19 +383,13 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
expressTracks.add(expressTrackDTO);
|
||||
}
|
||||
orderInfo.setExpressTracks(expressTracks);
|
||||
Map<String, ExpressRegionDTO> regionMap = expressService.getRegionMapCache();
|
||||
orderInfo.setDestinationProvinceName(Optional.ofNullable(regionMap.get(orderInfo.getDestinationProvinceCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
orderInfo.setDestinationCityName(Optional.ofNullable(regionMap.get(orderInfo.getDestinationCityCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
orderInfo.setDestinationCountyName(Optional.ofNullable(regionMap.get(orderInfo.getDestinationCountyCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
orderInfo.setOriginProvinceName(Optional.ofNullable(regionMap.get(orderInfo.getOriginProvinceCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
orderInfo.setOriginCityName(Optional.ofNullable(regionMap.get(orderInfo.getOriginCityCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
orderInfo.setOriginCountyName(Optional.ofNullable(regionMap.get(orderInfo.getOriginCountyCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
Map<String, String> regionMap = expressService.getRegionNameMapCache();
|
||||
orderInfo.setDestinationProvinceName(regionMap.get(orderInfo.getDestinationProvinceCode()));
|
||||
orderInfo.setDestinationCityName(regionMap.get(orderInfo.getDestinationCityCode()));
|
||||
orderInfo.setDestinationCountyName(regionMap.get(orderInfo.getDestinationCountyCode()));
|
||||
orderInfo.setOriginProvinceName(regionMap.get(orderInfo.getOriginProvinceCode()));
|
||||
orderInfo.setOriginCityName(regionMap.get(orderInfo.getOriginCityCode()));
|
||||
orderInfo.setOriginCountyName(regionMap.get(orderInfo.getOriginCountyCode()));
|
||||
//商品信息
|
||||
List<Long> spIds = detailInfos.stream().map(StoreOrderDetailInfoDTO::getStoreProdId).distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
|
@ -426,21 +420,15 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
Map<Long, List<StoreOrderDetailInfoDTO>> orderDetailGroup = orderDetailList
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(StoreOrderDetailDTO::getStoreOrderId));
|
||||
Map<String, ExpressRegionDTO> regionMap = expressService.getRegionMapCache();
|
||||
Map<String, String> regionMap = expressService.getRegionNameMapCache();
|
||||
for (StoreOrderPageItemDTO order : list) {
|
||||
//物流信息
|
||||
order.setDestinationProvinceName(Optional.ofNullable(regionMap.get(order.getDestinationProvinceCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
order.setDestinationCityName(Optional.ofNullable(regionMap.get(order.getDestinationCityCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
order.setDestinationCountyName(Optional.ofNullable(regionMap.get(order.getDestinationCountyCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
order.setOriginProvinceName(Optional.ofNullable(regionMap.get(order.getOriginProvinceCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
order.setOriginCityName(Optional.ofNullable(regionMap.get(order.getOriginCityCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
order.setOriginCountyName(Optional.ofNullable(regionMap.get(order.getOriginCountyCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
order.setDestinationProvinceName(regionMap.get(order.getDestinationProvinceCode()));
|
||||
order.setDestinationCityName(regionMap.get(order.getDestinationCityCode()));
|
||||
order.setDestinationCountyName(regionMap.get(order.getDestinationCountyCode()));
|
||||
order.setOriginProvinceName(regionMap.get(order.getOriginProvinceCode()));
|
||||
order.setOriginCityName(regionMap.get(order.getOriginCityCode()));
|
||||
order.setOriginCountyName(regionMap.get(order.getOriginCountyCode()));
|
||||
order.setOrderDetails(orderDetailGroup.get(order.getId()));
|
||||
for (StoreOrderDetailInfoDTO detail : order.getOrderDetails()) {
|
||||
//首图
|
||||
|
|
@ -1434,19 +1422,13 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
//生成请求号
|
||||
reqDTO.setExpressReqNo(IdUtil.simpleUUID());
|
||||
//行政区划信息
|
||||
Map<String, ExpressRegionDTO> regionMap = expressService.getRegionMapCache();
|
||||
reqDTO.setDestinationProvinceName(Optional.ofNullable(regionMap.get(order.getDestinationProvinceCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
reqDTO.setDestinationCityName(Optional.ofNullable(regionMap.get(order.getDestinationCityCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
reqDTO.setDestinationCountyName(Optional.ofNullable(regionMap.get(order.getDestinationCountyCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
reqDTO.setOriginProvinceName(Optional.ofNullable(regionMap.get(order.getOriginProvinceCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
reqDTO.setOriginCityName(Optional.ofNullable(regionMap.get(order.getOriginCityCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
reqDTO.setOriginCountyName(Optional.ofNullable(regionMap.get(order.getOriginCountyCode()))
|
||||
.map(ExpressRegionDTO::getRegionName).orElse(null));
|
||||
Map<String, String> regionMap = expressService.getRegionNameMapCache();
|
||||
reqDTO.setDestinationProvinceName(regionMap.get(order.getDestinationProvinceCode()));
|
||||
reqDTO.setDestinationCityName(regionMap.get(order.getDestinationCityCode()));
|
||||
reqDTO.setDestinationCountyName(regionMap.get(order.getDestinationCountyCode()));
|
||||
reqDTO.setOriginProvinceName(regionMap.get(order.getOriginProvinceCode()));
|
||||
reqDTO.setOriginCityName(regionMap.get(order.getOriginCityCode()));
|
||||
reqDTO.setOriginCountyName(regionMap.get(order.getOriginCountyCode()));
|
||||
//货物信息
|
||||
List<ExpressShipReqDTO.OrderItem> orderItems = CollUtil.emptyIfNull(orderDetails).stream()
|
||||
.map(o -> ExpressShipReqDTO.OrderItem
|
||||
|
|
|
|||
Loading…
Reference in New Issue