mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2025-01-31 17:40:05 +08:00
code review:调整操作日志的封装
This commit is contained in:
commit
1b9a3f9f63
@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.promotion.api.combination;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationActivityUpdateStockReqDTO;
|
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationActivityUpdateStockReqDTO;
|
||||||
import cn.iocoder.yudao.module.promotion.service.combination.CombinationActivityService;
|
import cn.iocoder.yudao.module.promotion.service.combination.CombinationActivityService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
@ -10,6 +12,8 @@ import javax.annotation.Resource;
|
|||||||
*
|
*
|
||||||
* @author HUIHUI
|
* @author HUIHUI
|
||||||
*/
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
public class CombinationApiImpl implements CombinationApi {
|
public class CombinationApiImpl implements CombinationApi {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
|
@ -22,6 +22,7 @@ import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationActivi
|
|||||||
import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationProductMapper;
|
import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationProductMapper;
|
||||||
import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
|
import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
|
||||||
import cn.iocoder.yudao.module.trade.api.order.TradeOrderApi;
|
import cn.iocoder.yudao.module.trade.api.order.TradeOrderApi;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@ -52,7 +53,9 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic
|
|||||||
private CombinationActivityMapper combinationActivityMapper;
|
private CombinationActivityMapper combinationActivityMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private CombinationProductMapper combinationProductMapper;
|
private CombinationProductMapper combinationProductMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
|
@Lazy // TODO @puhui999:我感觉 validateCombination 可以挪到 CombinationRecordServiceImpl 中,因为它更偏向能不能创建拼团记录;
|
||||||
private CombinationRecordService combinationRecordService;
|
private CombinationRecordService combinationRecordService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.enums.order;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单操作类型的枚举
|
||||||
|
*
|
||||||
|
* @author 陈賝
|
||||||
|
* @since 2023/7/6 15:31
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public enum TradeOrderOperateTypeEnum {
|
||||||
|
|
||||||
|
MEMBER_CREATE(1, "用户下单"),
|
||||||
|
TEST(2, "用户({nickname})做了({thing})"),
|
||||||
|
;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private final Integer type;
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private final String content;
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.trade.controller.app.order;
|
package cn.iocoder.yudao.module.trade.controller.app.order;
|
||||||
|
|
||||||
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
|
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
|
||||||
@ -11,8 +12,11 @@ import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
|
|||||||
import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
|
import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
|
||||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
|
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
|
||||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
|
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
|
||||||
|
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderOperateTypeEnum;
|
||||||
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
|
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
|
||||||
import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties;
|
import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties;
|
||||||
|
import cn.iocoder.yudao.module.trade.framework.order.core.annotations.TradeOrderLog;
|
||||||
|
import cn.iocoder.yudao.module.trade.framework.order.core.utils.TradeOrderLogUtils;
|
||||||
import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService;
|
import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService;
|
||||||
import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;
|
import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;
|
||||||
import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService;
|
import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService;
|
||||||
@ -61,7 +65,10 @@ public class AppTradeOrderController {
|
|||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@Operation(summary = "创建订单")
|
@Operation(summary = "创建订单")
|
||||||
@PreAuthenticated
|
@PreAuthenticated
|
||||||
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.TEST)
|
||||||
public CommonResult<AppTradeOrderCreateRespVO> createOrder(@RequestBody AppTradeOrderCreateReqVO createReqVO) {
|
public CommonResult<AppTradeOrderCreateRespVO> createOrder(@RequestBody AppTradeOrderCreateReqVO createReqVO) {
|
||||||
|
TradeOrderLogUtils.setOrderInfo(10L, 1, 2,
|
||||||
|
MapUtil.<String, Object>builder().put("nickname", "小明").put("thing", "种土豆").build());
|
||||||
TradeOrderDO order = tradeOrderUpdateService.createOrder(getLoginUserId(), getClientIP(), createReqVO);
|
TradeOrderDO order = tradeOrderUpdateService.createOrder(getLoginUserId(), getClientIP(), createReqVO);
|
||||||
return success(new AppTradeOrderCreateRespVO().setId(order.getId()).setPayOrderId(order.getPayOrderId()));
|
return success(new AppTradeOrderCreateRespVO().setId(order.getId()).setPayOrderId(order.getPayOrderId()));
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,81 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.dal.dataobject.order;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderOperateTypeEnum;
|
||||||
|
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单日志 DO
|
||||||
|
*
|
||||||
|
* @author 陈賝
|
||||||
|
*/
|
||||||
|
@TableName("trade_order_log")
|
||||||
|
@KeySequence("trade_order_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class TradeOrderLogDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户类型 - 系统
|
||||||
|
*
|
||||||
|
* 例如说:Job 自动过期订单时,通过系统自动操作
|
||||||
|
*/
|
||||||
|
public static final Integer USER_TYPE_SYSTEM = 0;
|
||||||
|
/**
|
||||||
|
* 用户编号 - 系统
|
||||||
|
*/
|
||||||
|
public static final Long USER_ID_SYSTEM = 0L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编号
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 用户编号
|
||||||
|
*
|
||||||
|
* 关联 AdminUserDO 的 id 字段、或者 MemberUserDO 的 id 字段
|
||||||
|
*/
|
||||||
|
private Long userId;
|
||||||
|
/**
|
||||||
|
* 用户类型
|
||||||
|
*
|
||||||
|
* 枚举 {@link UserTypeEnum}
|
||||||
|
*/
|
||||||
|
private Integer userType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单号
|
||||||
|
*
|
||||||
|
* 关联 {@link TradeOrderDO#getId()}
|
||||||
|
*/
|
||||||
|
private Long orderId;
|
||||||
|
/**
|
||||||
|
* 操作前状态
|
||||||
|
*/
|
||||||
|
private Integer beforeStatus;
|
||||||
|
/**
|
||||||
|
* 操作后状态
|
||||||
|
*/
|
||||||
|
private Integer afterStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作类型
|
||||||
|
*
|
||||||
|
* {@link TradeOrderOperateTypeEnum}
|
||||||
|
*/
|
||||||
|
private Integer operateType;
|
||||||
|
/**
|
||||||
|
* 订单日志信息
|
||||||
|
*/
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.framework.order.core.annotations;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderOperateTypeEnum;
|
||||||
|
|
||||||
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
|
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
|
||||||
|
import static java.lang.annotation.ElementType.METHOD;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易订单的操作日志 AOP 注解
|
||||||
|
*
|
||||||
|
* @author 陈賝
|
||||||
|
* @since 2023/7/6 15:37
|
||||||
|
*/
|
||||||
|
@Target({METHOD, ANNOTATION_TYPE})
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Documented
|
||||||
|
public @interface TradeOrderLog {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作类型
|
||||||
|
*/
|
||||||
|
TradeOrderOperateTypeEnum operateType();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,112 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.framework.order.core.aop;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
|
||||||
|
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderLogDO;
|
||||||
|
import cn.iocoder.yudao.module.trade.framework.order.core.annotations.TradeOrderLog;
|
||||||
|
import cn.iocoder.yudao.module.trade.service.order.TradeOrderLogService;
|
||||||
|
import cn.iocoder.yudao.module.trade.service.order.bo.logger.TradeOrderLogCreateReqBO;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.aspectj.lang.JoinPoint;
|
||||||
|
import org.aspectj.lang.annotation.AfterReturning;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
|
||||||
|
import static java.util.Collections.emptyMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易订单的操作日志的记录 AOP 切面
|
||||||
|
*
|
||||||
|
* @author 陈賝
|
||||||
|
* @since 2023/6/13 13:54
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Aspect
|
||||||
|
@Slf4j
|
||||||
|
public class TradeOrderLogAspect {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单编号
|
||||||
|
*/
|
||||||
|
private static final ThreadLocal<Long> ORDER_ID = new ThreadLocal<>();
|
||||||
|
/**
|
||||||
|
* 操作前的状态
|
||||||
|
*/
|
||||||
|
private static final ThreadLocal<Integer> BEFORE_STATUS = new ThreadLocal<>();
|
||||||
|
/**
|
||||||
|
* 操作后的状态
|
||||||
|
*/
|
||||||
|
private static final ThreadLocal<Integer> AFTER_STATUS = new ThreadLocal<>();
|
||||||
|
/**
|
||||||
|
* 拓展参数 Map,用于格式化操作内容
|
||||||
|
*/
|
||||||
|
private static final ThreadLocal<Map<String, Object>> EXTS = new ThreadLocal<>();
|
||||||
|
|
||||||
|
public TradeOrderLogAspect() {
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TradeOrderLogService orderLogService;
|
||||||
|
|
||||||
|
@AfterReturning("@annotation(orderLog)")
|
||||||
|
public void doAfterReturning(JoinPoint joinPoint, TradeOrderLog orderLog) {
|
||||||
|
try {
|
||||||
|
// 1.1 操作用户
|
||||||
|
Integer userType = getUserType();
|
||||||
|
Long userId = getUserId();
|
||||||
|
// 1.2 订单信息
|
||||||
|
Long orderId = ORDER_ID.get();
|
||||||
|
Integer beforeStatus = BEFORE_STATUS.get();
|
||||||
|
Integer afterStatus = AFTER_STATUS.get();
|
||||||
|
Map<String, Object> exts = ObjectUtil.defaultIfNull(EXTS.get(), emptyMap());
|
||||||
|
String content = StrUtil.format(orderLog.operateType().getContent(), exts);
|
||||||
|
|
||||||
|
// 2.1 记录日志
|
||||||
|
TradeOrderLogCreateReqBO createBO = new TradeOrderLogCreateReqBO()
|
||||||
|
.setUserId(userId).setUserType(userType)
|
||||||
|
.setOrderId(orderId).setBeforeStatus(beforeStatus).setAfterStatus(afterStatus)
|
||||||
|
.setOperateType(orderLog.operateType().getType()).setContent(content);
|
||||||
|
orderLogService.createOrderLog(createBO);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
// todo 芋艿:清理上下文
|
||||||
|
log.error("[doAfterReturning][orderLog({}) 订单日志错误]", toJsonString(orderLog), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得用户类型
|
||||||
|
*
|
||||||
|
* 如果没有,则约定为 {@link TradeOrderLogDO#getUserType()} 系统
|
||||||
|
*
|
||||||
|
* @return 用户类型
|
||||||
|
*/
|
||||||
|
private static Integer getUserType() {
|
||||||
|
return ObjectUtil.defaultIfNull(WebFrameworkUtils.getLoginUserType(), TradeOrderLogDO.USER_TYPE_SYSTEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得用户编号
|
||||||
|
*
|
||||||
|
* 如果没有,则约定为 {@link TradeOrderLogDO#getUserId()} 系统
|
||||||
|
*
|
||||||
|
* @return 用户类型
|
||||||
|
*/
|
||||||
|
private static Long getUserId() {
|
||||||
|
return ObjectUtil.defaultIfNull(WebFrameworkUtils.getLoginUserId(), TradeOrderLogDO.USER_ID_SYSTEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setOrderInfo(Long id, Integer beforeStatus, Integer afterStatus, Map<String, Object> exts) {
|
||||||
|
ORDER_ID.set(id);
|
||||||
|
BEFORE_STATUS.set(beforeStatus);
|
||||||
|
AFTER_STATUS.set(afterStatus);
|
||||||
|
EXTS.set(exts);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.framework.order.core.utils;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.trade.framework.order.core.aop.TradeOrderLogAspect;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易订单的操作日志 Utils
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
public class TradeOrderLogUtils {
|
||||||
|
|
||||||
|
public static void setOrderInfo(Long id, Integer beforeStatus, Integer afterStatus) {
|
||||||
|
TradeOrderLogAspect.setOrderInfo(id, beforeStatus, afterStatus, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setOrderInfo(Long id, Integer beforeStatus, Integer afterStatus,
|
||||||
|
Map<String, Object> exts) {
|
||||||
|
TradeOrderLogAspect.setOrderInfo(id, beforeStatus, afterStatus, exts);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.service.order;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.trade.service.order.bo.logger.TradeOrderLogCreateReqBO;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易下单日志 Service 接口
|
||||||
|
*
|
||||||
|
* @author 陈賝
|
||||||
|
* @since 2023/7/6 15:44
|
||||||
|
*/
|
||||||
|
public interface TradeOrderLogService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建交易下单日志
|
||||||
|
*
|
||||||
|
* @param logDTO 日志记录
|
||||||
|
* @author 陈賝
|
||||||
|
* @since 2023/7/6 15:45
|
||||||
|
*/
|
||||||
|
@Async
|
||||||
|
void createOrderLog(TradeOrderLogCreateReqBO logDTO);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.service.order;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.trade.service.order.bo.logger.TradeOrderLogCreateReqBO;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易下单日志 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 陈賝
|
||||||
|
* @since 2023/7/6 15:44
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class TradeOrderLogServiceImpl implements TradeOrderLogService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createOrderLog(TradeOrderLogCreateReqBO createReqBO) {
|
||||||
|
// TODO 芋艿:存储还没搞
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.service.order.bo.logger;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单日志的创建 Request BO
|
||||||
|
*
|
||||||
|
* @author 陈賝
|
||||||
|
* @since 2023/7/6 15:27
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class TradeOrderLogCreateReqBO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户编号
|
||||||
|
*/
|
||||||
|
@NotNull(message = "用户编号不能为空")
|
||||||
|
private Long userId;
|
||||||
|
/**
|
||||||
|
* 用户类型
|
||||||
|
*/
|
||||||
|
@NotNull(message = "用户类型不能为空")
|
||||||
|
private Integer userType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单编号
|
||||||
|
*/
|
||||||
|
@NotNull(message = "订单编号")
|
||||||
|
private Long orderId;
|
||||||
|
/**
|
||||||
|
* 操作前状态
|
||||||
|
*/
|
||||||
|
private Integer beforeStatus;
|
||||||
|
/**
|
||||||
|
* 操作后状态
|
||||||
|
*/
|
||||||
|
@NotNull(message = "操作后的状态不能为空")
|
||||||
|
private Integer afterStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作类型
|
||||||
|
*/
|
||||||
|
private Integer operateType;
|
||||||
|
/**
|
||||||
|
* 操作明细
|
||||||
|
*/
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user