diff --git a/doc/2025-01-14.sql b/doc/2025-01-14.sql new file mode 100644 index 00000000..3e477cbc --- /dev/null +++ b/doc/2025-01-14.sql @@ -0,0 +1,13 @@ +ALTER TABLE `cai_pay_trd_config` +ADD COLUMN `min_amount` decimal(20, 2) NOT NULL DEFAULT 0 AFTER `create_time`, +ADD COLUMN `max_amount` decimal(20, 2) NOT NULL DEFAULT 0 AFTER `min_amount` +ADD COLUMN `sort_by` int(10) NOT NULL DEFAULT 0 AFTER `min_amount`; + + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1879078121599889409, '订单日志', '1738084052270563330', '1', 'orderLogs', 'cai/orderLogs/index', 1, 0, 'C', '0', '0', 'cai:orderLogs:list', '#', 'admin', sysdate(), '', null, '订单日志菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1879078121599889410, '订单日志查询', 1879078121599889409, '1', '#', '', 1, 0, 'F', '0', '0', 'cai:orderLogs:query', '#', 'admin', sysdate(), '', null, ''); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/RechargeOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/RechargeOrderController.java index f2d3ea28..f6c2f08d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/RechargeOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/RechargeOrderController.java @@ -1,13 +1,16 @@ package com.ruoyi.web.controller.cai.admin; import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.cai.domain.RechargeOrder; import com.ruoyi.cai.domain.User; import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo; +import com.ruoyi.cai.service.PayTrdConfigService; import com.ruoyi.cai.service.RechargeOrderService; import com.ruoyi.cai.service.UserService; +import com.ruoyi.cai.trdpay.TrdPayManager; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; @@ -15,6 +18,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.BeanConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -37,6 +41,10 @@ public class RechargeOrderController extends BaseController { private final RechargeOrderService rechargeOrderService; private final UserService userService; + @Autowired + private TrdPayManager trdPayManager; + @Autowired + private PayTrdConfigService payTrdConfigService; /** * 查询充值订单列表 @@ -48,6 +56,19 @@ public class RechargeOrderController extends BaseController { return TableDataInfo.build(page); } + @GetMapping("/checkPay") + public R list(String orderNo, String payType) { + RechargeOrder order = rechargeOrderService.getByOrderNo(orderNo); + if(order == null){ + return R.fail("订单不存在"); + } + if(payType == null){ + payType = order.getAppid(); + } + JSONObject jsonObject = payTrdConfigService.resetOrder(order.getOrderNo(), payType, true); + return R.ok(jsonObject); + } + /** * 获取充值订单详细信息 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java index 9f926b5e..42e9b2bc 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java @@ -105,7 +105,7 @@ public class PayController { } log.info("支付宝聚合支付 使用第三方支付 dto={}",JSON.toJSONString(dto)); PayReturnResp orderAli = payTrdConfigService.createOrderAli(payOrderInfo); - orderLogsService.createBaseSuccess(dto.getOrderNo(),"四方支付宝支付"); +// orderLogsService.createBaseSuccess(dto.getOrderNo(),"四方支付宝支付"); return R.ok(orderAli); }catch (Exception e){ orderLogsService.createBaseFail(dto.getOrderNo(),"四方支付宝支付",StringUtils.cat(e.getMessage(),2000)); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/OrderLogsController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/OrderLogsController.java index cd90fb79..403ea873 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/OrderLogsController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/OrderLogsController.java @@ -2,10 +2,13 @@ package com.ruoyi.cai.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.cai.domain.OrderLogs; import com.ruoyi.cai.service.OrderLogsService; import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.page.TableDataInfo; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -40,6 +43,16 @@ public class OrderLogsController extends BaseController { return R.ok(list); } + /** + * 查询订单日志列表 + */ + @GetMapping("/list") + public TableDataInfo list(OrderLogs bo, PageQuery pageQuery) { + Page page = orderLogsService.page(pageQuery.build(), Wrappers.lambdaQuery(OrderLogs.class).orderByDesc(OrderLogs::getCreateTime)); + return TableDataInfo.build(page); + } + + /** * 获取订单日志详细信息 * diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/PayTrdConfigController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/PayTrdConfigController.java index b7018707..37e701db 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/PayTrdConfigController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/PayTrdConfigController.java @@ -66,7 +66,9 @@ public class PayTrdConfigController extends BaseController { @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody PayTrdConfig bo) { - return toAjax(payTrdConfigService.save(bo)); + boolean save = payTrdConfigService.save(bo); + payTrdConfigService.resetPayTrdConfig(); + return toAjax(save); } @SaCheckPermission("cai:payTrdConfig:edit") @@ -75,6 +77,7 @@ public class PayTrdConfigController extends BaseController { @PostMapping("/enableStatus") public R enableStatus(@Validated(AddGroup.class) @RequestBody PayTrdConfig bo) { payTrdConfigService.enableStatus(bo.getId(), bo.getEnableStatus()); + payTrdConfigService.resetPayTrdConfig(); return R.ok(); } @@ -86,7 +89,9 @@ public class PayTrdConfigController extends BaseController { @RepeatSubmit() @PutMapping() public R edit(@Validated(EditGroup.class) @RequestBody PayTrdConfig bo) { - return toAjax(payTrdConfigService.updateById(bo)); + boolean save = payTrdConfigService.updateById(bo); + payTrdConfigService.resetPayTrdConfig(); + return toAjax(save); } /** @@ -99,6 +104,8 @@ public class PayTrdConfigController extends BaseController { @DeleteMapping("/{ids}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { - return toAjax(payTrdConfigService.removeBatchByIds(Arrays.asList(ids))); + boolean b = payTrdConfigService.removeBatchByIds(Arrays.asList(ids)); + payTrdConfigService.resetPayTrdConfig(); + return toAjax(b); } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/PayTrdConfig.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/PayTrdConfig.java index 5c14c439..b43a2883 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/PayTrdConfig.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/PayTrdConfig.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -51,6 +52,11 @@ public class PayTrdConfig implements Serializable { private String aliProductId; + private BigDecimal minAmount; + private BigDecimal maxAmount; + + private Integer sortBy; + private Integer enableStatus; /** * 是否删除 diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java index 002eac9d..1075c1dc 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java @@ -272,4 +272,26 @@ public class PayManager { } return resp; } + + public void updatePayType(String orderNo, String type) { + OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo); + if(orderTypeEnum == null){ + log.error("订单类型有误!orderNo={}",orderNo); + return; + } + switch (orderTypeEnum) { + case VIP_ORDER_SUB: + vipOrderService.update(Wrappers.lambdaUpdate(VipOrder.class) + .eq(VipOrder::getOrderNo, orderNo) + .set(VipOrder::getAppid, type)); + break; + case RECHARGE_ORDER_SUB: + rechargeOrderService.update(Wrappers.lambdaUpdate(RechargeOrder.class) + .eq(RechargeOrder::getOrderNo, orderNo) + .set(RechargeOrder::getAppid, type)); + break; + default: + break; + } + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/OrderLogsService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/OrderLogsService.java index b2b30a81..3af74696 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/OrderLogsService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/OrderLogsService.java @@ -21,5 +21,5 @@ public interface OrderLogsService extends IService { void createBaseSuccess(String orderNo, String stepName); - void createAliPayLogs(String orderNo, String inParams, JSONObject jsonObject, TrdPayTypeEnum typeEnum); + void createAliPayLogs(String orderNo, String inParams, JSONObject jsonObject, boolean success,TrdPayTypeEnum typeEnum); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/PayTrdConfigService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/PayTrdConfigService.java index 146b211d..72292f7c 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/PayTrdConfigService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/PayTrdConfigService.java @@ -13,6 +13,8 @@ import com.ruoyi.cai.pay.PayReturnResp; * @date 2024-11-25 */ public interface PayTrdConfigService extends IService { + void resetPayTrdConfig(); + PayReturnResp createOrderAli(PayOrderInfoDTO dto); JSONObject queryOrder(String orderNo, String trdPayType); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/OrderLogsServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/OrderLogsServiceImpl.java index cb0438c8..a2588ae4 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/OrderLogsServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/OrderLogsServiceImpl.java @@ -49,7 +49,7 @@ public class OrderLogsServiceImpl extends ServiceImpl ACCOUNT_MAP = new ConcurrentHashMap<>(); + private final static List PAY_TRD_CONFIG_LIST = new CopyOnWriteArrayList<>(); + + + @PostConstruct + public void init(){ + this.resetPayTrdConfig(); + } + + @Override + public void resetPayTrdConfig() { + PAY_TRD_CONFIG_LIST.clear(); + List list = this.list(Wrappers.lambdaQuery(PayTrdConfig.class).orderByAsc(PayTrdConfig::getSortBy)); + PAY_TRD_CONFIG_LIST.addAll(list); + } + @Override public PayReturnResp createOrderAli(PayOrderInfoDTO dto){ - PayTrdConfig payTrdConfig = getEnableStatus(); +// PayTrdConfig payTrdConfig = getEnableStatus(); + PayTrdConfig payTrdConfig = getConfig(dto.getPrice()); if(payTrdConfig == null){ throw new ServiceException("未开启支付,请联系客服"); } @@ -45,44 +71,43 @@ public class PayTrdConfigServiceImpl extends ServiceImpl list = new ArrayList<>(); + for(PayTrdConfig payTrdConfig : PAY_TRD_CONFIG_LIST){ + if(payTrdConfig.getEnableStatus() == 0){ + continue; + } + if(payTrdConfig.getMaxAmount().compareTo(BigDecimal.ZERO) == 0 && payTrdConfig.getMinAmount().compareTo(BigDecimal.ZERO) == 0){ + list.add(payTrdConfig); + continue; + } + // 在范围内 + if(payTrdConfig.getMinAmount().compareTo(amount) <= 0 && payTrdConfig.getMaxAmount().compareTo(amount) >= 0){ + list.add(payTrdConfig); + } } - if(typeEnum == TrdPayTypeEnum.V1){ // V1 - if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V1统一支付失败失败 dto={}, payTrdConfig={}, typeEnum={}", JSON.toJSONString(dto), JSON.toJSONString(payTrdConfig),JSON.toJSONString(jsonObject)); - throw new ServiceException("调用支付失败"); - } - String payUrl = jsonObject.getJSONObject("payParams").getString("payUrl"); - return PayReturnResp.createH5(payUrl); - }else if(typeEnum == TrdPayTypeEnum.V2){ - if(!"0".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V2统一支付失败失败 dto={}, payTrdConfig={}, typeEnum={}", JSON.toJSONString(dto), JSON.toJSONString(payTrdConfig),JSON.toJSONString(jsonObject)); - throw new ServiceException("调用支付失败"); - } - String payMethod = jsonObject.getString("payMethod"); - if("alipayApp".equals(payMethod)){ - String appStr = jsonObject.getJSONObject("payParams").getString("appStr"); - return PayReturnResp.createApp(appStr); - } - return PayReturnResp.createH5(JSON.toJSONString(jsonObject)); - }else if(typeEnum == TrdPayTypeEnum.V3){ - if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V3统一支付失败失败 dto={}, payTrdConfig={}, typeEnum={}", JSON.toJSONString(dto), JSON.toJSONString(payTrdConfig),JSON.toJSONString(jsonObject)); - throw new ServiceException("调用支付失败"); - } - String payUrl = jsonObject.getJSONObject("payParams").getString("payUrl"); - return PayReturnResp.createH5(payUrl); + if(list.isEmpty()){ + return null; } - return null;*/ + AtomicLong index = ACCOUNT_MAP.get(amount); + if(index == null){ + index = new AtomicLong(0); + index.incrementAndGet(); + ACCOUNT_MAP.put(amount,index); + return list.get(0); + } + long in = index.getAndIncrement(); + long l = in % list.size(); + return list.get((int) l); } + @Deprecated private PayTrdConfig getEnableStatus(){ return this.getOne(Wrappers.lambdaQuery(PayTrdConfig.class).eq(PayTrdConfig::getEnableStatus, 1) .eq(PayTrdConfig::getDeleteFlag, 0).last("limit 1")); @@ -109,87 +134,27 @@ public class PayTrdConfigServiceImpl extends ServiceImpl objectJson = new HashMap<>(); - for (String key : jsonObject.keySet()) { - objectJson.put(key, jsonObject.getString(key)); - } - payManager.callBack(mchOrderNo,payOrderId,objectJson,"V1", PayTypeEnum.TRD); - } - return jsonObject; - }else if(typeEnum == TrdPayTypeEnum.V2){ - if(!"0".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V2统一支付失败失败 orderNo={}, payTrdConfig={}, typeEnum={}", orderNo, JSON.toJSONString(payTrdConfig),JSON.toJSONString(typeEnum)); - throw new ServiceException("调用支付失败"); - } - Integer status = jsonObject.getInteger("status"); - if(status != null && (status.equals(2) || status.equals(3))){ - String mchOrderNo = jsonObject.getString("mchOrderNo"); - String payOrderId = jsonObject.getString("payOrderId"); - String productId = jsonObject.getString("productId"); - Map objectJson = new HashMap<>(); - for (String key : jsonObject.keySet()) { - objectJson.put(key, jsonObject.getString(key)); - } - payManager.callBack(mchOrderNo,payOrderId,objectJson,"V2", PayTypeEnum.TRD); - } - return jsonObject; - }else if(typeEnum == TrdPayTypeEnum.V3){ // V1 - if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V3统一支付失败失败 orderNo={}, payTrdConfig={}, typeEnum={}", orderNo, JSON.toJSONString(payTrdConfig),JSON.toJSONString(typeEnum)); - throw new ServiceException("调用支付失败"); - } - Integer status = jsonObject.getInteger("status"); - if(status != null && status.equals(2)){ - String mchOrderNo = jsonObject.getString("mchOrderNo"); - String payOrderId = jsonObject.getString("payOrderId"); - String productId = jsonObject.getString("productId"); - Map objectJson = new HashMap<>(); - for (String key : jsonObject.keySet()) { - objectJson.put(key, jsonObject.getString(key)); - } - payManager.callBack(mchOrderNo,payOrderId,objectJson,"V3", PayTypeEnum.TRD); - } - return jsonObject; - } - return jsonObject;*/ } @Override @Transactional(rollbackFor = Exception.class) public void enableStatus(Long id, Integer enableStatus) { - if(enableStatus.equals(0)){ + this.update(Wrappers.lambdaUpdate(PayTrdConfig.class).eq(PayTrdConfig::getId, id) + .set(PayTrdConfig::getEnableStatus, enableStatus)); + /*if(enableStatus.equals(0)){ this.update(Wrappers.lambdaUpdate(PayTrdConfig.class).eq(PayTrdConfig::getId, id) .set(PayTrdConfig::getEnableStatus, enableStatus)); } else if(enableStatus.equals(1)){ @@ -198,7 +163,7 @@ public class PayTrdConfigServiceImpl extends ServiceImpl sourceData) { String mchOrderNo = sourceData.get("mchOrderNo"); @@ -112,8 +119,8 @@ public class PayTrdV1Service implements PayTrdService { public JSONObject resetOrder(String orderNo, PayTrdConfig payTrdConfig,boolean updateData) { JSONObject jsonObject = this.queryOrder(orderNo,payTrdConfig); if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V1统一支付失败失败 orderNo={}, payTrdConfig={}", orderNo, JSON.toJSONString(payTrdConfig)); - throw new ServiceException("调用支付失败"); + log.info("第三方支付失败 V1统一支付查询订单失败 orderNo={}, payTrdConfig={}", orderNo, JSON.toJSONString(payTrdConfig)); + throw new ServiceException("V1统一支付查询订单失败"); } Integer status = jsonObject.getInteger("status"); if(status != null && status.equals(2)){ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV2Service.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV2Service.java index 0e4d48b7..426d9b51 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV2Service.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV2Service.java @@ -68,12 +68,9 @@ public class PayTrdV2Service implements PayTrdService { String url = createOrderUrl + "?" + para; String body = rest.getForEntity(url, String.class).getBody(); JSONObject jsonObject = JSON.parseObject(body); - orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject, type); - if(jsonObject == null){ - log.error("第三方支付失败 V2返回数据为空 url={}",url); - throw new ServiceException("调用支付失败"); - } - if(!"0".equals(jsonObject.getString("retCode"))){ + boolean success = checkSuccess(jsonObject); + orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject, success,type); + if(!success){ log.info("第三方支付失败 V2统一支付失败失败 url={} body={}, payTrdConfig={}, typeEnum={}", url, body, JSON.toJSONString(payTrdConfig), JSON.toJSONString(jsonObject)); throw new ServiceException("调用支付失败"); } @@ -85,6 +82,16 @@ public class PayTrdV2Service implements PayTrdService { return PayReturnResp.createH5(JSON.toJSONString(jsonObject)); } + private boolean checkSuccess(JSONObject jsonObject) { + if(jsonObject == null){ + return false; + } + if(!"0".equals(jsonObject.getString("retCode"))){ + return false; + } + return true; + } + @Override public NotifyResp getNotifyResp(Map sourceData) { String mchOrderNo = sourceData.get("mchOrderNo"); @@ -124,8 +131,8 @@ public class PayTrdV2Service implements PayTrdService { public JSONObject resetOrder(String orderNo, PayTrdConfig payTrdConfig, boolean updateData) { JSONObject jsonObject = this.queryOrder(orderNo,payTrdConfig); if(!"0".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V2统一支付失败失败 orderNo={}, payTrdConfig={}", orderNo, JSON.toJSONString(payTrdConfig)); - throw new ServiceException("调用支付失败"); + log.info("第三方支付失败 V2统一支付查询订单失败 orderNo={}, payTrdConfig={}", orderNo, JSON.toJSONString(payTrdConfig)); + throw new ServiceException("V2统一支付查询订单失败"); } Integer status = jsonObject.getInteger("status"); if(status != null && (status.equals(2) || status.equals(3))){ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV3Service.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV3Service.java index 28cd4346..1b323345 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV3Service.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV3Service.java @@ -57,12 +57,9 @@ public class PayTrdV3Service implements PayTrdService { String url = createOrderUrl + "?" + para; String body = rest.getForEntity(url, String.class).getBody(); JSONObject jsonObject = JSON.parseObject(body); - orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject, type); - if(jsonObject == null){ - log.error("第三方支付失败 V3 返回数据为空 url={}",url); - throw new ServiceException("调用支付失败"); - } - if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ + boolean success = checkSuccess(jsonObject); + orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject, success, type); + if(!success){ log.info("第三方支付失败 V3 统一支付失败失败 url={} body={}, payTrdConfig={}, typeEnum={}", url,body, JSON.toJSONString(payTrdConfig), JSON.toJSONString(jsonObject)); throw new ServiceException("调用支付失败"); } @@ -70,6 +67,16 @@ public class PayTrdV3Service implements PayTrdService { return PayReturnResp.createH5(payUrl); } + private boolean checkSuccess(JSONObject jsonObject) { + if(jsonObject == null){ + return false; + } + if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ + return false; + } + return true; + } + @Override public NotifyResp getNotifyResp(Map sourceData) { String mchOrderNo = sourceData.get("mchOrderNo"); @@ -111,8 +118,8 @@ public class PayTrdV3Service implements PayTrdService { public JSONObject resetOrder(String orderNo, PayTrdConfig payTrdConfig, boolean updateData) { JSONObject jsonObject = this.queryOrder(orderNo,payTrdConfig); if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V3统一支付失败失败 orderNo={}, payTrdConfig={}", orderNo, JSON.toJSONString(payTrdConfig)); - throw new ServiceException("调用支付失败"); + log.info("第三方支付失败 V3统一支付查询订单失败 orderNo={}, payTrdConfig={}", orderNo, JSON.toJSONString(payTrdConfig)); + throw new ServiceException("V3统一支付查询订单失败"); } Integer status = jsonObject.getInteger("status"); if(status != null && status.equals(2)){ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV4Service.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV4Service.java index 266adedc..6a1ac78f 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV4Service.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV4Service.java @@ -57,12 +57,9 @@ public class PayTrdV4Service implements PayTrdService { String url = createOrderUrl + "?" + para; String body = rest.postForObject(url, null, String.class); JSONObject jsonObject = JSON.parseObject(body); - orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject, type); - if(jsonObject == null){ - log.error("第三方支付失败 V4 返回数据为空 url={}",url); - throw new ServiceException("调用支付失败"); - } - if(!"0000".equals(jsonObject.getString("code"))){ + boolean success = checkSuccess(jsonObject); + orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject,success, type); + if(!success){ log.info("第三方支付失败 V4 统一支付失败失败 url={} body={}, payTrdConfig={}, typeEnum={}", url, body, JSON.toJSONString(payTrdConfig), JSON.toJSONString(jsonObject)); throw new ServiceException("调用支付失败"); } @@ -70,6 +67,16 @@ public class PayTrdV4Service implements PayTrdService { return PayReturnResp.createH5(payUrl); } + private boolean checkSuccess(JSONObject jsonObject) { + if(jsonObject == null){ + return false; + } + if(!"0000".equals(jsonObject.getString("code"))){ + return false; + } + return true; + } + @Override public NotifyResp getNotifyResp(Map sourceData) { String mchOrderNo = sourceData.get("merchantPayNo"); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV5Service.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV5Service.java index b99d9f0b..56d8293f 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV5Service.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV5Service.java @@ -29,6 +29,7 @@ import java.util.Map; @Service @Slf4j +@Deprecated public class PayTrdV5Service implements PayTrdService { @Autowired @@ -65,18 +66,24 @@ public class PayTrdV5Service implements PayTrdService { String url = createOrderUrl + "?" + para; String body = rest.postForObject(url, null, String.class); JSONObject jsonObject = JSON.parseObject(body); - orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject, type); - if(jsonObject == null){ - log.error("第三方支付失败 V5 返回数据为空 url={}",url); - throw new ServiceException("调用支付失败"); - } - if(!"1".equals(jsonObject.getString("status"))){ + boolean success = checkSuccess(jsonObject); + orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject, success, type); + if(!success){ log.info("第三方支付失败 V5 统一支付失败失败 url={} body={}, payTrdConfig={}, typeEnum={}", url, body, JSON.toJSONString(payTrdConfig), JSON.toJSONString(jsonObject)); throw new ServiceException("调用支付失败"); } String payUrl = jsonObject.getString("h5_url"); return PayReturnResp.createH5(payUrl); } + private boolean checkSuccess(JSONObject jsonObject) { + if(jsonObject == null){ + return false; + } + if(!"1".equals(jsonObject.getString("status"))){ + return false; + } + return true; + } @Override public NotifyResp getNotifyResp(Map sourceData) { @@ -118,25 +125,6 @@ public class PayTrdV5Service implements PayTrdService { @Override public JSONObject resetOrder(String orderNo, PayTrdConfig payTrdConfig, boolean updateData) { throw new ServiceException("V5不支持订单查询"); - /*JSONObject jsonObject = this.queryOrder(orderNo,payTrdConfig); - if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V5统一支付失败失败 orderNo={}, payTrdConfig={}", orderNo, JSON.toJSONString(payTrdConfig)); - throw new ServiceException("调用支付失败"); - } - Integer status = jsonObject.getInteger("status"); - if(status != null && status.equals(1)){ - String mchOrderNo = jsonObject.getString("mchOrderNo"); - String payOrderId = jsonObject.getString("payOrderId"); - String productId = jsonObject.getString("productId"); - Map objectJson = new HashMap<>(); - for (String key : jsonObject.keySet()) { - objectJson.put(key, jsonObject.getString(key)); - } - if(updateData){ - payManager.callBack(mchOrderNo,payOrderId,objectJson,"V5", PayTypeEnum.TRD); - } - } - return jsonObject;*/ } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV6Service.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV6Service.java index 190a7f75..0dddb3e0 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV6Service.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV6Service.java @@ -64,12 +64,9 @@ public class PayTrdV6Service implements PayTrdService { String url = createOrderUrl + "?" + para; String body = rest.postForObject(url, null, String.class); JSONObject jsonObject = JSON.parseObject(body); - orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject, type); - if(jsonObject == null){ - log.error("第三方支付失败 V6 返回数据为空 url={}",url); - throw new ServiceException("调用支付失败"); - } - if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ + boolean success = checkSuccess(jsonObject); + orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject, success, type); + if(!success){ log.info("第三方支付失败 V6 统一支付失败失败 url={} body={}, payTrdConfig={}, typeEnum={}", url, body, JSON.toJSONString(payTrdConfig), JSON.toJSONString(jsonObject)); throw new ServiceException("调用支付失败"); } @@ -77,6 +74,16 @@ public class PayTrdV6Service implements PayTrdService { return PayReturnResp.createH5(payUrl); } + private boolean checkSuccess(JSONObject jsonObject) { + if(jsonObject == null){ + return false; + } + if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ + return false; + } + return true; + } + @Override public NotifyResp getNotifyResp(Map sourceData) { String mchOrderNo = sourceData.get("mchOrderNo"); @@ -117,25 +124,6 @@ public class PayTrdV6Service implements PayTrdService { @Override public JSONObject resetOrder(String orderNo, PayTrdConfig payTrdConfig, boolean updateData) { throw new ServiceException("V6不支持订单查询"); - /*JSONObject jsonObject = this.queryOrder(orderNo,payTrdConfig); - if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V6统一支付失败失败 orderNo={}, payTrdConfig={}", orderNo, JSON.toJSONString(payTrdConfig)); - throw new ServiceException("调用支付失败"); - } - Integer status = jsonObject.getInteger("status"); - if(status != null && status.equals(1)){ - String mchOrderNo = jsonObject.getString("mchOrderNo"); - String payOrderId = jsonObject.getString("payOrderId"); - String productId = jsonObject.getString("productId"); - Map objectJson = new HashMap<>(); - for (String key : jsonObject.keySet()) { - objectJson.put(key, jsonObject.getString(key)); - } - if(updateData){ - payManager.callBack(mchOrderNo,payOrderId,objectJson,"V6", PayTypeEnum.TRD); - } - } - return jsonObject;*/ } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV7Service.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV7Service.java index 518ab19f..adfadfd5 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV7Service.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV7Service.java @@ -68,12 +68,9 @@ public class PayTrdV7Service implements PayTrdService { HttpEntity> request = new HttpEntity<>(map, headers); String body = rest.postForObject(createOrderUrl, request, String.class); JSONObject jsonObject = JSON.parseObject(body); - orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), createOrderUrl+JSON.toJSONString(map), jsonObject, type); - if(jsonObject == null){ - log.error("第三方支付失败 V7 返回数据为空 url={} params={}",createOrderUrl,JSON.toJSONString(map)); - throw new ServiceException("调用支付失败"); - } - if(!"1".equals(jsonObject.getString("code"))){ + boolean success = checkSuccess(jsonObject); + orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), createOrderUrl+JSON.toJSONString(map), jsonObject, success, type); + if(!success){ log.info("第三方支付失败 V7 统一支付失败失败 url={} params={} body={}, payTrdConfig={}, typeEnum={}", createOrderUrl,JSON.toJSONString(map), body, JSON.toJSONString(payTrdConfig), JSON.toJSONString(jsonObject)); throw new ServiceException("调用支付失败"); } @@ -81,6 +78,16 @@ public class PayTrdV7Service implements PayTrdService { return PayReturnResp.createH5(payUrl); } + private boolean checkSuccess(JSONObject jsonObject) { + if(jsonObject == null){ + return false; + } + if(!"1".equals(jsonObject.getString("code"))){ + return false; + } + return true; + } + @Override public NotifyResp getNotifyResp(Map sourceData) { String mchOrderNo = sourceData.get("merchant_order_no"); @@ -98,49 +105,11 @@ public class PayTrdV7Service implements PayTrdService { @Override public JSONObject queryOrder(String orderNo, PayTrdConfig payTrdConfig) { throw new ServiceException("V7不支持订单查询"); - /*TrdPayTypeEnum type = getType(); - Map params = new HashMap<>(); - params.put("merchantId", payTrdConfig.getMchId()); - params.put("merchantPayNo", orderNo); - String para = PayMd5Util.createParams(params,payTrdConfig.getSign()); - String gatewayUrl = type.getGatewayUrl(); - if(StringUtils.isNotBlank(payTrdConfig.getGatewayUrl())){ - gatewayUrl = payTrdConfig.getGatewayUrl(); - } - String queryOrderUrl = gatewayUrl + type.getQueryOrderUrl(); - String url = queryOrderUrl + "?" + para; - String body = RestTemplateUtil.getRest().getForEntity(url, String.class).getBody(); - JSONObject jsonObject = JSON.parseObject(body); - if(jsonObject == null){ - log.error("第三方支付查询失败 返回数据为空 URL={}",url); - throw new ServiceException("调用支付失败"); - } - log.info("第三方支付查询成功 V7 URL={}, body={}",url, body); - return jsonObject;*/ } @Override public JSONObject resetOrder(String orderNo, PayTrdConfig payTrdConfig, boolean updateData) { throw new ServiceException("V7不支持订单查询"); - /*JSONObject jsonObject = this.queryOrder(orderNo,payTrdConfig); - if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V7统一支付失败失败 orderNo={}, payTrdConfig={}", orderNo, JSON.toJSONString(payTrdConfig)); - throw new ServiceException("调用支付失败"); - } - Integer status = jsonObject.getInteger("status"); - if(status != null && status.equals(1)){ - String mchOrderNo = jsonObject.getString("mchOrderNo"); - String payOrderId = jsonObject.getString("payOrderId"); - String productId = jsonObject.getString("productId"); - Map objectJson = new HashMap<>(); - for (String key : jsonObject.keySet()) { - objectJson.put(key, jsonObject.getString(key)); - } - if(updateData){ - payManager.callBack(mchOrderNo,payOrderId,objectJson,"V7", PayTypeEnum.TRD); - } - } - return jsonObject;*/ } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV8Service.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV8Service.java index d8721530..46033e1a 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV8Service.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV8Service.java @@ -89,9 +89,10 @@ public class PayTrdV8Service implements PayTrdService { HttpEntity> request = new HttpEntity<>(map, headers); String body = rest.postForObject(createOrderUrl, request, String.class); JSONObject jsonObject = JSON.parseObject(body); - orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), createOrderUrl+JSON.toJSONString(map), jsonObject, type); - if(jsonObject == null){ - log.error("第三方支付失败 V8 返回数据为空 url={} params={}",createOrderUrl,JSON.toJSONString(map)); + boolean success = checkSuccess(jsonObject); + orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), createOrderUrl+JSON.toJSONString(map), jsonObject,success, type); + if(!success){ + log.info("第三方支付失败 V8 统一支付失败失败 url={} params={} body={}, payTrdConfig={}, typeEnum={}", createOrderUrl,JSON.toJSONString(map), body, JSON.toJSONString(payTrdConfig), JSON.toJSONString(jsonObject)); throw new ServiceException("调用支付失败"); } if(!"1".equals(jsonObject.getString("code"))){ @@ -102,6 +103,16 @@ public class PayTrdV8Service implements PayTrdService { return PayReturnResp.createH5(payUrl); } + private boolean checkSuccess(JSONObject jsonObject) { + if(jsonObject == null){ + return false; + } + if(!"1".equals(jsonObject.getString("code"))){ + return false; + } + return true; + } + @Override public NotifyResp getNotifyResp(Map sourceData) { String mchOrderNo = sourceData.get("out_trade_no"); @@ -119,49 +130,11 @@ public class PayTrdV8Service implements PayTrdService { @Override public JSONObject queryOrder(String orderNo, PayTrdConfig payTrdConfig) { throw new ServiceException("V8不支持订单查询"); - /*TrdPayTypeEnum type = getType(); - Map params = new HashMap<>(); - params.put("merchantId", payTrdConfig.getMchId()); - params.put("merchantPayNo", orderNo); - String para = PayMd5Util.createParams(params,payTrdConfig.getSign()); - String gatewayUrl = type.getGatewayUrl(); - if(StringUtils.isNotBlank(payTrdConfig.getGatewayUrl())){ - gatewayUrl = payTrdConfig.getGatewayUrl(); - } - String queryOrderUrl = gatewayUrl + type.getQueryOrderUrl(); - String url = queryOrderUrl + "?" + para; - String body = RestTemplateUtil.getRest().getForEntity(url, String.class).getBody(); - JSONObject jsonObject = JSON.parseObject(body); - if(jsonObject == null){ - log.error("第三方支付查询失败 返回数据为空 URL={}",url); - throw new ServiceException("调用支付失败"); - } - log.info("第三方支付查询成功 V8 URL={}, body={}",url, body); - return jsonObject;*/ } @Override public JSONObject resetOrder(String orderNo, PayTrdConfig payTrdConfig, boolean updateData) { throw new ServiceException("V8不支持订单查询"); - /*JSONObject jsonObject = this.queryOrder(orderNo,payTrdConfig); - if(!"SUCCESS".equals(jsonObject.getString("retCode"))){ - log.info("第三方支付失败 V8统一支付失败失败 orderNo={}, payTrdConfig={}", orderNo, JSON.toJSONString(payTrdConfig)); - throw new ServiceException("调用支付失败"); - } - Integer status = jsonObject.getInteger("status"); - if(status != null && status.equals(1)){ - String mchOrderNo = jsonObject.getString("mchOrderNo"); - String payOrderId = jsonObject.getString("payOrderId"); - String productId = jsonObject.getString("productId"); - Map objectJson = new HashMap<>(); - for (String key : jsonObject.keySet()) { - objectJson.put(key, jsonObject.getString(key)); - } - if(updateData){ - payManager.callBack(mchOrderNo,payOrderId,objectJson,"V8", PayTypeEnum.TRD); - } - } - return jsonObject;*/ } }