DROP TABLE IF EXISTS `qy_access_token`;

CREATE TABLE `qy_access_token` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键编号',
  `oper_id` int DEFAULT NULL COMMENT '操作序号',
  `suiteId` varchar(30) DEFAULT NULL COMMENT '模板ID',
  `agent_name` varchar(100) DEFAULT NULL COMMENT '应用名称',
  `agent_id` varchar(30) DEFAULT NULL COMMENT '应用ID',
  `corpid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '授权方企业 corpid',
  `secret` varchar(300) DEFAULT NULL COMMENT 'Secret(企业微信永久授权码 permanent_code)',
  `gettoken_time` datetime DEFAULT NULL COMMENT '获取时间',
  `access_token` varchar(1000) DEFAULT NULL COMMENT '获取到的凭证,最长为512字节',
  `expires_in` int DEFAULT NULL COMMENT '凭证的有效时间(秒) (正常情况下为7200秒(2小时))',
  `errcode` varchar(30) DEFAULT NULL COMMENT '出错返回码,为0表示成功,非0表示调用失败',
  `errmsg` varchar(500) DEFAULT NULL COMMENT '返回码提示语',
  `auth_state` varchar(30) NOT NULL DEFAULT '0' COMMENT '授权状态(0:未授权;1:已授权;2:已取消;)',
  `enable` varchar(2) NOT NULL DEFAULT '1' COMMENT '有效标志(1-有效,0-无效)',
  `appid` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业微信-access_token';

DROP TABLE IF EXISTS `qy_auth`;

CREATE TABLE `qy_auth` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键编号',
  `oper_id` int DEFAULT NULL COMMENT '操作序号',
  `SuiteId` varchar(30) DEFAULT NULL COMMENT '第三方应用的SuiteId或者代开发应用模板id',
  `AuthCode` varchar(512) DEFAULT NULL COMMENT '临时授权码,最长为512字节。用于获取企业永久授权码。10分钟内有效',
  `InfoType` varchar(30) DEFAULT NULL COMMENT '信息类型(create_auth:授权成功通知;change_auth:变更授权通知;cancel_auth:取消授权通知;suite_ticket:推送suite_ticket)',
  `TimeStamp` varchar(30) DEFAULT NULL COMMENT '时间戳',
  `AuthCorpId` varchar(50) DEFAULT NULL COMMENT '授权方的corpid',
  `State` varchar(100) DEFAULT NULL COMMENT '构造授权链接指定的state参数',
  `ExtraInfo` varchar(200) DEFAULT NULL COMMENT '额外信息,部分场景会携带,在其他文档中分别描述',
  `SuiteTicket` varchar(512) DEFAULT NULL COMMENT 'Ticket内容,最长为512字节',
  `appid` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ik_qy_auth_SuiteId` (`SuiteId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业微信-代开发应用模板授权';

DROP TABLE IF EXISTS `qy_auth_corp_info`;

CREATE TABLE `qy_auth_corp_info` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键编号',
  `oper_id` int DEFAULT NULL COMMENT '操作序号',
  `corpid` varchar(50) DEFAULT NULL COMMENT '授权方企业微信id',
  `corp_name` varchar(100) DEFAULT NULL COMMENT '授权方企业名称,即企业简称',
  `corp_type` varchar(30) DEFAULT NULL COMMENT '授权方企业类型,认证号:verified, 注册号:unverified',
  `corp_square_logo_url` varchar(100) DEFAULT NULL COMMENT '授权方企业方形头像',
  `corp_user_max` varchar(30) DEFAULT NULL COMMENT '授权方企业用户规模',
  `corp_full_name` varchar(100) DEFAULT NULL COMMENT '授权方企业的主体名称,即企业全称。',
  `subject_type` varchar(30) DEFAULT NULL COMMENT '企业类型,1. 企业; 2. 政府以及事业单位; 3. 其他组织, 4.团队号',
  `verified_end_time` varchar(30) DEFAULT NULL COMMENT '认证到期时间',
  `corp_wxqrcode` varchar(100) DEFAULT NULL COMMENT '授权企业在微信插件(原企业号)的二维码,可用于关注微信插件',
  `corp_scale` varchar(30) DEFAULT NULL COMMENT '企业规模。当企业未设置该属性时,值为空',
  `corp_industry` varchar(30) DEFAULT NULL COMMENT '企业所属行业。当企业未设置该属性时,值为空',
  `corp_sub_industry` varchar(30) DEFAULT NULL COMMENT '企业所属子行业。当企业未设置该属性时,值为空',
  `agentid` varchar(30) DEFAULT NULL COMMENT '授权方应用id',
  `agentname` varchar(100) DEFAULT NULL COMMENT '授权方应用名字',
  `userid` varchar(50) DEFAULT NULL COMMENT '授权管理员的userid,可能为空',
  `open_userid` varchar(50) DEFAULT NULL COMMENT '授权管理员的open_userid,可能为空',
  `name` varchar(50) DEFAULT NULL COMMENT '授权管理员的name,可能为空',
  `avatar` varchar(500) DEFAULT NULL,
  `state` varchar(100) DEFAULT NULL COMMENT '安装应用时,扫码或者授权链接中带的state值。详见state说明',
  `suiteId` varchar(30) DEFAULT NULL COMMENT '模板ID',
  `AuthCode` varchar(512) DEFAULT NULL COMMENT '临时授权码',
  `permanent_code` varchar(512) DEFAULT NULL COMMENT '企业微信永久授权码',
  `auth_corp_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '授权方企业信息(json字符串)',
  `auth_state` varchar(30) NOT NULL DEFAULT '0' COMMENT '授权状态(0:未授权;1:已授权;2:已取消;)',
  `url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '代开发应用回调URL',
  `token` varchar(200) DEFAULT NULL COMMENT 'token回调',
  `encodingAESKey` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'encodingAESKey',
  `appid` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ik_qy_auth_corp_info_corpid` (`corpid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业微信-授权方企业信息';

DROP TABLE IF EXISTS `qy_department`;

CREATE TABLE `qy_department` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键编号',
  `oper_id` int DEFAULT NULL COMMENT '操作序号',
  `parentid` varchar(30) DEFAULT NULL COMMENT '父部门id。根部门为1',
  `department_id` varchar(30) DEFAULT NULL COMMENT '创建的部门id',
  `name` varchar(100) DEFAULT NULL COMMENT '部门名称',
  `name_en` varchar(100) DEFAULT NULL COMMENT '英文名称',
  `department_leader` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '部门负责人的UserID',
  `department_order` varchar(30) DEFAULT NULL COMMENT '在父部门中的次序值。order值大的排序靠前。值范围是[0, 2^32)',
  `enable` varchar(2) NOT NULL DEFAULT '1' COMMENT '有效标志(1-有效,0-无效)',
  `corpid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '企业微信id',
  `appid` varchar(30) DEFAULT NULL COMMENT '应用ID',
  `cid` int DEFAULT NULL COMMENT '公司ID',
  `creator_id` BIGINT NOT NULL DEFAULT 0 COMMENT '创建者ID',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater_id` BIGINT NOT NULL DEFAULT 0 COMMENT '更新者ID',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志(0存在 1删除)',
  PRIMARY KEY (`id`),
  KEY `ik_qy_department_department_id` (`department_id`),
  KEY `ik_qy_department_cid` (`corpid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业微信-部门信息';

DROP TABLE IF EXISTS `qy_message`;

CREATE TABLE `qy_message` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键编号',
  `oper_id` int DEFAULT NULL COMMENT '操作序号',
  `send_time` datetime NOT NULL COMMENT '发送时间',
  `corpid` varchar(50) NOT NULL COMMENT '授权方企业 corpid',
  `appid` varchar(30) NOT NULL COMMENT '应用ID',
  `touser` text COMMENT '指定接收消息的成员,成员ID列表(多个接收者用‘|’分隔,最多支持1000个)。\r\n            特殊情况:指定为"@all",则向该企业应用的全部成员发送',
  `toparty` text COMMENT '指定接收消息的部门,部门ID列表,多个接收者用‘|’分隔,最多支持100个。\r\n            当touser为"@all"时忽略本参数',
  `totag` text COMMENT '指定接收消息的标签,标签ID列表,多个接收者用‘|’分隔,最多支持100个。\r\n            当touser为"@all"时忽略本参数',
  `msgtype` varchar(30) NOT NULL COMMENT '消息类型(text)',
  `agentid` varchar(30) DEFAULT NULL COMMENT '企业应用的id',
  `message` text COMMENT '消息内容(JSON数据)',
  `safe` varchar(10) DEFAULT NULL COMMENT '表示是否是保密消息,0表示可对外分享,1表示不能分享且内容显示水印,默认为0',
  `enable_id_trans` varchar(10) DEFAULT NULL COMMENT '表示是否开启id转译,0表示否,1表示是,默认0。仅第三方应用需要用到,企业自建应用可以忽略。',
  `enable_duplicate_check` varchar(10) DEFAULT NULL COMMENT '表示是否开启重复消息检查,0表示否,1表示是,默认0',
  `duplicate_check_interval` varchar(10) DEFAULT NULL COMMENT '表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时',
  `errcode` varchar(30) DEFAULT NULL COMMENT '返回码',
  `errmsg` varchar(1000) DEFAULT NULL COMMENT '对返回码的文本描述内容',
  `invaliduser` text COMMENT '不合法的userid,不区分大小写,统一转为小写',
  `invalidparty` text COMMENT '不合法的partyid',
  `invalidtag` text COMMENT '不合法的标签id',
  `unlicenseduser` text COMMENT '没有基础接口许可(包含已过期)的userid',
  `msgid` varchar(100) DEFAULT NULL COMMENT '消息id,用于撤回应用消息',
  `response_code` varchar(1000) DEFAULT NULL COMMENT '仅消息类型为“按钮交互型”,“投票选择型”和“多项选择型”的模板卡片消息返回,应用可使用response_code调用更新模版卡片消息接口,72小时内有效,且只能使用一次',
  `send_jsondata` text COMMENT '消息推送JSON内容',
  `recall_state` varchar(10) DEFAULT '0' COMMENT '撤回状态(0:未撤回;1:已撤回;)',
  `recall_time` datetime DEFAULT NULL COMMENT '撤回时间',
  `recall_errcode` varchar(30) DEFAULT NULL COMMENT '撤回,返回码',
  `recall_errmsg` varchar(1000) DEFAULT NULL COMMENT '撤回,对返回码的文本描述内容',
  `cid` int NOT NULL COMMENT '公司ID',
  `creator_id` BIGINT NOT NULL DEFAULT 0 COMMENT '创建者ID',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater_id` BIGINT NOT NULL DEFAULT 0 COMMENT '更新者ID',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志(0存在 1删除)',
  PRIMARY KEY (`id`),
  KEY `ik_qy_message_cid` (`cid`),
  KEY `ik_qy_message_corpid` (`corpid`),
  KEY `ik_qy_message_msgtype` (`msgtype`),
  KEY `ik_qy_message_msgid` (`msgid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业微信-消息推送';

DROP TABLE IF EXISTS `qy_template`;

CREATE TABLE `qy_template` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键编号',
  `oper_id` int DEFAULT NULL COMMENT '操作序号',
  `corpid` varchar(50) DEFAULT NULL COMMENT '服务商企业ID corpid',
  `corp_name` varchar(100) DEFAULT NULL COMMENT '服务商名称',
  `suiteId` varchar(30) DEFAULT NULL COMMENT '模板ID',
  `secret` varchar(100) DEFAULT NULL COMMENT '模板Secret',
  `url` varchar(100) DEFAULT NULL COMMENT '代开发模板回调URL',
  `token` varchar(50) DEFAULT NULL COMMENT 'Token',
  `encodingAESKey` varchar(100) DEFAULT NULL COMMENT 'EncodingAESKey',
  `SuiteTicket` varchar(512) DEFAULT NULL COMMENT 'Ticket内容,最长为512字节',
  `gettoken_time` datetime DEFAULT NULL COMMENT '获取时间',
  `suite_access_token` varchar(512) DEFAULT NULL COMMENT '第三方或者代开发应用access_token,最长为512字节',
  `expires_in` int DEFAULT NULL COMMENT '凭证的有效时间(秒)',
  `log_state` varchar(10) DEFAULT '0' COMMENT '日志输出状态(0:不输出;1:输出;)',
  `enable` varchar(2) NOT NULL DEFAULT '1' COMMENT '有效标志(1-有效,0-无效)',
  `appid` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ik_qy_template_suiteId` (`suiteId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业微信-代开发应用模板信息';

DROP TABLE IF EXISTS `qy_user`;

CREATE TABLE `qy_user` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键编号',
  `oper_id` int DEFAULT NULL COMMENT '操作序号',
  `open_userid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '全局唯一',
  `userid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '成员UserID。对应管理端的账号,企业内必须唯一。不区分大小写',
  `name` varchar(30) DEFAULT NULL COMMENT '成员名称',
  `mobile` varchar(30) DEFAULT NULL COMMENT '手机号码',
  `department` varchar(100) DEFAULT NULL COMMENT '成员所属部门id列表',
  `user_order` varchar(100) DEFAULT NULL COMMENT '部门内的排序值,默认为0',
  `position` varchar(30) DEFAULT NULL COMMENT '职务信息',
  `gender` varchar(10) DEFAULT NULL COMMENT '性别。0表示未定义,1表示男性,2表示女性。',
  `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
  `biz_mail` varchar(100) DEFAULT NULL COMMENT '企业邮箱',
  `is_leader_in_dept` varchar(100) DEFAULT NULL COMMENT '表示在所在的部门内是否为部门负责人,数量与department一致',
  `direct_leader` varchar(30) DEFAULT NULL COMMENT '直属上级UserID',
  `avatar` varchar(500) DEFAULT NULL,
  `thumb_avatar` varchar(100) DEFAULT NULL COMMENT '头像缩略图url',
  `telephone` varchar(30) DEFAULT NULL COMMENT '座机',
  `alias` varchar(30) DEFAULT NULL COMMENT '别名',
  `extattr` varchar(300) DEFAULT NULL COMMENT '扩展属性',
  `status` varchar(10) DEFAULT NULL COMMENT '激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业。',
  `qr_code` varchar(100) DEFAULT NULL COMMENT '员工个人二维码',
  `external_profile` varchar(300) DEFAULT NULL COMMENT '成员对外属性',
  `external_position` varchar(30) DEFAULT NULL COMMENT '对外职务',
  `address` varchar(300) DEFAULT NULL COMMENT '地址',
  `main_department` varchar(30) DEFAULT NULL COMMENT '主部门,仅当应用对主部门有查看权限时返回。',
  `enable` varchar(2) NOT NULL DEFAULT '1' COMMENT '有效标志(1-有效,0-无效)',
  `corpid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '企业微信id',
  `appid` varchar(30) DEFAULT NULL COMMENT '应用ID',
  `cid` int DEFAULT NULL COMMENT '公司ID',
  `creator_id` BIGINT NOT NULL DEFAULT 0 COMMENT '创建者ID',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater_id` BIGINT NOT NULL DEFAULT 0 COMMENT '更新者ID',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志(0存在 1删除)',
  PRIMARY KEY (`id`),
  KEY `ik_qy_user_cid` (`corpid`),
  KEY `ik_qy_user_userid` (`userid`),
  KEY `ik_qy_user_mobile` (`mobile`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业微信-人员信息';

DROP TABLE IF EXISTS `shop_order`;

CREATE TABLE `shop_order` (
  `order_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '订单唯一ID',
  `ucid` VARCHAR(32) DEFAULT NULL COMMENT 'ucid',
  `openid` VARCHAR(32) NOT NULL COMMENT 'openid',
  `trade_id` VARCHAR(32) NULL COMMENT '支付网关交易id',
  `total_amount` DECIMAL(15,2) NOT NULL COMMENT '订单总金额',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '订单状态(1待付款 2已付款 3已发货 4已完成 5已取消)',
  `pay_status` TINYINT NOT NULL DEFAULT 1 COMMENT '支付状态(1未支付 2已支付 3退款中 4已退款)',
  `payment_method` VARCHAR(32) DEFAULT NULL COMMENT '支付方式',
  `pay_time` DATETIME DEFAULT NULL COMMENT '支付时间',
  `creator_id` BIGINT NOT NULL DEFAULT 0 COMMENT '创建者ID',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater_id` BIGINT NOT NULL DEFAULT 0 COMMENT '更新者ID',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志(0存在 1删除)',
  PRIMARY KEY (`order_id`),
  KEY `idx_status` (`status`),
  KEY `idx_pay_status` (`pay_status`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品订单表';

DROP TABLE IF EXISTS `shop_order_goods`;

CREATE TABLE `shop_order_goods` (
  `order_goods_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '订单商品唯一ID',
  `order_id` BIGINT NOT NULL COMMENT '关联订单ID',
  `goods_id` BIGINT NOT NULL COMMENT '关联商品ID',
  `quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量',
  `price` DECIMAL(15,2) NOT NULL COMMENT '购买时单价',
  `total_amount` DECIMAL(15,2) NOT NULL COMMENT '商品总金额',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '商品状态(1正常 2已退货 3已换货)',
  `creator_id` BIGINT NOT NULL DEFAULT 0 COMMENT '创建者ID',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater_id` BIGINT NOT NULL DEFAULT 0 COMMENT '更新者ID',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志(0存在 1删除)',
  PRIMARY KEY (`order_goods_id`),
  KEY `idx_order` (`order_id`),
  KEY `idx_goods` (`goods_id`),
  KEY `idx_status` (`status`),
  KEY `idx_create_time` (`create_time`),
  CONSTRAINT `fk_order_goods_order` FOREIGN KEY (`order_id`) REFERENCES `shop_order` (`order_id`),
  CONSTRAINT `fk_order_goods_goods` FOREIGN KEY (`goods_id`) REFERENCES `shop_goods` (`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单商品明细表';