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

21
doc/v5.sql Normal file
View File

@@ -0,0 +1,21 @@
ALTER TABLE `cai_recharge_order`
ADD COLUMN `device_type` varchar(255) NULL COMMENT '设备' AFTER `appid`;
DROP TABLE cai_order_logs;
CREATE TABLE `cai_order_logs`
(
`id` bigint NOT NULL AUTO_INCREMENT,
`order_no` varchar(100) NOT NULL COMMENT '订单号',
`step_name` varchar(100) NOT NULL COMMENT '操作名称',
`flag_name` varchar(100) NULL COMMENT '标识1',
`in_params` JSON COMMENT '入参',
`out_params` JSON COMMENT '出参',
`remark` varchar(2100) NULL COMMENT '备注',
`success` varchar(100) NULL COMMENT '成功',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_order` (`order_no`) USING BTREE
) ENGINE = InnoDB
AUTO_INCREMENT = 1;

View File

@@ -14,11 +14,13 @@ import com.ijpay.core.kit.HttpKit;
import com.ijpay.core.kit.WxPayKit; import com.ijpay.core.kit.WxPayKit;
import com.ijpay.wxpay.WxPayApi; import com.ijpay.wxpay.WxPayApi;
import com.ijpay.wxpay.model.UnifiedOrderModel; import com.ijpay.wxpay.model.UnifiedOrderModel;
import com.ruoyi.cai.domain.OrderLogs;
import com.ruoyi.cai.domain.PayConfig; import com.ruoyi.cai.domain.PayConfig;
import com.ruoyi.cai.dto.app.vo.pay.OrderPayStatusResp; import com.ruoyi.cai.dto.app.vo.pay.OrderPayStatusResp;
import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.pay.*; import com.ruoyi.cai.pay.*;
import com.ruoyi.cai.service.OrderLogsService;
import com.ruoyi.cai.service.PayTrdConfigService; import com.ruoyi.cai.service.PayTrdConfigService;
import com.ruoyi.cai.trdpay.TrdPayManager; import com.ruoyi.cai.trdpay.TrdPayManager;
import com.ruoyi.cai.trdpay.TrdPayProperties; import com.ruoyi.cai.trdpay.TrdPayProperties;
@@ -27,6 +29,7 @@ import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -57,6 +60,8 @@ public class PayController {
private static final String NOTIFY_ALI_URL = "/api/pay/ali/notify"; private static final String NOTIFY_ALI_URL = "/api/pay/ali/notify";
@Autowired @Autowired
private SystemConfigManager systemConfigManager; private SystemConfigManager systemConfigManager;
@Autowired
private OrderLogsService orderLogsService;
// @GetMapping(value = "/checkPay") // @GetMapping(value = "/checkPay")
@@ -92,12 +97,15 @@ public class PayController {
try { try {
boolean openAliPay = systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_ALI_PAY); boolean openAliPay = systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_ALI_PAY);
if(!openAliPay){ if(!openAliPay){
orderLogsService.createBaseFail(dto.getOrderNo(),"四方支付宝支付","第四方支付宝未开启");
return R.fail(600,"支付宝支付失败!未开启支付宝通道!"); return R.fail(600,"支付宝支付失败!未开启支付宝通道!");
} }
log.info("支付宝聚合支付 使用第三方支付 dto={}",JSON.toJSONString(dto)); log.info("支付宝聚合支付 使用第三方支付 dto={}",JSON.toJSONString(dto));
PayReturnResp orderAli = payTrdConfigService.createOrderAli(payOrderInfo); PayReturnResp orderAli = payTrdConfigService.createOrderAli(payOrderInfo);
orderLogsService.createBaseSuccess(dto.getOrderNo(),"四方支付宝支付");
return R.ok(orderAli); return R.ok(orderAli);
}catch (Exception e){ }catch (Exception e){
orderLogsService.createBaseFail(dto.getOrderNo(),"四方支付宝支付",StringUtils.cat(e.getMessage(),2000));
log.error("支付宝聚合支付 使用第三方支付失败! dto={}",JSON.toJSONString(dto), e); log.error("支付宝聚合支付 使用第三方支付失败! dto={}",JSON.toJSONString(dto), e);
return R.fail(600,"支付宝支付失败!"); return R.fail(600,"支付宝支付失败!");
} }
@@ -105,12 +113,14 @@ public class PayController {
try { try {
boolean openSourceAliPay = systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_SOURCE_ALI_PAY); boolean openSourceAliPay = systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_SOURCE_ALI_PAY);
if(!openSourceAliPay){ if(!openSourceAliPay){
orderLogsService.createBaseFail(dto.getOrderNo(),"支付宝支付","支付宝支付失败!未开启原生支付宝通道!");
return R.fail(600,"支付宝支付失败!未开启原生支付宝通道!"); return R.fail(600,"支付宝支付失败!未开启原生支付宝通道!");
} }
log.info("支付宝聚合支付 使用原生支付 dto={}",JSON.toJSONString(dto)); log.info("支付宝聚合支付 使用原生支付 dto={}",JSON.toJSONString(dto));
boolean b = payConfigManager.initAliPay(); boolean b = payConfigManager.initAliPay();
if(!b){ if(!b){
log.error("支付失败,未找到可用的支付宝配置"); log.error("支付失败,未找到可用的支付宝配置");
orderLogsService.createBaseFail(dto.getOrderNo(),"支付宝支付","支付失败,未找到可用的支付宝配置");
return R.fail(600,"支付失败!未开通支付宝支付!"); return R.fail(600,"支付失败!未开通支付宝支付!");
} }
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
@@ -121,9 +131,11 @@ public class PayController {
model.setTotalAmount(payOrderInfo.getPrice().toString()); model.setTotalAmount(payOrderInfo.getPrice().toString());
String notifyUrl = AliPayApiConfigKit.getAliPayApiConfig().getDomain(); String notifyUrl = AliPayApiConfigKit.getAliPayApiConfig().getDomain();
String orderInfo = AliPayApi.appPayToResponse(model, notifyUrl+NOTIFY_ALI_URL).getBody(); String orderInfo = AliPayApi.appPayToResponse(model, notifyUrl+NOTIFY_ALI_URL).getBody();
orderLogsService.createBaseSuccess(dto.getOrderNo(),"支付宝支付");
return R.ok(PayReturnResp.createApp(orderInfo)); return R.ok(PayReturnResp.createApp(orderInfo));
} catch (AlipayApiException e) { } catch (AlipayApiException e) {
log.error("支付宝聚合支付 使用原生支付失败! dto={}",JSON.toJSONString(dto),e); log.error("支付宝聚合支付 使用原生支付失败! dto={}",JSON.toJSONString(dto),e);
orderLogsService.createBaseFail(dto.getOrderNo(),"支付宝支付",StringUtils.cat(e.getMessage(),2000));
return R.fail("支付宝支付失败,请联系客服"); return R.fail("支付宝支付失败,请联系客服");
} }
} }
@@ -172,11 +184,13 @@ public class PayController {
String returnMsg = result.get("return_msg"); String returnMsg = result.get("return_msg");
if (!WxPayKit.codeIsOk(returnCode)) { if (!WxPayKit.codeIsOk(returnCode)) {
log.error("微信支付失败 returnMsg={}",returnMsg); log.error("微信支付失败 returnMsg={}",returnMsg);
orderLogsService.createBaseFail(dto.getOrderNo(),"微信支付",StringUtils.cat(returnMsg,2000));
return R.fail("微信支付失败,请联系客服"); return R.fail("微信支付失败,请联系客服");
} }
String resultCode = result.get("result_code"); String resultCode = result.get("result_code");
if (!WxPayKit.codeIsOk(resultCode)) { if (!WxPayKit.codeIsOk(resultCode)) {
log.error("微信支付失败 returnMsg={}",returnMsg); log.error("微信支付失败 returnMsg={}",returnMsg);
orderLogsService.createBaseFail(dto.getOrderNo(),"微信支付",StringUtils.cat(returnMsg,2000));
return R.fail("微信支付失败,请联系客服"); return R.fail("微信支付失败,请联系客服");
} }
// 以下字段在 return_code 和 result_code 都为 SUCCESS 的时候有返回 // 以下字段在 return_code 和 result_code 都为 SUCCESS 的时候有返回
@@ -187,6 +201,7 @@ public class PayController {
log.info("返回apk的参数:" + jsonStr); log.info("返回apk的参数:" + jsonStr);
PayReturnResp resp = new PayReturnResp(); PayReturnResp resp = new PayReturnResp();
resp.setData(jsonStr); resp.setData(jsonStr);
orderLogsService.createBaseSuccess(dto.getOrderNo(),"微信支付");
return R.ok(resp); return R.ok(resp);
} }

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) @TableId(value = "id",type = IdType.AUTO)
private Long id; private Long id;
private String deviceType;
/** /**
* 用户ID * 用户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.PayOrderInfoDTO;
import com.ruoyi.cai.pay.PayReturnResp; import com.ruoyi.cai.pay.PayReturnResp;
import com.ruoyi.cai.pay.PayTypeEnum; import com.ruoyi.cai.pay.PayTypeEnum;
import com.ruoyi.cai.service.OrderLogsService;
import com.ruoyi.cai.service.PayTrdConfigService; import com.ruoyi.cai.service.PayTrdConfigService;
import com.ruoyi.cai.trdpay.TrdPayManager; import com.ruoyi.cai.trdpay.TrdPayManager;
import com.ruoyi.cai.trdpay.TrdPayTypeEnum; import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
@@ -37,6 +38,8 @@ public class PayTrdConfigServiceImpl extends ServiceImpl<PayTrdConfigMapper, Pay
private TrdPayManager trdPayManager; private TrdPayManager trdPayManager;
@Autowired @Autowired
private PayManager payManager; private PayManager payManager;
@Autowired
private OrderLogsService orderLogsService;
@Override @Override
public PayReturnResp createOrderAli(PayOrderInfoDTO dto){ 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.ConsumeLogType;
import com.ruoyi.cai.enums.account.AccountChangeCodeEnum; import com.ruoyi.cai.enums.account.AccountChangeCodeEnum;
import com.ruoyi.cai.enums.account.AccountTypeEnum; import com.ruoyi.cai.enums.account.AccountTypeEnum;
import com.ruoyi.cai.enums.version.VersionPlatformEnum;
import com.ruoyi.cai.manager.IdManager; import com.ruoyi.cai.manager.IdManager;
import com.ruoyi.cai.mapper.AccountMapper; import com.ruoyi.cai.mapper.AccountMapper;
import com.ruoyi.cai.mapper.RechargeOrderMapper; import com.ruoyi.cai.mapper.RechargeOrderMapper;
import com.ruoyi.cai.pay.*; import com.ruoyi.cai.pay.*;
import com.ruoyi.cai.service.*; import com.ruoyi.cai.service.*;
import com.ruoyi.cai.util.VersionUtil;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.helper.LoginHelper;
@@ -79,6 +81,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
throw new ServiceException("充值价格错误"); throw new ServiceException("充值价格错误");
} }
RechargeOrder order = new RechargeOrder(); RechargeOrder order = new RechargeOrder();
order.setDeviceType(VersionUtil.getVersionPlatformString());
order.setUserId(addRechargeOrderDto.getUserId()); order.setUserId(addRechargeOrderDto.getUserId());
order.setRechargeId(goods.getId()); order.setRechargeId(goods.getId());
order.setRechargeName(goods.getName()); 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.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.cai.domain.Account; import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.domain.OrderLogs;
import com.ruoyi.cai.domain.PayTrdConfig; import com.ruoyi.cai.domain.PayTrdConfig;
import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.pay.PayOrderInfoDTO; import com.ruoyi.cai.pay.PayOrderInfoDTO;
import com.ruoyi.cai.service.AccountService; import com.ruoyi.cai.service.AccountService;
import com.ruoyi.cai.service.OrderLogsService;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ServletUtils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -78,14 +81,14 @@ public class TrdPayManager {
String url = createOrderUrl + "?" + para; String url = createOrderUrl + "?" + para;
String body = restTemplate.getForEntity(url, String.class).getBody(); String body = restTemplate.getForEntity(url, String.class).getBody();
JSONObject jsonObject = JSON.parseObject(body); JSONObject jsonObject = JSON.parseObject(body);
if(jsonObject == null){
log.error("第三方支付失败 返回数据为空");
throw new ServiceException("调用支付失败");
}
log.info("第三方支付成功 URL={}, body={}",url, body); log.info("第三方支付成功 URL={}, body={}",url, body);
orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(),url,jsonObject,typeEnum);
return jsonObject; return jsonObject;
} }
@Autowired
private OrderLogsService orderLogsService;
@Autowired @Autowired
private AccountService accountService; private AccountService accountService;
@Autowired @Autowired

View File

@@ -21,6 +21,26 @@ public class VersionUtil {
return VersionPlatformEnum.ANDROID; 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) { public static int compareVersion(String v1, String v2) {
String[] ss1 = v1.split("\\."), ss2 = v2.split("\\."); String[] ss1 = v1.split("\\."), ss2 = v2.split("\\.");
int n = ss1.length, m = ss2.length; 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>

View File

@@ -322,4 +322,15 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public static String cat(String str,Integer num){
if(str == null){
return str;
}
if(str.length() < num){
return str;
}
return str.substring(0,num);
}
} }