-- 拉卡拉进件、收款账户及远端操作记录

CREATE TABLE IF NOT EXISTS `xhLakalaApplication` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '申请主键ID',
    `mainId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '所属主体ID',
    `shopId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '所属门店ID',
    `accountId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '关联拉卡拉收款账户ID，首次进件草稿为0',
    `type` varchar(32) NOT NULL DEFAULT 'onboarding' COMMENT '申请类型：onboarding首次进件，settlement_change结算账户变更',
    `status` varchar(32) NOT NULL DEFAULT 'DRAFT' COMMENT '申请状态：草稿、合同待签、待审核、已驳回、已通过等',
    `currentStep` tinyint(3) unsigned NOT NULL DEFAULT 1 COMMENT '五步进件表单当前步骤，范围1至5',
    `formData` mediumtext COMMENT '当前申请表单及附件数据JSON',
    `merchantNo` varchar(64) NOT NULL DEFAULT '' COMMENT '拉卡拉商户号',
    `customerNo` varchar(64) NOT NULL DEFAULT '' COMMENT '拉卡拉客户号',
    `shopNo` varchar(64) NOT NULL DEFAULT '' COMMENT '拉卡拉网点号',
    `contractOrderNo` varchar(64) NOT NULL DEFAULT '' COMMENT '电子合同申请订单号',
    `contractApplyId` varchar(64) NOT NULL DEFAULT '' COMMENT '电子合同申请ID',
    `contractNo` varchar(64) NOT NULL DEFAULT '' COMMENT '签约完成后的电子合同编号',
    `contractStatus` varchar(32) NOT NULL DEFAULT '' COMMENT '电子合同签约状态',
    `reviewRelatedId` varchar(64) NOT NULL DEFAULT '' COMMENT '拉卡拉审核关联ID，用于查询申请审核状态',
    `rejectReason` varchar(500) NOT NULL DEFAULT '' COMMENT '最近一次审核驳回原因',
    `versionNo` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '当前已提交版本号',
    `createTime` datetime NOT NULL COMMENT '创建时间',
    `updateTime` datetime NOT NULL COMMENT '最后更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_main_shop` (`mainId`, `shopId`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='拉卡拉进件申请';

CREATE TABLE IF NOT EXISTS `xhLakalaApplicationVersion` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '版本快照主键ID',
    `applicationId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '关联申请主键ID',
    `mainId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '所属主体ID',
    `versionNo` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '申请版本号，同一申请内递增',
    `type` varchar(32) NOT NULL DEFAULT '' COMMENT '版本类型：首次提交、驳回重提或结算账户变更',
    `formData` mediumtext COMMENT '提交时不可变表单及附件快照JSON',
    `requestData` mediumtext COMMENT '提交至拉卡拉的请求数据JSON',
    `responseData` mediumtext COMMENT '拉卡拉提交响应数据JSON',
    `createTime` datetime NOT NULL COMMENT '版本创建时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_application_version` (`applicationId`, `versionNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='拉卡拉进件版本快照';

CREATE TABLE IF NOT EXISTS `xhLakalaAccount` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '收款账户主键ID',
    `mainId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '所属主体ID',
    `shopId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '所属门店ID',
    `applicationId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '认证通过的来源进件申请ID',
    `merchantNo` varchar(64) NOT NULL DEFAULT '' COMMENT '拉卡拉商户号',
    `customerNo` varchar(64) NOT NULL DEFAULT '' COMMENT '拉卡拉客户号',
    `shopNo` varchar(64) NOT NULL DEFAULT '' COMMENT '拉卡拉网点号',
    `accountName` varchar(100) NOT NULL DEFAULT '' COMMENT '银行结算账户开户名',
    `accountNo` varchar(64) NOT NULL DEFAULT '' COMMENT '银行结算账号',
    `bankName` varchar(150) NOT NULL DEFAULT '' COMMENT '开户银行名称',
    `accountType` varchar(8) NOT NULL DEFAULT '' COMMENT '结算账户类型：对公或对私',
    `licenseName` varchar(150) NOT NULL DEFAULT '' COMMENT '营业执照名称',
    `identityExpire` varchar(32) NOT NULL DEFAULT '' COMMENT '法人或结算人身份证有效期',
    `scanTermNo` varchar(64) NOT NULL DEFAULT '' COMMENT 'WECHAT_PAY扫码终端号',
    `b2bTermNo` varchar(64) NOT NULL DEFAULT '' COMMENT 'B2B_SYT批发终端号',
    `wxAuthorizeState` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '微信认证状态: 0未认证，1已认证（来自支付宝微信认证状态查询接口）',
    `zfbAuthorizeState` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '支付宝认证状态：0未认证，1已认证（来自支付宝微信认证状态查询接口）',
    `status` varchar(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '账户状态',
    `isCurrent` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '是否为当前门店收款账户：0否，1是',
    `createTime` datetime NOT NULL COMMENT '创建时间',
    `updateTime` datetime NOT NULL COMMENT '最后更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_main_merchant` (`mainId`, `merchantNo`),
    KEY `idx_shop_current` (`shopId`, `isCurrent`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='拉卡拉收款账户';

CREATE TABLE IF NOT EXISTS `xhLakalaOperation` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '远端操作主键ID',
    `applicationId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '关联申请主键ID',
    `accountId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '关联拉卡拉收款账户ID',
    `mainId` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '所属主体ID',
    `operationType` varchar(40) NOT NULL DEFAULT '' COMMENT '远端操作类型：合同申请、首次进件、增终或结算变更等',
    `bizType` varchar(32) NOT NULL DEFAULT '' COMMENT '业务子类型，如WECHAT_PAY或B2B_SYT',
    `status` varchar(32) NOT NULL DEFAULT 'PREPARE' COMMENT '远端操作状态',
    `reviewRelatedId` varchar(64) NOT NULL DEFAULT '' COMMENT '拉卡拉审核关联ID，用于幂等和审核查询',
    `requestData` mediumtext COMMENT '远端操作请求数据JSON',
    `responseData` mediumtext COMMENT '远端操作响应数据JSON',
    `errorMessage` varchar(500) NOT NULL DEFAULT '' COMMENT '远端操作失败错误信息',
    `createTime` datetime NOT NULL COMMENT '创建时间',
    `updateTime` datetime NOT NULL COMMENT '最后更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_application_operation` (`applicationId`, `operationType`, `bizType`),
    KEY `idx_review_related` (`reviewRelatedId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='拉卡拉远端操作';
