1. 表结构默认字段

     所有表使用 InnoDB 引擎,utf8mb4 字符集
     前缀规则
     所有表必须使用  关联原则 作为前缀。方便指向关联业务
     例如:orders 主表
            orders_ext 扩展表
            orders_chang 转单表

    必须添加的字段

     `change_id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
     `remark` varchar(255) DEFAULT '' COMMENT '备注',
     `over_flag` tinyint NOT NULL DEFAULT '0' COMMENT '完结标识 0-未完结,1-已完结',
     `create_user` int NOT NULL COMMENT '创建人',
     `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     `update_user` int DEFAULT NULL COMMENT '更新人',
     `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
     PRIMARY KEY ( `change_id` ),
     KEY `idx_create_time` (`create_time`),
     KEY `idx_update_time` (`update_time`),

    索引规则

     普通索引:idx_xxx
     唯一索引:uniq_xxx 每个表必须有唯一约束

    为什么这么设计:

     完结标识,创建时间,更新时间, 有助于统一进行数据归档,提高归档效率、报表生成的效率、 分摊主库压力,提升查询效率,减少运营成本  。

    数据归档

     什么是归档:数据定期从主库中移除,转移到备份库中,主系统中不在提供查询
     归档的目的:分摊主库压力,提升查询效率,减少运营成本
     什么数据该归档:已完结并且创建时间超过1.5年以上的数据
     归档后需要查询怎么办:通过备份库导出数据查询

    样例表

    CREATE TABLE `orders_change` (
         `change_id` BIGINT NOT NULL  COMMENT 'id',
         `change_no` VARCHAR ( 64 ) NOT NULL  COMMENT '转第三方业务单号',
         `orders_id` BIGINT NOT NULL COMMENT 'order表订单ID',
         `tracking_number` VARCHAR ( 64 ) NOT NULL DEFAULT '' COMMENT 'order表跟踪号',
         `reference_no` VARCHAR ( 64 ) NOT NULL DEFAULT '' COMMENT 'order表参考号',
         `change_status` TINYINT NOT NULL DEFAULT '1' COMMENT '转单状态 1-正常,99-取消',
         `change_site_id` INT DEFAULT '0' COMMENT '转单发起网点',
         `change_carrier_id` INT DEFAULT NULL COMMENT '转单服务商(承运商)id',
         `change_carrier_code` VARCHAR ( 64 ) DEFAULT '' COMMENT '转单服务商(承运商)code',
         `change_order_code` VARCHAR ( 64 ) DEFAULT '' COMMENT '第三方系统生成的面单号',
         `change_tracking_no` VARCHAR ( 64 ) DEFAULT '' COMMENT '第三方系统生成的参考单号',
         `change_file_path_flag` TINYINT NOT NULL DEFAULT '0' COMMENT '获取第三方三方面单标识 0-未获取,1-已获取,2-获取失败',
         `change_file_path` VARCHAR ( 512 ) NOT NULL DEFAULT '' COMMENT '第三方面单文件路径',
         `remark` VARCHAR ( 255 ) DEFAULT NULL COMMENT '备注',
         `over_flag` TINYINT NOT NULL DEFAULT '0' COMMENT '完结标识 0-未完结,1-已完结',
         `create_user` BIGINT NOT NULL COMMENT '创建人',
         `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
         `update_user` BIGINT DEFAULT NULL COMMENT '更新人',
         `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
         PRIMARY KEY ( `change_id` ),
         UNIQUE KEY `uniq_change_no` ( `change_no` ),
         KEY `idx_tracking_number` ( `tracking_number` ),
         KEY `idx_orders_id` ( `orders_id` ),
         KEY `idx_create_time` ( `create_time` ),
         KEY `idx_update_time` ( `update_time` )
     ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COMMENT = '转第三方承配主表';
  2. 所有表对应的实体类必须继承 BasePo

     /**
      * 基础实体类
      *
      * @author dengpengbin
      */
     @Data
     public class BasePo implements Serializable {
    
         /**
          * 创建人
          */
         @Schema(description = "创建人", hidden = true)
         @TableField(fill = FieldFill.INSERT)
         private Long createUser;
    
         /**
          * 创建时间,由数据库维护
          */
         @Schema(description = "创建时间", hidden = true)
         private LocalDateTime createTime;
    
         /**
          * 更新人
          */
         @TableField(fill = FieldFill.INSERT_UPDATE)
         @Schema(description = "更新人", hidden = true)
         private Long updateUser;
    
         /**
          * 更新时间,由数据库维护
          */
         @Schema(description = "更新时间", hidden = true)
         private LocalDateTime updateTime;
    
     }
  3. 代码规范

     1.所有异常类统一使用 ServiceException
    
     2.实体类应与数据库表名保持语义一致,使用驼峰命名法,首字母大写。
    
     3.id 统一使用 @TableId(value = "xx_id",type = IdType.ASSIGN_ID) 映射
    
     4.字段应与数据库字段保持一致,必要时使用 @TableField 映射
    
     5.使用 @RequestBody 时,前端必须使用 application/json。
    
     6.接口返回统一使用 R<T> 封装,避免直接返回原始对象。
    
     7.所有业务异常抛出 ServiceException
    
     8.所有常量类以 Constant 结尾。
    
     9.字典值建议统一写到 Enum 中,包含 getCode() 和 getDesc() 方法。
    
     10.使用 Swagger 注解,如 @Operation, @Schema