提交 cc0ff0c8 authored 作者: hzh's avatar hzh

商城模块集成

上级 44629dc1
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
#FROM bellsoft/liberica-openjdk-debian:21.0.3-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
RUN mkdir -p /ruoyi/system/logs \
/ruoyi/system/temp \
/ruoyi/skywalking/agent
WORKDIR /ruoyi/system
ENV SERVER_PORT=9201 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
EXPOSE ${SERVER_PORT}
ADD ./target/ruoyi-system.jar ./app.jar
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
#-Dskywalking.agent.service_name=ruoyi-system \
#-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
-XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
-jar app.jar
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-modules</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-mall</artifactId>
<description>
ruoyi-mall商城模块
</description>
<dependencies>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-nacos</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-mall</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-yudao-mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sentinel</artifactId>
</dependency>
<!-- RuoYi Common Log -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-log</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-dict</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-doc</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-web</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-seata</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-idempotent</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-tenant</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-security</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-translation</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sensitive</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-encrypt</artifactId>
</dependency>
<!-- RuoYi Api System -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-api-system</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-api-resource</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-api-mall</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-allPay</artifactId>
</dependency>
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-core</artifactId>
<version>1.4.13</version>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-websocket</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package org.dromara.mall;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
/**
* 商城模块
*
* @author ruoyi
*/
@EnableDubbo
@SpringBootApplication
public class RuoyiMallApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(RuoyiMallApplication.class);
application.setApplicationStartup(new BufferingApplicationStartup(2048));
application.run(args);
System.out.println("(♥◠‿◠)ノ゙ 商城模块启动成功 ლ(´ڡ`ლ)゙ ");
}
}
package org.dromara.mall.dal.redis;
/**
* 交易 Redis Key 枚举类
*
* @author 芋道源码
*/
public interface RedisKeyConstants {
/**
* 交易序号的缓存
*
* KEY 格式:trade_no:{prefix}
* VALUE 数据格式:编号自增
*/
String TRADE_NO = "trade_no:";
/**
* 交易序号的缓存
*
* KEY 格式:express_track:{code-logisticsNo-receiverMobile}
* VALUE 数据格式 String, 物流信息集合
*/
String EXPRESS_TRACK = "express_track";
}
package org.dromara.mall.dal.redis.no;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import jakarta.annotation.Resource;
import org.dromara.mall.dal.redis.RedisKeyConstants;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Repository;
import java.time.Duration;
import java.time.LocalDateTime;
/**
* 订单序号的 Redis DAO
*
* @author HUIHUI
*/
@Repository
public class TradeNoRedisDAO {
public static final String TRADE_ORDER_NO_PREFIX = "o";
public static final String AFTER_SALE_NO_PREFIX = "r";
@Resource
private StringRedisTemplate stringRedisTemplate;
/**
* 生成序号
*
* @param prefix 前缀
* @return 序号
*/
public String generate(String prefix) {
// 递增序号
String noPrefix = prefix + DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN);
String key = RedisKeyConstants.TRADE_NO + noPrefix;
Long no = stringRedisTemplate.opsForValue().increment(key);
// 设置过期时间
stringRedisTemplate.expire(key, Duration.ofMinutes(1L));
return noPrefix + no;
}
}
package org.dromara.mall.domain.member;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 用户收件地址对象 member_address
*
* @author hzh
* @date 2025-01-21
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("member_address")
public class MemberAddressDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 收件地址编号
*/
@TableId(value = "id")
private Long id;
/**
* 用户编号
*/
private Long userId;
/**
* 收件人名称
*/
private String name;
/**
* 手机号
*/
private String mobile;
/**
* 地区编号
*/
private Long areaId;
/**
* 收件详细地址
*/
private String detailAddress;
/**
* 是否默认
*
* true - 默认收件地址
*/
private Boolean defaultStatus;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.member;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 会员配置对象 member_config
*
* @author hzh
* @date 2025-01-21
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("member_config")
public class MemberConfigDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 自增主键
*/
@TableId(value = "id")
private Long id;
/**
* 积分抵扣开关
*/
private Boolean pointTradeDeductEnable;
/**
* 积分抵扣,单位:分
*
* 1 积分抵扣多少分
*/
private Integer pointTradeDeductUnitPrice;
/**
* 积分抵扣最大值
*/
private Integer pointTradeDeductMaxPrice;
/**
* 1 元赠送多少分
*/
private Integer pointTradeGivePoint;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.member;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 会员经验记录对象 member_experience_record
*
* @author hzh
* @date 2025-01-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("member_experience_record")
public class MemberExperienceRecordDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 用户编号
*
* 关联 {@link MemberUserDO#getId()} 字段
*/
private Long userId;
/**
* 业务类型
* <p>
* 枚举 {@link MemberExperienceBizTypeEnum}
*/
private Integer bizType;
/**
* 业务编号
*/
private String bizId;
/**
* 标题
*/
private String title;
/**
* 描述
*/
private String description;
/**
* 经验
*/
private Integer experience;
/**
* 变更后的经验
*/
private Integer totalExperience;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.member;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 用户分组对象 member_group
*
* @author hzh
* @date 2025-01-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("member_group")
public class MemberGroupDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 名称
*/
private String name;
/**
* 备注
*/
private String remark;
/**
* 状态
* <p>
* 枚举 {@link org.dromara.common.core.enums.CommonStatusEnum}
*/
private Integer status;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.member;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 会员等级对象 member_level
*
* @author hzh
* @date 2025-01-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("member_level")
public class MemberLevelDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 等级名称
*/
private String name;
/**
* 等级
*/
private Integer level;
/**
* 升级经验
*/
private Integer experience;
/**
* 享受折扣
*/
private Integer discountPercent;
/**
* 等级图标
*/
private String icon;
/**
* 等级背景图
*/
private String backgroundUrl;
/**
* 状态
* <p>
* 枚举 {@link org.dromara.common.core.enums.CommonStatusEnum}
*/
private Integer status;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.member;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
/**
* 会员等级记录对象 member_level_record
*
* @author hzh
* @date 2025-01-21
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("member_level_record")
public class MemberLevelRecordDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 用户编号
*
* 关联 {@link MemberUserDO#getId()} 字段
*/
private Long userId;
/**
* 等级编号
*
* 关联 {@link MemberLevelDO#getId()} 字段
*/
private Long levelId;
/**
* 会员等级
*
* 冗余 {@link MemberLevelDO#getLevel()} 字段
*/
private Integer level;
/**
* 享受折扣
*/
private Integer discountPercent;
/**
* 升级经验
*/
private Integer experience;
/**
* 会员此时的经验
*/
private Integer userExperience;
/**
* 备注
*/
private String remark;
/**
* 描述
*/
private String description;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.member;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
/**
* 用户积分记录对象 member_point_record
*
* @author hzh
* @date 2025-01-21
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("member_point_record")
public class MemberPointRecordDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 自增主键
*/
@TableId(value = "id")
private Long id;
/**
* 用户编号
*
* 对应 MemberUserDO 的 id 属性
*/
private Long userId;
/**
* 业务编码
*/
private String bizId;
/**
* 业务类型
*
* 枚举 {@link MemberPointBizTypeEnum}
*/
private Integer bizType;
/**
* 积分标题
*/
private String title;
/**
* 积分描述
*/
private String description;
/**
* 变动积分
*
* 1、正数表示获得积分
* 2、负数表示消耗积分
*/
private Integer point;
/**
* 变动后的积分
*/
private Integer totalPoint;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.member;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 签到规则对象 member_sign_in_config
*
* @author hzh
* @date 2025-01-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("member_sign_in_config")
public class MemberSignInConfigDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 签到第 x 天
*/
private Integer day;
/**
* 奖励积分
*/
private Integer point;
/**
* 奖励经验
*/
private Integer experience;
/**
* 状态
*
* 枚举 {@link org.dromara.common.core.enums.CommonStatusEnum}
*/
private Integer status;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.member;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 签到记录对象 member_sign_in_record
*
* @author hzh
* @date 2025-01-21
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("member_sign_in_record")
public class MemberSignInRecordDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 签到自增id
*/
@TableId(value = "id")
private Long id;
/**
* 签到用户
*/
private Long userId;
/**
* 第几天签到
*/
private Integer day;
/**
* 签到的积分
*/
private Integer point;
/**
* 签到的经验
*/
private Integer experience;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.member;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 会员标签对象 member_tag
*
* @author hzh
* @date 2025-01-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("member_tag")
public class MemberTagDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 标签名称
*/
private String name;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.member;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mybatis.core.type.LongListTypeHandler;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.mall.enums.system.common.SexEnum;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import java.io.Serial;
import java.time.LocalDateTime;
import java.util.List;
/**
* 会员用户对象 member_user
*
* @author hzh
* @date 2025-01-21
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("member_user")
public class MemberUserDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 第三方用户ID
*/
private Long thirdUserId;
/**
* 手机
*/
private String mobile;
/**
* 加密后的密码
* <p>
* 因为目前使用 {@link BCryptPasswordEncoder} 加密器,所以无需自己处理 salt 盐
*/
private String password;
/**
* 帐号状态
*
* 枚举 {@link org.dromara.common.mall.enums.CommonStatusEnum}
*/
private Integer status;
/**
* 注册 IP
*/
private String registerIp;
/**
* 注册终端
* 枚举 {@link org.dromara.common.mall.enums.TerminalEnum}
*/
private Integer registerTerminal;
/**
* 最后登录IP
*/
private String loginIp;
/**
* 最后登录时间
*/
private LocalDateTime loginDate;
// ========== 基础信息 ==========
/**
* 用户昵称
*/
private String nickname;
/**
* 用户头像
*/
private String avatar;
/**
* 真实名字
*/
private String name;
/**
* 性别
*
* 枚举 {@link SexEnum}
*/
private Integer sex;
/**
* 出生日期
*/
private LocalDateTime birthday;
/**
* 所在地
*
* 关联 {@link Area#getId()} 字段
*/
private Integer areaId;
/**
* 用户备注
*/
private String mark;
// ========== 其它信息 ==========
/**
* 积分
*/
private Integer point;
// TODO 疯狂:增加一个 totalPoint;个人信息接口要返回
/**
* 会员标签列表,以逗号分隔
*/
@TableField(typeHandler = LongListTypeHandler.class)
private List<Long> tagIds;
/**
* 会员级别编号
*
* 关联 {@link MemberLevelDO#getId()} 字段
*/
private Long levelId;
/**
* 会员经验
*/
private Integer experience;
/**
* 用户分组编号
*
* 关联 {@link MemberGroupDO#getId()} 字段
*/
private Long groupId;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 支付应用信息对象 pay_app
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pay_app")
public class PayAppDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 应用编号
*/
@TableId(value = "id")
private Long id;
/**
* 应用标识
*/
private String appKey;
/**
* 应用名
*/
private String name;
/**
* 状态
*
* 枚举 {@link org.dromara.common.core.enums.CommonStatusEnum}
*/
private Integer status;
/**
* 备注
*/
private String remark;
/**
* 支付结果的回调地址
*/
private String orderNotifyUrl;
/**
* 退款结果的回调地址
*/
private String refundNotifyUrl;
/**
* 转账结果的回调地址
*/
private String transferNotifyUrl;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.pay.core.client.PayClientConfig;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
/**
* 支付渠道
对象 pay_channel
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName(value = "pay_channel", autoResultMap = true)
public class PayChannelDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 商户编号
*/
@TableId(value = "id")
private Long id;
/**
* 渠道编码
*
* 枚举 {@link org.dromara.common.pay.core.enums.channel.PayChannelEnum}
*/
private String code;
/**
* 状态
*
* 枚举 {@link org.dromara.common.mall.enums.CommonStatusEnum}
*/
private Integer status;
/**
* 渠道费率,单位:百分比
*/
private Double feeRate;
/**
* 备注
*/
private String remark;
/**
* 应用编号
*
* 关联 {@link PayAppDO#getId()}
*/
private Long appId;
/**
* 支付渠道配置
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private PayClientConfig config;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 示例订单
对象 pay_demo_order
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pay_demo_order")
public class PayDemoOrderDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 订单编号
*/
@TableId(value = "id")
private Long id;
/**
* 用户编号
*/
private Long userId;
/**
* 商品编号
*/
private Long spuId;
/**
* 商品名称
*/
private String spuName;
/**
* 价格,单位:分
*/
private Integer price;
// ========== 支付相关字段 ==========
/**
* 是否支付
*/
private Boolean payStatus;
/**
* 支付订单编号
*
* 对接 pay-module-biz 支付服务的支付订单编号,即 PayOrderDO 的 id 编号
*/
private Long payOrderId;
/**
* 付款时间
*/
private LocalDateTime payTime;
/**
* 支付渠道
*
* 对应 PayChannelEnum 枚举
*/
private String payChannelCode;
// ========== 退款相关字段 ==========
/**
* 支付退款单号
*/
private Long payRefundId;
/**
* 退款金额,单位:分
*/
private Integer refundPrice;
/**
* 退款完成时间
*/
private LocalDateTime refundTime;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.pay.core.enums.transfer.PayTransferTypeEnum;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 示例业务转账订单对象 pay_demo_transfer
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pay_demo_transfer")
public class PayDemoTransferDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 订单编号
*/
@TableId(value = "id")
private Long id;
/**
* 应用编号
*
* 关联 {@link PayAppDO#getId()}
*/
private Long appId;
/**
* 转账类型
* <p>
* 枚举 {@link PayTransferTypeEnum}
*/
private Integer type;
/**
* 转账金额,单位:分
*/
private Integer price;
/**
* 收款人姓名
*/
private String userName;
/**
* 支付宝登录号
*/
private String alipayLogonId;
/**
* 微信 openId
*/
private String openid;
/**
* 转账状态
*/
private Integer transferStatus;
/**
* 转账单编号
*/
private Long payTransferId;
/**
* 转账支付成功渠道
*/
private String payChannelCode;
/**
* 转账支付时间
*/
private LocalDateTime transferTime;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.mall.enums.pay.notify.PayNotifyStatusEnum;
import java.io.Serial;
/**
* 支付通知 App 的日志对象 pay_notify_log
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pay_notify_log")
public class PayNotifyLogDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 日志编号
*/
@TableId(value = "id")
private Long id;
/**
* 通知任务编号
*
* 关联 {@link PayNotifyTaskDO#getId()}
*/
private Long taskId;
/**
* 第几次被通知
*
* 对应到 {@link PayNotifyTaskDO#getNotifyTimes()}
*/
private Integer notifyTimes;
/**
* HTTP 响应结果
*/
private String response;
/**
* 支付通知状态
*
* 外键 {@link PayNotifyStatusEnum}
*/
private Integer status;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.mall.enums.pay.notify.PayNotifyStatusEnum;
import org.dromara.mall.enums.pay.notify.PayNotifyTypeEnum;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 商户支付、退款等的通知
对象 pay_notify_task
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pay_notify_task")
public class PayNotifyTaskDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 通知频率,单位为秒。
*
* 算上首次的通知,实际是一共 1 + 8 = 9 次。
*/
public static final Integer[] NOTIFY_FREQUENCY = new Integer[]{
15, 15, 30, 180,
1800, 1800, 1800, 3600
};
/**
* 任务编号
*/
@TableId(value = "id")
private Long id;
/**
* 应用编号
*
* 关联 {@link PayAppDO#getId()}
*/
private Long appId;
/**
* 通知类型
*
* 外键 {@link PayNotifyTypeEnum}
*/
private Integer type;
/**
* 数据编号,根据不同 type 进行关联:
*
* 1. {@link PayNotifyTypeEnum#ORDER} 时,关联 {@link PayOrderDO#getId()}
* 2. {@link PayNotifyTypeEnum#REFUND} 时,关联 {@link PayRefundDO#getId()}
*/
private Long dataId;
/**
* 商户订单编号
*/
private String merchantOrderId;
/**
* 商户转账单编号
*/
private String merchantTransferId;
/**
* 通知状态
*
* 外键 {@link PayNotifyStatusEnum}
*/
private Integer status;
/**
* 下一次通知时间
*/
private LocalDateTime nextNotifyTime;
/**
* 最后一次执行时间
*/
private LocalDateTime lastExecuteTime;
/**
* 当前通知次数
*/
private Integer notifyTimes;
/**
* 最大可通知次数
*/
private Integer maxNotifyTimes;
/**
* 通知地址
*/
private String notifyUrl;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.pay.core.enums.channel.PayChannelEnum;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.mall.enums.pay.order.PayOrderStatusEnum;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 支付订单
对象 pay_order
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pay_order")
public class PayOrderDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 支付订单编号
*/
@TableId(value = "id")
private Long id;
/**
* 应用编号
*
* 关联 {@link PayAppDO#getId()}
*/
private Long appId;
/**
* 渠道编号
*
* 关联 {@link PayChannelDO#getId()}
*/
private Long channelId;
/**
* 渠道编码
*
* 枚举 {@link PayChannelEnum}
*/
private String channelCode;
// ========== 商户相关字段 ==========
/**
* 商户订单编号
*
* 例如说,内部系统 A 的订单号,需要保证每个 PayAppDO 唯一
*/
private String merchantOrderId;
/**
* 商品标题
*/
private String subject;
/**
* 商品描述信息
*/
private String body;
/**
* 异步通知地址
*/
private String notifyUrl;
// ========== 订单相关字段 ==========
/**
* 支付金额,单位:分
*/
private Integer price;
/**
* 渠道手续费,单位:百分比
*
* 冗余 {@link PayChannelDO#getFeeRate()}
*/
private Double channelFeeRate;
/**
* 渠道手续金额,单位:分
*/
private Integer channelFeePrice;
/**
* 支付状态
*
* 枚举 {@link PayOrderStatusEnum}
*/
private Integer status;
/**
* 用户 IP
*/
private String userIp;
/**
* 订单失效时间
*/
private LocalDateTime expireTime;
/**
* 订单支付成功时间
*/
private LocalDateTime successTime;
/**
* 支付成功的订单拓展单编号
*
* 关联 {@link PayOrderExtensionDO#getId()}
*/
private Long extensionId;
/**
* 支付成功的外部订单号
*
* 关联 {@link PayOrderExtensionDO#getNo()}
*/
private String no;
// ========== 退款相关字段 ==========
/**
* 退款总金额,单位:分
*/
private Integer refundPrice;
// ========== 渠道相关字段 ==========
/**
* 渠道用户编号
*
* 例如说,微信 openid、支付宝账号
*/
private String channelUserId;
/**
* 渠道订单号
*/
private String channelOrderNo;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.mall.enums.pay.order.PayOrderStatusEnum;
import java.io.Serial;
import java.util.Map;
/**
* 支付订单
对象 pay_order_extension
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName(value = "pay_order_extension", autoResultMap = true)
public class PayOrderExtensionDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 支付订单编号
*/
@TableId(value = "id")
private Long id;
/**
* 外部订单号,根据规则生成
*
* 调用支付渠道时,使用该字段作为对接的订单号:
* 1. 微信支付:对应 <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml">JSAPI 支付</a> 的 out_trade_no 字段
* 2. 支付宝支付:对应 <a href="https://opendocs.alipay.com/open/270/105898">电脑网站支付</a> 的 out_trade_no 字段
*
* 例如说,P202110132239124200055
*/
private String no;
/**
* 订单号
*
* 关联 {@link PayOrderDO#getId()}
*/
private Long orderId;
/**
* 渠道编号
*
* 关联 {@link PayChannelDO#getId()}
*/
private Long channelId;
/**
* 渠道编码
*/
private String channelCode;
/**
* 用户 IP
*/
private String userIp;
/**
* 支付状态
*
* 枚举 {@link PayOrderStatusEnum}
*/
private Integer status;
/**
* 支付渠道的额外参数
*
* 参见 <a href="https://www.pingxx.com/api/支付渠道%20extra%20参数说明.html">参数说明</>
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private Map<String, String> channelExtras;
/**
* 调用渠道的错误码
*/
private String channelErrorCode;
/**
* 调用渠道报错时,错误信息
*/
private String channelErrorMsg;
/**
* 支付渠道的同步/异步通知的内容
*
* 对应 {@link org.dromara.mall.api.dto.pay.PayOrderRespDTO#getRawData()}
*/
private String channelNotifyData;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.pay.core.enums.channel.PayChannelEnum;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.mall.enums.pay.refund.PayRefundStatusEnum;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 退款订单对象 pay_refund
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pay_refund")
public class PayRefundDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 支付退款编号
*/
@TableId(value = "id")
private Long id;
/**
* 外部退款号,根据规则生成
*
* 调用支付渠道时,使用该字段作为对接的退款号:
* 1. 微信退款:对应 <a href="https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_4">申请退款</a> 的 out_refund_no 字段
* 2. 支付宝退款:对应 <a href="https://opendocs.alipay.com/open/02e7go"统一收单交易退款接口></a> 的 out_request_no 字段
*/
private String no;
/**
* 应用编号
*
* 关联 {@link PayAppDO#getId()}
*/
private Long appId;
/**
* 渠道编号
*
* 关联 {@link PayChannelDO#getId()}
*/
private Long channelId;
/**
* 渠道编码
*
* 枚举 {@link PayChannelEnum}
*/
private String channelCode;
/**
* 订单编号
*
* 关联 {@link PayOrderDO#getId()}
*/
private Long orderId;
/**
* 支付订单编号
*
* 冗余 {@link PayOrderDO#getNo()}
*/
private String orderNo;
// ========== 商户相关字段 ==========
/**
* 商户订单编号
*
* 例如说,内部系统 A 的订单号,需要保证每个 PayAppDO 唯一
*/
private String merchantOrderId;
/**
* 商户退款订单号
*
* 例如说,内部系统 A 的订单号,需要保证每个 PayAppDO 唯一
*/
private String merchantRefundId;
/**
* 异步通知地址
*/
private String notifyUrl;
// ========== 退款相关字段 ==========
/**
* 退款状态
*
* 枚举 {@link PayRefundStatusEnum}
*/
private Integer status;
/**
* 支付金额,单位:分
*/
private Integer payPrice;
/**
* 退款金额,单位:分
*/
private Integer refundPrice;
/**
* 退款原因
*/
private String reason;
/**
* 用户 IP
*/
private String userIp;
// ========== 渠道相关字段 ==========
/**
* 渠道订单号
*
* 冗余 {@link PayOrderDO#getChannelOrderNo()}
*/
private String channelOrderNo;
/**
* 渠道退款单号
*
* 1. 微信退款:对应 <a href="https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_4">申请退款</a> 的 refund_id 字段
* 2. 支付宝退款:没有字段
*/
private String channelRefundNo;
/**
* 退款成功时间
*/
private LocalDateTime successTime;
/**
* 调用渠道的错误码
*/
private String channelErrorCode;
/**
* 调用渠道的错误提示
*/
private String channelErrorMsg;
/**
* 支付渠道的同步/异步通知的内容
*
* 对应 {@link org.dromara.common.pay.core.client.dto.refund.PayRefundRespDTO#getRawData()}
*/
private String channelNotifyData;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.pay.core.enums.channel.PayChannelEnum;
import org.dromara.common.pay.core.enums.transfer.PayTransferStatusRespEnum;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
import java.util.Map;
/**
* 转账单对象 pay_transfer
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName(value = "pay_transfer", autoResultMap = true)
public class PayTransferDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 转账单号
*
*/
private String no;
/**
* 应用编号
*
* 关联 {@link PayAppDO#getId()}
*/
private Long appId;
/**
* 转账渠道编号
*
* 关联 {@link PayChannelDO#getId()}
*/
private Long channelId;
/**
* 转账渠道编码
*
* 枚举 {@link PayChannelEnum}
*/
private String channelCode;
// ========== 商户相关字段 ==========
/**
* 商户转账单编号
*
* 例如说,内部系统 A 的订单号,需要保证每个 PayAppDO 唯一
*/
private String merchantTransferId;
// ========== 转账相关字段 ==========
/**
* 类型
*
* 枚举 {@link org.dromara.common.pay.core.enums.transfer.PayTransferTypeEnum}
*/
private Integer type;
/**
* 转账标题
*/
private String subject;
/**
* 转账金额,单位:分
*/
private Integer price;
/**
* 收款人姓名
*/
private String userName;
/**
* 转账状态
*
* 枚举 {@link PayTransferStatusRespEnum}
*/
private Integer status;
/**
* 订单转账成功时间
*/
private LocalDateTime successTime;
// ========== 支付宝转账相关字段 ==========
/**
* 支付宝登录号
*/
private String alipayLogonId;
// ========== 微信转账相关字段 ==========
/**
* 微信 openId
*/
private String openid;
// ========== 其它字段 ==========
/**
* 异步通知地址
*/
private String notifyUrl;
/**
* 用户 IP
*/
private String userIp;
/**
* 渠道的额外参数
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private Map<String, String> channelExtras;
/**
* 渠道转账单号
*/
private String channelTransferNo;
/**
* 调用渠道的错误码
*/
private String channelErrorCode;
/**
* 调用渠道的错误提示
*/
private String channelErrorMsg;
/**
* 渠道的同步/异步通知的内容
*
*/
private String channelNotifyData;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
/**
* 会员钱包对象 pay_wallet
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pay_wallet")
public class PayWalletDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 用户 id
*
* 关联 MemberUserDO 的 id 编号
* 关联 AdminUserDO 的 id 编号
*/
private Long userId;
/**
* 用户类型, 预留 多商户转帐可能需要用到
*
* 关联 {@link org.dromara.common.mall.enums.UserTypeEnum}
*/
private Integer userType;
/**
* 余额,单位分
*/
private Integer balance;
/**
* 冻结金额,单位分
*/
private Integer freezePrice;
/**
* 累计支出,单位分
*/
private Integer totalExpense;
/**
* 累计充值,单位分
*/
private Integer totalRecharge;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.mall.enums.pay.refund.PayRefundStatusEnum;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 会员钱包充值对象 pay_wallet_recharge
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pay_wallet_recharge")
public class PayWalletRechargeDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 钱包编号
*
* 关联 {@link PayWalletDO#getId()}
*/
private Long walletId;
/**
* 用户实际到账余额
*
* 例如充 100 送 20,则该值是 120
*/
private Integer totalPrice;
/**
* 实际支付金额
*/
private Integer payPrice;
/**
* 钱包赠送金额
*/
private Integer bonusPrice;
/**
* 充值套餐编号
*
* 关联 {@link PayWalletRechargeDO#getPackageId()} 字段
*/
private Long packageId;
/**
* 是否已支付
*
* true - 已支付
* false - 未支付
*/
private Boolean payStatus;
/**
* 支付订单编号
*
* 关联 {@link PayOrderDO#getId()}
*/
private Long payOrderId;
/**
* 支付成功的支付渠道
*
* 冗余 {@link PayOrderDO#getChannelCode()}
*/
private String payChannelCode;
/**
* 订单支付时间
*/
private LocalDateTime payTime;
/**
* 支付退款单编号
*
* 关联 {@link PayRefundDO#getId()}
*/
private Long payRefundId;
/**
* 退款金额,包含赠送金额
*/
private Integer refundTotalPrice;
/**
* 退款支付金额
*/
private Integer refundPayPrice;
/**
* 退款钱包赠送金额
*/
private Integer refundBonusPrice;
/**
* 退款时间
*/
private LocalDateTime refundTime;
/**
* 退款状态
*
* 枚举 {@link PayRefundStatusEnum}
*/
private Integer refundStatus;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 充值套餐对象 pay_wallet_recharge_package
*
* @author hzh
* @date 2025-01-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pay_wallet_recharge_package")
public class PayWalletRechargePackageDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 套餐名
*/
private String name;
/**
* 支付金额
*/
private Integer payPrice;
/**
* 赠送金额
*/
private Integer bonusPrice;
/**
* 状态
*
* 枚举 {@link org.dromara.common.core.enums.CommonStatusEnum}
*/
private Integer status;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.pay;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 会员钱包流水对象 pay_wallet_transaction
*
* @author hzh
* @date 2025-01-22
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pay_wallet_transaction")
public class PayWalletTransactionDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 流水号
*/
private String no;
/**
* 钱包编号
*
* 关联 {@link PayWalletDO#getId()}
*/
private Long walletId;
/**
* 关联业务分类
*
* 枚举 {@link org.dromara.mall.enums.pay.wallet.PayWalletBizTypeEnum#getType()}
*/
private Integer bizType;
/**
* 关联业务编号
*/
private String bizId;
/**
* 流水说明
*/
private String title;
/**
* 交易金额,单位分
*
* 正值表示余额增加,负值表示余额减少
*/
private Integer price;
/**
* 交易后余额,单位分
*/
private Integer balance;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.product;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 商品品牌对象 product_brand
*
* @author hzh
* @date 2025-01-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("product_brand")
public class ProductBrandDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 品牌编号
*/
@TableId(value = "id")
private Long id;
/**
* 品牌名称
*/
private String name;
/**
* 品牌图片
*/
private String picUrl;
/**
* 品牌排序
*/
private Integer sort;
/**
* 品牌描述
*/
private String description;
/**
* 状态
*
* 枚举 {@link org.dromara.common.core.enums.CommonStatusEnum}
*/
private Integer status;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.product;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 商品浏览记录对象 product_browse_history
*
* @author hzh
* @date 2025-01-20
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("product_browse_history")
public class ProductBrowseHistoryDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 记录编号
*/
@TableId(value = "id")
private Long id;
/**
* 商品 SPU 编号
*/
private Long spuId;
/**
* 用户编号
*/
private Long userId;
/**
* 用户是否删除
*/
private Boolean userDeleted;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.product;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 商品分类对象 product_category
*
* @author hzh
* @date 2025-01-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("product_category")
public class ProductCategoryDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 父分类编号 - 根分类
*/
public static final Long PARENT_ID_NULL = 0L;
/**
* 限定分类层级
*/
public static final int CATEGORY_LEVEL = 2;
/**
* 分类编号
*/
@TableId(value = "id")
private Long id;
/**
* 父分类编号
*/
private Long parentId;
/**
* 分类名称
*/
private String name;
/**
* 移动端分类图
*
* 建议 180*180 分辨率
*/
private String picUrl;
/**
* 分类排序
*/
private Integer sort;
/**
* 开启状态
*
* 枚举 {@link org.dromara.common.core.enums.CommonStatusEnum}
*/
private Integer status;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.product;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
import java.util.List;
/**
* 商品评论对象 product_comment
*
* @author hzh
* @date 2025-01-20
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName(value = "product_comment", autoResultMap = true)
public class ProductCommentDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 默认匿名昵称
*/
public static final String NICKNAME_ANONYMOUS = "匿名用户";
/**
* 评论编号,主键自增
*/
@TableId(value = "id")
private Long id;
/**
* 评价人的用户编号
*
* 关联 MemberUserDO 的 id 编号
*/
private Long userId;
/**
* 评价人名称
*/
private String userNickname;
/**
* 评价人头像
*/
private String userAvatar;
/**
* 是否匿名
*/
private Boolean anonymous;
/**
* 交易订单编号
*
* 关联 TradeOrderDO 的 id 编号
*/
private Long orderId;
/**
* 交易订单项编号
*
* 关联 TradeOrderItemDO 的 id 编号
*/
private Long orderItemId;
/**
* 商品 SPU 编号
*
* 关联 {@link ProductSpuDO#getId()}
*/
private Long spuId;
/**
* 商品 SPU 名称
*
* 关联 {@link ProductSpuDO#getName()}
*/
private String spuName;
/**
* 商品 SKU 编号
*
* 关联 {@link ProductSkuDO#getId()}
*/
private Long skuId;
/**
* 商品 SKU 图片地址
*
* 关联 {@link ProductSkuDO#getPicUrl()}
*/
private String skuPicUrl;
/**
* 属性数组,JSON 格式
*
* 关联 {@link ProductSkuDO#getProperties()}
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<ProductSkuDO.Property> skuProperties;
/**
* 是否可见
*
* true:显示
* false:隐藏
*/
private Boolean visible;
/**
* 评分星级
*
* 1-5 分
*/
private Integer scores;
/**
* 描述星级
*
* 1-5 星
*/
private Integer descriptionScores;
/**
* 服务星级
*
* 1-5 星
*/
private Integer benefitScores;
/**
* 评论内容
*/
private String content;
/**
* 评论图片地址数组
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<String> picUrls;
/**
* 商家是否回复
*/
private Boolean replyStatus;
/**
* 回复管理员编号
* 关联 AdminUserDO 的 id 编号
*/
private Long replyUserId;
/**
* 商家回复内容
*/
private String replyContent;
/**
* 商家回复时间
*/
private LocalDateTime replyTime;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.product;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 商品收藏对象 product_favorite
*
* @author hzh
* @date 2025-01-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("product_favorite")
public class ProductFavoriteDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 收藏编号
*/
@TableId(value = "id")
private Long id;
/**
* 用户编号
*
* 关联 MemberUserDO 的 id 编号
*/
private Long userId;
/**
* 商品 SPU 编号
*
* 关联 {@link ProductSpuDO#getId()}
*/
private Long spuId;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.product;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 商品属性项对象 product_property
*
* @author hzh
* @date 2025-01-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("product_property")
public class ProductPropertyDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* SPU 单规格时,默认属性 id
*/
public static final Long ID_DEFAULT = 0L;
/**
* SPU 单规格时,默认属性名字
*/
public static final String NAME_DEFAULT = "默认";
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 名称
*/
private String name;
/**
* 备注
*/
private String remark;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.product;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 商品属性值对象 product_property_value
*
* @author hzh
* @date 2025-01-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("product_property_value")
public class ProductPropertyValueDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* SPU 单规格时,默认属性值 id
*/
public static final Long ID_DEFAULT = 0L;
/**
* SPU 单规格时,默认属性值名字
*/
public static final String NAME_DEFAULT = "默认";
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 属性项的编号
*
* 关联 {@link ProductPropertyDO#getId()}
*/
private Long propertyId;
/**
* 名称
*/
private String name;
/**
* 备注
*
*/
private String remark;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.product;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.util.List;
/**
* 商品sku对象 product_sku
*
* @author hzh
* @date 2025-01-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "product_sku", autoResultMap = true)
public class ProductSkuDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* SPU 编号
*
* 关联 {@link ProductSpuDO#getId()}
*/
private Long spuId;
/**
* 属性数组,JSON 格式
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<Property> properties;
/**
* 商品价格,单位:分
*/
private Integer price;
/**
* 市场价,单位:分
*/
private Integer marketPrice;
/**
* 成本价,单位:分
*/
private Integer costPrice;
/**
* 商品条码
*/
private String barCode;
/**
* 图片地址
*/
private String picUrl;
/**
* 库存
*/
private Integer stock;
/**
* 商品重量,单位:kg 千克
*/
private Double weight;
/**
* 商品体积,单位:m^3 平米
*/
private Double volume;
/**
* 一级分销的佣金,单位:分
*/
private Integer firstBrokeragePrice;
/**
* 二级分销的佣金,单位:分
*/
private Integer secondBrokeragePrice;
// ========== 营销相关字段 =========
// ========== 统计相关字段 =========
/**
* 商品销量
*/
private Integer salesCount;
/**
* 商品属性
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Property {
/**
* 属性编号
* 关联 {@link ProductPropertyDO#getId()}
*/
private Long propertyId;
/**
* 属性名字
* 冗余 {@link ProductPropertyDO#getName()}
*
* 注意:每次属性名字发生变化时,需要更新该冗余
*/
private String propertyName;
/**
* 属性值编号
* 关联 {@link ProductPropertyValueDO#getId()}
*/
private Long valueId;
/**
* 属性值名字
* 冗余 {@link ProductPropertyValueDO#getName()}
*
* 注意:每次属性值名字发生变化时,需要更新该冗余
*/
private String valueName;
}
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.product;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mybatis.core.type.IntegerListTypeHandler;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.util.List;
/**
* 商品spu对象 product_spu
*
* @author hzh
* @date 2025-01-20
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName(value = "product_spu", autoResultMap = true)
public class ProductSpuDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 商品 SPU 编号,自增
*/
@TableId(value = "id")
private Long id;
// ========== 基本信息 =========
/**
* 商品名称
*/
private String name;
/**
* 关键字
*/
private String keyword;
/**
* 商品简介
*/
private String introduction;
/**
* 商品详情
*/
private String description;
/**
* 商品分类编号
*
* 关联 {@link ProductCategoryDO#getId()}
*/
private Long categoryId;
/**
* 商品品牌编号
*
* 关联 {@link ProductBrandDO#getId()}
*/
private Long brandId;
/**
* 商品封面图
*/
private String picUrl;
/**
* 商品轮播图
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<String> sliderPicUrls;
/**
* 排序字段
*/
private Integer sort;
/**
* 商品状态
*
* 枚举 {@link org.dromara.mall.enums.product.spu.ProductSpuStatusEnum}
*/
private Integer status;
// ========== SKU 相关字段 =========
/**
* 规格类型
*
* false - 单规格
* true - 多规格
*/
private Boolean specType;
/**
* 商品价格,单位使用:分
*
* 基于其对应的 {@link ProductSkuDO#getPrice()} sku单价最低的商品的
*/
private Integer price;
/**
* 市场价,单位使用:分
*
* 基于其对应的 {@link ProductSkuDO#getMarketPrice()} sku单价最低的商品的
*/
private Integer marketPrice;
/**
* 成本价,单位使用:分
*
* 基于其对应的 {@link ProductSkuDO#getCostPrice()} sku单价最低的商品的
*/
private Integer costPrice;
/**
* 库存
*
* 基于其对应的 {@link ProductSkuDO#getStock()} 求和
*/
private Integer stock;
// ========== 物流相关字段 =========
/**
* 配送方式数组
*
* 对应 DeliveryTypeEnum 枚举
*/
@TableField(typeHandler = IntegerListTypeHandler.class)
private List<Integer> deliveryTypes;
/**
* 物流配置模板编号
*
* 对应 TradeDeliveryExpressTemplateDO 的 id 编号
*/
private Long deliveryTemplateId;
// ========== 营销相关字段 =========
/**
* 赠送积分
*/
private Integer giveIntegral;
// TODO @puhui999:字段估计要改成 brokerageType
/**
* 分销类型
*
* false - 默认
* true - 自行设置
*/
private Boolean subCommissionType;
// ========== 统计相关字段 =========
/**
* 商品销量
*/
private Integer salesCount;
/**
* 虚拟销量
*/
private Integer virtualSalesCount;
/**
* 浏览量
*/
private Integer browseCount;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mall.enums.CommonStatusEnum;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
/**
* 文章分类对象 promotion_article_category
*
* @author hzh
* @date 2025-01-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_article_category")
public class ArticleCategoryDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 文章分类编号
*/
@TableId(value = "id")
private Long id;
/**
* 文章分类名称
*/
private String name;
/**
* 图标地址
*/
private String picUrl;
/**
* 状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
/**
* 排序
*/
private Integer sort;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mall.enums.CommonStatusEnum;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
/**
* 文章管理对象 promotion_article
*
* @author hzh
* @date 2025-01-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_article")
public class ArticleDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 文章管理编号
*/
@TableId(value = "id")
private Long id;
/**
* 分类编号 ArticleCategoryDO#id
*/
private Long categoryId;
/**
* 关联商品编号 ProductSpuDO#id
*/
private Long spuId;
/**
* 文章标题
*/
private String title;
/**
* 文章作者
*/
private String author;
/**
* 文章封面图片地址
*/
private String picUrl;
/**
* 文章简介
*/
private String introduction;
/**
* 浏览次数
*/
private Integer browseCount;
/**
* 排序
*/
private Integer sort;
/**
* 状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
/**
* 是否热门(小程序)
*/
private Boolean recommendHot;
/**
* 是否轮播图(小程序)
*/
private Boolean recommendBanner;
/**
* 文章内容
*/
private String content;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mall.enums.CommonStatusEnum;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
/**
* Banner 广告位对象 promotion_banner
*
* @author hzh
* @date 2025-01-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_banner")
public class BannerDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* Banner 编号
*/
@TableId(value = "id")
private Long id;
/**
* 标题
*/
private String title;
/**
* 跳转链接
*/
private String url;
/**
* 图片链接
*/
private String picUrl;
/**
* 排序
*/
private Integer sort;
/**
* 状态 {@link CommonStatusEnum}
*/
private Integer status;
/**
* 定位 {@link BannerPositionEnum}
*/
private Integer position;
/**
* 备注
*/
private String memo;
/**
* 点击次数
*/
private Integer browseCount;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mall.enums.CommonStatusEnum;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 砍价活动对象 promotion_bargain_activity
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_bargain_activity")
public class BargainActivityDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 砍价活动编号
*/
@TableId(value = "id")
private Long id;
/**
* 砍价活动名称
*/
private String name;
/**
* 活动开始时间
*/
private LocalDateTime startTime;
/**
* 活动结束时间
*/
private LocalDateTime endTime;
/**
* 活动状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
/**
* 商品 SPU 编号
*/
private Long spuId;
/**
* 商品 SKU 编号
*/
private Long skuId;
/**
* 砍价起始价格,单位:分
*/
private Integer bargainFirstPrice;
/**
* 砍价底价,单位:分
*/
private Integer bargainMinPrice;
/**
* 砍价库存(剩余库存砍价时扣减)
*/
private Integer stock;
/**
* 砍价总库存
*/
private Integer totalStock;
/**
* 砍价人数
*
* 需要多少人,砍价才能成功,即 {@link BargainRecordDO#getStatus()} 更新为 {@link BargainRecordDO#getStatus()} 成功状态
*/
private Integer helpMaxCount;
/**
* 帮砍次数
*
* 单个活动,用户可以帮砍的次数。
* 例如说:帮砍次数为 1 时,A 和 B 同时将该活动链接发给 C,C 只能帮其中一个人砍价。
*/
private Integer bargainCount;
/**
* 总限购数量
*/
private Integer totalLimitCount;
/**
* 用户每次砍价的最小金额,单位:分
*/
private Integer randomMinPrice;
/**
* 用户每次砍价的最大金额,单位:分
*/
private Integer randomMaxPrice;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 砍价助力对象 promotion_bargain_help
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_bargain_help")
public class BargainHelpDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 砍价助力编号
*/
@TableId(value = "id")
private Long id;
/**
* 砍价活动编号
*
* 关联 {@link BargainActivityDO#getId()} 字段
*/
private Long activityId;
/**
* 砍价记录编号
*
* 关联 {@link BargainRecordDO#getId()} 字段
*/
private Long recordId;
/**
* 用户编号
*/
private Long userId;
/**
* 减少价格,单位:分
*/
private Integer reducePrice;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 砍价记录对象 promotion_bargain_record
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_bargain_record")
public class BargainRecordDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 砍价记录编号
*/
@TableId(value = "id")
private Long id;
/**
* 用户编号
*/
private Long userId;
/**
* 砍价活动编号
*
* 关联 {@link BargainActivityDO#getId()} 字段
*/
private Long activityId;
/**
* 商品 SPU 编号
*/
private Long spuId;
/**
* 商品 SKU 编号
*/
private Long skuId;
/**
* 砍价起始价格,单位:分
*/
private Integer bargainFirstPrice;
/**
* 当前砍价,单位:分
*/
private Integer bargainPrice;
/**
* 砍价状态
*
* 砍价成功的条件是:(2 选 1)
* 1. 砍价到 {@link BargainActivityDO#getBargainMinPrice()} 底价
* 2. 助力人数到达 {@link BargainActivityDO#getHelpMaxCount()} 人
*
* 枚举 {@link BargainRecordStatusEnum}
*/
private Integer status;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 订单编号
*/
private Long orderId;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mall.enums.CommonStatusEnum;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 拼团活动对象 promotion_combination_activity
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_combination_activity")
public class CombinationActivityDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 活动编号
*/
@TableId(value = "id")
private Long id;
/**
* 拼团名称
*/
private String name;
/**
* 商品 SPU 编号
*
* 关联 ProductSpuDO 的 id
*/
private Long spuId;
/**
* 总限购数量
*/
private Integer totalLimitCount;
/**
* 单次限购数量
*/
private Integer singleLimitCount;
/**
* 开始时间
*/
private LocalDateTime startTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 几人团
*/
private Integer userSize;
/**
* 虚拟成团
*/
private Boolean virtualGroup;
/**
* 活动状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
/**
* 限制时长(小时)
*/
private Integer limitDuration;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 拼团商品对象 promotion_combination_product
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_combination_product")
public class CombinationProductDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 拼团活动编号
*/
private Long activityId;
/**
* 商品 SPU 编号
*/
private Long spuId;
/**
* 商品 SKU 编号
*/
private Long skuId;
/**
* 拼团价格,单位分
*/
private Integer combinationPrice;
/**
* 拼团商品状态
*
* 关联 {@link CombinationActivityDO#getStatus()}
*/
private Integer activityStatus;
/**
* 活动开始时间点
*
* 冗余 {@link CombinationActivityDO#getStartTime()}
*/
private LocalDateTime activityStartTime;
/**
* 活动结束时间点
*
* 冗余 {@link CombinationActivityDO#getEndTime()}
*/
private LocalDateTime activityEndTime;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 拼团记录对象 promotion_combination_record
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_combination_record")
public class CombinationRecordDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 团长编号 - 团长
*/
public static final Long HEAD_ID_GROUP = 0L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 拼团活动编号
*
* 关联 {@link CombinationActivityDO#getId()}
*/
private Long activityId;
/**
* 拼团商品单价
*
* 冗余 {@link CombinationProductDO#getCombinationPrice()}
*/
private Integer combinationPrice;
/**
* SPU 编号
*/
private Long spuId;
/**
* 商品名字
*/
private String spuName;
/**
* 商品图片
*/
private String picUrl;
/**
* SKU 编号
*/
private Long skuId;
/**
* 购买的商品数量
*/
private Integer count;
/**
* 用户编号
*/
private Long userId;
/**
* 用户昵称
*/
private String nickname;
/**
* 用户头像
*/
private String avatar;
/**
* 团长编号
*
* 关联 {@link CombinationRecordDO#getId()}
*
* 如果是团长,则它的值是 {@link #HEAD_ID_GROUP}
*/
private Long headId;
/**
* 开团状态
*
* 关联 {@link CombinationRecordStatusEnum}
*/
private Integer status;
/**
* 订单编号
*/
private Long orderId;
/**
* 开团需要人数
*
* 关联 {@link CombinationActivityDO#getUserSize()}
*/
private Integer userSize;
/**
* 已加入拼团人数
*/
private Integer userCount;
/**
* 是否虚拟成团
*
* 默认为 false。
* 拼团过期都还没有成功,如果 {@link CombinationActivityDO#getVirtualGroup()} 为 true,则执行虚拟成团的逻辑,才会更新该字段为 true
*/
private Boolean virtualGroup;
/**
* 过期时间
*
* 基于 {@link CombinationRecordDO#getStartTime()} + {@link CombinationActivityDO#getLimitDuration()} 计算
*/
private LocalDateTime expireTime;
/**
* 开始时间 (订单付款后开始的时间)
*/
private LocalDateTime startTime;
/**
* 结束时间(成团时间/失败时间)
*/
private LocalDateTime endTime;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mybatis.core.type.LongListTypeHandler;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
import java.util.List;
/**
* 优惠劵对象 promotion_coupon
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_coupon")
public class CouponDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 优惠劵编号
*/
@TableId(value = "id")
private Long id;
/**
* 优惠劵模板编号
*
* 关联 {@link CouponTemplateDO#getId()}
*/
private Long templateId;
/**
* 优惠劵名
*
* 冗余 {@link CouponTemplateDO#getName()}
*/
private String name;
/**
* 优惠码状态
*
* 枚举 {@link CouponStatusEnum}
*/
private Integer status;
// TODO 芋艿:发放 adminid?
// ========== 基本信息 END ==========
// ========== 领取情况 BEGIN ==========
/**
* 用户编号
*
* 关联 MemberUserDO 的 id 字段
*/
private Long userId;
/**
* 领取类型
*
* 枚举 {@link CouponTakeTypeEnum}
*/
private Integer takeType;
// ========== 领取情况 END ==========
// ========== 使用规则 BEGIN ==========
/**
* 是否设置满多少金额可用,单位:分
*
* 冗余 {@link CouponTemplateDO#getUsePrice()}
*/
private Integer usePrice;
/**
* 生效开始时间
*/
private LocalDateTime validStartTime;
/**
* 生效结束时间
*/
private LocalDateTime validEndTime;
/**
* 商品范围
*
* 枚举 {@link PromotionProductScopeEnum}
*/
private Integer productScope;
/**
* 商品范围编号的数组
*
* 冗余 {@link CouponTemplateDO#getProductScopeValues()}
*/
@TableField(typeHandler = LongListTypeHandler.class)
private List<Long> productScopeValues;
// ========== 使用规则 END ==========
// ========== 使用效果 BEGIN ==========
/**
* 折扣类型
*
* 冗余 {@link CouponTemplateDO#getDiscountType()}
*/
private Integer discountType;
/**
* 折扣百分比
*
* 冗余 {@link CouponTemplateDO#getDiscountPercent()}
*/
private Integer discountPercent;
/**
* 优惠金额,单位:分
*
* 冗余 {@link CouponTemplateDO#getDiscountPrice()}
*/
private Integer discountPrice;
/**
* 折扣上限,仅在 {@link #discountType} 等于 {@link PromotionDiscountTypeEnum#PERCENT} 时生效
*
* 冗余 {@link CouponTemplateDO#getDiscountLimitPrice()}
*/
private Integer discountLimitPrice;
// ========== 使用效果 END ==========
// ========== 使用情况 BEGIN ==========
/**
* 使用订单号
*/
private Long useOrderId;
/**
* 使用时间
*/
private LocalDateTime useTime;
// ========== 使用情况 END ==========
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mybatis.core.type.LongListTypeHandler;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
import java.util.List;
/**
* 优惠劵模板对象 promotion_coupon_template
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_coupon_template")
public class CouponTemplateDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 不限制领取数量
*/
public static final Integer TIME_LIMIT_COUNT_MAX = -1;
/**
* 模板编号,自增唯一。
*/
@TableId(value = "id")
private Long id;
/**
* 优惠劵名
*/
private String name;
/**
* 优惠券说明
*/
private String description;
/**
* 状态
*
* 枚举 {@link CommonStatusEnum}
*/
// TODO 芋艿:要不要改成 3 个状态??
private Integer status;
// ========== 基本信息 END ==========
// ========== 领取规则 BEGIN ==========
/**
* 发放数量
*
* -1 - 则表示不限制发放数量
*/
private Integer totalCount;
/**
* 每人限领个数
*
* -1 - 则表示不限制
*/
private Integer takeLimitCount;
/**
* 领取方式
*
* 枚举 {@link CouponTakeTypeEnum}
*/
private Integer takeType;
// ========== 领取规则 END ==========
// ========== 使用规则 BEGIN ==========
/**
* 是否设置满多少金额可用,单位:分
*
* 0 - 不限制
* 大于 0 - 多少金额可用
*/
private Integer usePrice;
/**
* 商品范围
*
* 枚举 {@link PromotionProductScopeEnum}
*/
private Integer productScope;
/**
* 商品范围编号的数组
*/
@TableField(typeHandler = LongListTypeHandler.class)
private List<Long> productScopeValues;
/**
* 生效日期类型
*
* 枚举 {@link CouponTemplateValidityTypeEnum}
*/
private Integer validityType;
/**
* 固定日期 - 生效开始时间
*
* 当 {@link #validityType} 为 {@link CouponTemplateValidityTypeEnum#DATE}
*/
private LocalDateTime validStartTime;
/**
* 固定日期 - 生效结束时间
*
* 当 {@link #validityType} 为 {@link CouponTemplateValidityTypeEnum#DATE}
*/
private LocalDateTime validEndTime;
/**
* 领取日期 - 开始天数
*
* 当 {@link #validityType} 为 {@link CouponTemplateValidityTypeEnum#TERM}
*/
private Integer fixedStartTerm;
/**
* 领取日期 - 结束天数
*
* 当 {@link #validityType} 为 {@link CouponTemplateValidityTypeEnum#TERM}
*/
private Integer fixedEndTerm;
// ========== 使用规则 END ==========
// ========== 使用效果 BEGIN ==========
/**
* 折扣类型
*
* 枚举 {@link PromotionDiscountTypeEnum}
*/
private Integer discountType;
/**
* 折扣百分比
*
* 例如,80% 为 80
*/
private Integer discountPercent;
/**
* 优惠金额,单位:分
*
* 当 {@link #discountType} 为 {@link PromotionDiscountTypeEnum#PRICE} 生效
*/
private Integer discountPrice;
/**
* 折扣上限,仅在 {@link #discountType} 等于 {@link PromotionDiscountTypeEnum#PERCENT} 时生效
*
* 例如,折扣上限为 20 元,当使用 8 折优惠券,订单金额为 1000 元时,最高只可折扣 20 元,而非 80 元。
*/
private Integer discountLimitPrice;
// ========== 使用效果 END ==========
// ========== 统计信息 BEGIN ==========
/**
* 领取优惠券的数量
*/
private Integer takeCount;
/**
* 使用优惠券的次数
*/
private Integer useCount;
// ========== 统计信息 END ==========
// TODO 芋艿:领取开始时间、领取结束时间
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mall.enums.CommonStatusEnum;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 限时折扣活动对象 promotion_discount_activity
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_discount_activity")
public class DiscountActivityDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 活动编号
*/
@TableId(value = "id")
private Long id;
/**
* 活动标题
*/
private String name;
/**
* 状态
*
* 枚举 {@link CommonStatusEnum}
*
* 活动被关闭后,不允许再次开启。
*/
private Integer status;
/**
* 开始时间
*/
private LocalDateTime startTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 备注
*/
private String remark;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 限时折扣商品
对象 promotion_discount_product
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_discount_product")
public class DiscountProductDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号,主键自增
*/
@TableId(value = "id")
private Long id;
/**
* 限时折扣活动的编号
*
* 关联 {@link DiscountActivityDO#getId()}
*/
private Long activityId;
/**
* 商品 SPU 编号
*
* 关联 ProductSpuDO 的 id 编号
*/
private Long spuId;
/**
* 商品 SKU 编号
*
* 关联 ProductSkuDO 的 id 编号
*/
private Long skuId;
/**
* 折扣类型
*
* 枚举 {@link PromotionDiscountTypeEnum}
*/
private Integer discountType;
/**
* 折扣百分比
*
* 例如,80% 为 80
*/
private Integer discountPercent;
/**
* 优惠金额,单位:分
*
* 当 {@link #discountType} 为 {@link PromotionDiscountTypeEnum#PRICE} 生效
*/
private Integer discountPrice;
/**
* 活动标题
*
* 冗余 {@link DiscountActivityDO#getName()}
*/
private String activityName;
/**
* 活动状态
*
* 冗余 {@link DiscountActivityDO#getStatus()}
*/
private Integer activityStatus;
/**
* 活动开始时间点
*
* 冗余 {@link DiscountActivityDO#getStartTime()}
*/
private LocalDateTime activityStartTime;
/**
* 活动结束时间点
*
* 冗余 {@link DiscountActivityDO#getEndTime()}
*/
private LocalDateTime activityEndTime;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.type.StringListTypeHandler;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.util.List;
/**
* 装修页面对象 promotion_diy_page
*
* @author hzh
* @date 2025-01-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_diy_page")
public class DiyPageDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 装修页面编号
*/
@TableId(value = "id")
private Long id;
/**
* 装修模板编号
*
* 关联 {@link DiyTemplateDO#getId()}
*/
private Long templateId;
/**
* 页面名称
*/
private String name;
/**
* 备注
*/
private String remark;
/**
* 预览图,多个逗号分隔
*/
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> previewPicUrls;
/**
* 页面属性,JSON 格式
*/
private String property;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mybatis.core.type.StringListTypeHandler;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
import java.util.List;
/**
* 装修模板对象 promotion_diy_template
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_diy_template")
public class DiyTemplateDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 装修模板编号
*/
@TableId(value = "id")
private Long id;
/**
* 模板名称
*/
private String name;
/**
* 是否使用
*/
private Boolean used;
/**
* 使用时间
*/
private LocalDateTime usedTime;
/**
* 备注
*/
private String remark;
/**
* 预览图
*/
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> previewPicUrls;
/**
* uni-app 底部导航属性,JSON 格式
*/
private String property;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.mall.domain.promotion;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.mall.api.dto.member.MemberUserRespDTO;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 客服会话对象 promotion_kefu_conversation
*
* @author hzh
* @date 2025-01-24
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("promotion_kefu_conversation")
public class KefuConversationDO extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id")
private Long id;
/**
* 会话所属用户
*
* 关联 {@link MemberUserRespDTO#getId()}
*/
private Long userId;
/**
* 最后聊天时间
*/
private LocalDateTime lastMessageTime;
/**
* 最后聊天内容
*/
private String lastMessageContent;
/**
* 最后发送的消息类型
*
* 枚举 {@link KeFuMessageContentTypeEnum}
*/
private Integer lastMessageContentType;
//======================= 会话操作相关 =======================
/**
* 管理端置顶
*/
private Boolean adminPinned;
/**
* 用户是否可见
*
* false - 可见,默认值
* true - 不可见,用户删除时设置为 true
*/
private Boolean userDeleted;
/**
* 管理员是否可见
*
* false - 可见,默认值
* true - 不可见,管理员删除时设置为 true
*/
private Boolean adminDeleted;
/**
* 管理员未读消息数
*
* 用户发送消息时增加,管理员查看后扣减
*/
private Integer adminUnreadMessageCount;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论