# 2026/02/27 档案管理模块

# ============================
# 用户档案表
# ============================
CREATE TABLE `pet_system`.`usr_customer`
(
    `id`             bigint PRIMARY KEY NOT NULL COMMENT '主键ID',
    `open_id`        varchar(100) COMMENT '微信OpenID',
    `nickname`       varchar(50) COMMENT '昵称',
    `name`           varchar(50) COMMENT '真实姓名',
    `gender`         tinyint    DEFAULT 0 COMMENT '性别 (0:男, 1:女, 2:未知)',
    `phone`          varchar(20) COMMENT '手机号',
    `avatar`         bigint COMMENT '头像',
    `area_id`        bigint COMMENT '常驻区域ID',
    `station_id`     bigint COMMENT '所属站点ID',
    `region_code`    varchar(20) COMMENT '省市区编码',
    `address`        varchar(255) COMMENT '详细住址',
    `house_type`     varchar(20) DEFAULT 'elevator' COMMENT '房屋类型 (stairs:楼梯, elevator:电梯)',
    `entry_method`   varchar(20) DEFAULT 'password' COMMENT '入门方式 (password:密码, key:钥匙)',
    `entry_password` varchar(50) COMMENT '开门密码',
    `key_location`   varchar(100) COMMENT '钥匙位置',
    `source`         varchar(50) COMMENT '来源渠道',
    `pet_count`      int        DEFAULT 0 COMMENT '宠物数量',
    `points`         int        DEFAULT 0 COMMENT '积分',
    `balance`        bigint     DEFAULT 0 COMMENT '余额(分)',
    `order_count`    int        DEFAULT 0 COMMENT '下单次数',
    `total_consume`  bigint     DEFAULT 0 COMMENT '总消费额(分)',
    `status`         tinyint    DEFAULT 0 COMMENT '状态 (0:正常, 1:冻结)',
    `remark`         varchar(500) COMMENT '后台备注',
    `del_flag`       char(1)    DEFAULT '0' COMMENT '删除标志（0代表存在 1代表删除）',
    `create_dept`    bigint(20) COMMENT '创建部门',
    `create_by`      bigint(20) COMMENT '创建者',
    `create_time`    datetime COMMENT '创建时间',
    `update_by`      bigint(20) COMMENT '更新者',
    `update_time`    datetime COMMENT '更新时间'
) ENGINE = innoDB COMMENT = 'C端用户表';

# ============================
# 宠物档案表
# ============================
CREATE TABLE `pet_system`.`usr_pet`
(
    `id`               bigint PRIMARY KEY NOT NULL COMMENT '主键ID',
    `user_id`          bigint             NOT NULL COMMENT '所属用户ID',
    `name`             varchar(50)        NOT NULL COMMENT '宠物昵称',
    `avatar`           bigint COMMENT '头像',
    `type`             tinyint  DEFAULT 1 COMMENT '类型 (1:猫, 2:狗, 3:其他)',
    `breed`            varchar(50) COMMENT '品种',
    `gender`           tinyint  DEFAULT 1 COMMENT '性别 (1:公, 2:母)',
    `birthday`         date COMMENT '出生日期',
    `age`              int      DEFAULT 0 COMMENT '年龄(岁)',
    `weight`           decimal(5, 2) DEFAULT 0.00 COMMENT '体重(kg)',
    `size`             varchar(20) DEFAULT 'small' COMMENT '体型 (small:小型, medium:中型, large:大型)',
    `is_sterilized`    tinyint  DEFAULT 0 COMMENT '是否绝育 (0:否, 1:是)',
    `arrival_time`     date COMMENT '到家时间',
    `house_type`       varchar(20) COMMENT '家庭房屋类型',
    `entry_method`     varchar(20) COMMENT '入门方式',
    `entry_password`   varchar(50) COMMENT '开门密码',
    `key_location`     varchar(100) COMMENT '钥匙位置',
    `personality`      varchar(255) COMMENT '性格关键词',
    `cute_personality` text COMMENT '萌宠性格描述',
    `health_status`    varchar(50) DEFAULT '健康' COMMENT '健康状况',
    `aggression`       tinyint  DEFAULT 0 COMMENT '是否有攻击倾向 (0:否, 1:是)',
    `vaccine_status`   varchar(50) COMMENT '疫苗状态',
    `vaccine_cert`     bigint COMMENT '疫苗凭证图片',
    `medical_history`  text COMMENT '既往病史',
    `allergies`        text COMMENT '过敏史',
    `remark`           varchar(500) COMMENT '特别备注',
    `del_flag`         char(1)  DEFAULT '0' COMMENT '删除标志（0代表存在 1代表删除）',
    `create_dept`      bigint(20) COMMENT '创建部门',
    `create_by`        bigint(20) COMMENT '创建者',
    `create_time`      datetime COMMENT '创建时间',
    `update_by`        bigint(20) COMMENT '更新者',
    `update_time`      datetime COMMENT '更新时间'
) ENGINE = innoDB COMMENT = '宠物档案表';

# ============================
# 标签定义表
# ============================
CREATE TABLE `pet_system`.`sys_tag`
(
    `id`          bigint PRIMARY KEY NOT NULL COMMENT '主键ID',
    `name`        varchar(50)        NOT NULL COMMENT '标签名称',
    `category`    varchar(20)        NOT NULL COMMENT '分类 (user:用户, pet:宠物, fulfiller:履约者)',
    `color_type`  varchar(20) DEFAULT 'info' COMMENT '颜色样式 (primary, success, warning, danger, info)',
    `description` varchar(255) COMMENT '标签说明',
    `type`        tinyint     DEFAULT 2 COMMENT '类型 (1:系统内置, 2:自定义)',
    `status`      tinyint     DEFAULT 0 COMMENT '状态 (0:启用, 1:停用)',
    `del_flag`    char(1)     DEFAULT '0' COMMENT '删除标志（0代表存在 1代表删除）',
    `create_dept` bigint(20) COMMENT '创建部门',
    `create_by`   bigint(20) COMMENT '创建者',
    `create_time` datetime COMMENT '创建时间',
    `update_by`   bigint(20) COMMENT '更新者',
    `update_time` datetime COMMENT '更新时间'
) ENGINE = innoDB COMMENT = '标签定义表';

# ============================
# 标签关联表
# ============================
CREATE TABLE `pet_system`.`sys_tag_rel`
(
    `id`          bigint PRIMARY KEY NOT NULL COMMENT '主键ID',
    `tag_id`      bigint             NOT NULL COMMENT '标签ID',
    `target_id`   bigint             NOT NULL COMMENT '目标对象ID',
    `target_type` varchar(20)        NOT NULL COMMENT '目标类型 (user:用户, pet:宠物, fulfiller:履约者)',
    UNIQUE KEY `uk_tag_target` (`tag_id`, `target_id`, `target_type`)
) ENGINE = innoDB COMMENT = '标签关联表';

# ============================
# 档案变更日志表
# ============================
CREATE TABLE `pet_system`.`arc_change_log`
(
    `id`            bigint PRIMARY KEY NOT NULL COMMENT '主键ID',
    `target_id`     bigint             NOT NULL COMMENT '目标对象ID',
    `target_type`   varchar(20)        NOT NULL COMMENT '目标类型 (user:用户, pet:宠物)',
    `content`       varchar(500) COMMENT '日志内容',
    `log_type`      varchar(20) DEFAULT 'remark' COMMENT '日志类型 (remark:备注, system:系统, change:变更)',
    `operator_id`   bigint COMMENT '操作人ID',
    `operator_name` varchar(50) COMMENT '操作人名称',
    `create_time`   datetime COMMENT '创建时间',
    KEY `idx_target` (`target_id`, `target_type`)
) ENGINE = innoDB COMMENT = '档案变更日志表';
