This commit is contained in:
鲨鱼
2024-12-18 18:01:41 +08:00
parent e3b42216f1
commit 10a5f1c903
14 changed files with 334 additions and 4 deletions

View File

@@ -0,0 +1,54 @@
package com.ruoyi.cai.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.R;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 订单日志
*
* @author 77
* @date 2024-12-13
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/cai/orderLogs")
public class OrderLogsController extends BaseController {
private final OrderLogsService orderLogsService;
/**
* 查询订单日志列表
*/
@GetMapping("/allByOrderNo")
public R<List<OrderLogs>> list(OrderLogs bo) {
List<OrderLogs> list = orderLogsService.list(Wrappers.lambdaQuery(OrderLogs.class).eq(OrderLogs::getOrderNo, bo.getOrderNo())
.orderByAsc(OrderLogs::getCreateTime));
return R.ok(list);
}
/**
* 获取订单日志详细信息
*
* @param id 主键
*/
@GetMapping("/{id}")
public R<OrderLogs> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(orderLogsService.getById(id));
}
}

View File

@@ -0,0 +1,54 @@
package com.ruoyi.cai.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 订单日志对象 cai_order_logs
*
* @author 77
* @date 2024-12-13
*/
@Data
@TableName("cai_order_logs")
public class OrderLogs implements Serializable {
private static final long serialVersionUID=1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 订单号
*/
private String orderNo;
/**
* 操作名称
*/
private String stepName;
/**
* 入参
*/
private String inParams;
/**
* 出参
*/
private String outParams;
/**
* 标识名称
*/
private String flagName;
private String remark;
private String success;
private LocalDateTime createTime;
}

View File

@@ -26,6 +26,7 @@ public class RechargeOrder implements Serializable {
*/
@TableId(value = "id",type = IdType.AUTO)
private Long id;
private String deviceType;
/**
* 用户ID
*/

View File

@@ -0,0 +1,14 @@
package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cai.domain.OrderLogs;
/**
* 订单日志Mapper接口
*
* @author 77
* @date 2024-12-13
*/
public interface OrderLogsMapper extends BaseMapper<OrderLogs> {
}

View File

@@ -0,0 +1,25 @@
package com.ruoyi.cai.service;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.OrderLogs;
import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
/**
* 订单日志Service接口
*
* @author 77
* @date 2024-12-13
*/
public interface OrderLogsService extends IService<OrderLogs> {
void createOrderLogs(String orderNo, String stepName, String flag, String inParams, String outParams);
void createOrderLogsNoFlag(String orderNo, String stepName, String inParams, String outParams);
void createBaseFail(String orderNo, String stepName, String remark);
void createBaseSuccess(String orderNo, String stepName);
void createAliPayLogs(String orderNo, String inParams, JSONObject jsonObject, TrdPayTypeEnum typeEnum);
}

View File

@@ -0,0 +1,89 @@
package com.ruoyi.cai.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.OrderLogs;
import com.ruoyi.cai.mapper.OrderLogsMapper;
import com.ruoyi.cai.service.OrderLogsService;
import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
import lombok.Data;
import org.springframework.stereotype.Service;
/**
* 订单日志Service业务层处理
*
* @author 77
* @date 2024-12-13
*/
@Service
public class OrderLogsServiceImpl extends ServiceImpl<OrderLogsMapper, OrderLogs> implements OrderLogsService {
@Override
public void createOrderLogs(String orderNo, String stepName, String flag, String inParams, String outParams){
}
@Override
public void createOrderLogsNoFlag(String orderNo, String stepName, String inParams, String outParams){
}
@Override
public void createBaseFail(String orderNo, String stepName, String remark){
OrderLogs orderLogs = new OrderLogs();
orderLogs.setOrderNo(orderNo);
orderLogs.setStepName(stepName);
orderLogs.setSuccess("失败");
orderLogs.setRemark(remark);
this.save(orderLogs);
}
@Override
public void createBaseSuccess(String orderNo, String stepName){
OrderLogs orderLogs = new OrderLogs();
orderLogs.setOrderNo(orderNo);
orderLogs.setStepName(stepName);
orderLogs.setSuccess("成功");
this.save(orderLogs);
}
@Override
public void createAliPayLogs(String orderNo, String inParams, JSONObject jsonObject, TrdPayTypeEnum typeEnum){
OrderLogs orderLogs = new OrderLogs();
orderLogs.setOrderNo(orderNo);
orderLogs.setStepName("四方支付宝支付请求日志");
orderLogs.setSuccess("请求日志");
orderLogs.setInParams(JSON.toJSONString(new UrlJson(inParams)));
orderLogs.setOutParams(JSON.toJSONString(jsonObject));
orderLogs.setFlagName(typeEnum.name());
if(typeEnum == TrdPayTypeEnum.V1) { // V1
if(!"SUCCESS".equals(jsonObject.getString("retCode"))){
orderLogs.setSuccess("失败");
}
}else if(typeEnum == TrdPayTypeEnum.V2){
if(!"0".equals(jsonObject.getString("retCode"))){
orderLogs.setSuccess("失败");
}
}else if(typeEnum == TrdPayTypeEnum.V3){
if(!"SUCCESS".equals(jsonObject.getString("retCode"))){
orderLogs.setSuccess("失败");
}
}
orderLogs.setSuccess("成功");
this.save(orderLogs);
}
@Data
public static class UrlJson{
private String url;
public UrlJson() {
}
public UrlJson(String url) {
this.url = url;
}
}
}

View File

@@ -10,6 +10,7 @@ import com.ruoyi.cai.pay.PayManager;
import com.ruoyi.cai.pay.PayOrderInfoDTO;
import com.ruoyi.cai.pay.PayReturnResp;
import com.ruoyi.cai.pay.PayTypeEnum;
import com.ruoyi.cai.service.OrderLogsService;
import com.ruoyi.cai.service.PayTrdConfigService;
import com.ruoyi.cai.trdpay.TrdPayManager;
import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
@@ -37,6 +38,8 @@ public class PayTrdConfigServiceImpl extends ServiceImpl<PayTrdConfigMapper, Pay
private TrdPayManager trdPayManager;
@Autowired
private PayManager payManager;
@Autowired
private OrderLogsService orderLogsService;
@Override
public PayReturnResp createOrderAli(PayOrderInfoDTO dto){

View File

@@ -14,11 +14,13 @@ import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp;
import com.ruoyi.cai.enums.ConsumeLogType;
import com.ruoyi.cai.enums.account.AccountChangeCodeEnum;
import com.ruoyi.cai.enums.account.AccountTypeEnum;
import com.ruoyi.cai.enums.version.VersionPlatformEnum;
import com.ruoyi.cai.manager.IdManager;
import com.ruoyi.cai.mapper.AccountMapper;
import com.ruoyi.cai.mapper.RechargeOrderMapper;
import com.ruoyi.cai.pay.*;
import com.ruoyi.cai.service.*;
import com.ruoyi.cai.util.VersionUtil;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
@@ -79,6 +81,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
throw new ServiceException("充值价格错误");
}
RechargeOrder order = new RechargeOrder();
order.setDeviceType(VersionUtil.getVersionPlatformString());
order.setUserId(addRechargeOrderDto.getUserId());
order.setRechargeId(goods.getId());
order.setRechargeName(goods.getName());

View File

@@ -5,13 +5,16 @@ import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.domain.OrderLogs;
import com.ruoyi.cai.domain.PayTrdConfig;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.pay.PayOrderInfoDTO;
import com.ruoyi.cai.service.AccountService;
import com.ruoyi.cai.service.OrderLogsService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.ServletUtils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -78,14 +81,14 @@ public class TrdPayManager {
String url = createOrderUrl + "?" + para;
String body = restTemplate.getForEntity(url, String.class).getBody();
JSONObject jsonObject = JSON.parseObject(body);
if(jsonObject == null){
log.error("第三方支付失败 返回数据为空");
throw new ServiceException("调用支付失败");
}
log.info("第三方支付成功 URL={}, body={}",url, body);
orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(),url,jsonObject,typeEnum);
return jsonObject;
}
@Autowired
private OrderLogsService orderLogsService;
@Autowired
private AccountService accountService;
@Autowired

View File

@@ -21,6 +21,26 @@ public class VersionUtil {
return VersionPlatformEnum.ANDROID;
}
public static String getVersionPlatformString(){
VersionPlatformEnum strict = getVersionPlatformStrict();
if(strict != null){
return strict.getText();
}
return null;
}
public static VersionPlatformEnum getVersionPlatformStrict(){
HttpServletRequest request = ServletUtils.getRequest();
String sourceId = request.getHeader("source_id");
if("2".equals(sourceId)){
return VersionPlatformEnum.IOS;
}
if("1".equals(sourceId)){
return VersionPlatformEnum.ANDROID;
}
return null;
}
public static int compareVersion(String v1, String v2) {
String[] ss1 = v1.split("\\."), ss2 = v2.split("\\.");
int n = ss1.length, m = ss2.length;

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.cai.mapper.OrderLogsMapper">
<resultMap type="com.ruoyi.cai.domain.OrderLogs" id="OrderLogsResult">
<result property="id" column="id"/>
<result property="orderNo" column="order_no"/>
<result property="stepName" column="step_name"/>
<result property="inParams" column="in_params"/>
<result property="outParams" column="out_params"/>
<result property="createTime" column="create_time"/>
</resultMap>
</mapper>