-- =====================================================
-- 积分订单售后单表 fs_integral_after_sales
-- 创建时间：2026-07-21
-- 说明：参考 fs_store_after_sales_scrm 表结构，针对积分订单特性优化
--       - 新增 refund_integral 字段记录退回积分
--       - 新增 refund_amount 字段记录退款金额
--       - 不含 store_id（积分订单无店铺概念）
--       - 不含 is_package / package_json（积分订单无套餐概念）
-- =====================================================

DROP TABLE IF EXISTS `fs_integral_after_sales`;
CREATE TABLE `fs_integral_after_sales` (
    `id`                BIGINT          NOT NULL                COMMENT '主键',
    `order_id`          BIGINT          DEFAULT NULL            COMMENT '积分订单ID',
    `order_code`        VARCHAR(64)     NOT NULL                COMMENT '订单编号',
    `user_id`           BIGINT          DEFAULT NULL            COMMENT '用户ID',
    `company_id`        BIGINT          DEFAULT NULL            COMMENT '企业ID',
    `company_user_id`   BIGINT          DEFAULT NULL            COMMENT '企业员工ID',
    `refund_amount`     DECIMAL(10,2)   DEFAULT '0.00'          COMMENT '退款金额',
    `refund_integral`   BIGINT          DEFAULT '0'             COMMENT '退回积分',
    `service_type`      TINYINT         DEFAULT 0               COMMENT '服务类型 0仅退款 1退货退款',
    `reasons`           VARCHAR(255)    DEFAULT NULL            COMMENT '申请原因',
    `explains`          VARCHAR(500)    DEFAULT NULL            COMMENT '说明',
    `explain_img`       VARCHAR(1000)   DEFAULT NULL            COMMENT '说明图片，多个用逗号分割',
    `shipper_code`      VARCHAR(50)     DEFAULT NULL            COMMENT '物流公司编码',
    `delivery_sn`       VARCHAR(64)     DEFAULT NULL            COMMENT '物流单号',
    `delivery_name`     VARCHAR(100)    DEFAULT NULL            COMMENT '物流名称',
    `delivery_code`     VARCHAR(50)     DEFAULT NULL            COMMENT '物流公司编码（兼容字段）',
    `status`            TINYINT         DEFAULT 0               COMMENT '审核状态 0已提交待平台审核 1平台已审核 2用户已发货待仓库审核 3仓库已审核待财务审核 4退款中（财务已发起退款，等待回调确认） 5退款成功（回调确认完成）',
    `sales_status`      TINYINT         DEFAULT 0               COMMENT '售后状态 0正常 1用户取消 2商家拒绝 3已完成',
    `order_status`      TINYINT         DEFAULT NULL            COMMENT '订单当前状态（冗余记录）',
    `consignee`         VARCHAR(100)    DEFAULT NULL            COMMENT '商家收货人',
    `phone_number`      VARCHAR(20)     DEFAULT NULL            COMMENT '商家手机号',
    `address`           VARCHAR(500)    DEFAULT NULL            COMMENT '商家地址',
    `consignee_phone`   VARCHAR(20)     DEFAULT NULL            COMMENT '商家收货电话',
    `dept_id`           BIGINT          DEFAULT NULL            COMMENT '部门ID',
    `operator`          VARCHAR(64)     DEFAULT NULL            COMMENT '操作人',
    `remark`            VARCHAR(500)    DEFAULT NULL            COMMENT '备注',
    `is_del`            TINYINT         DEFAULT 0               COMMENT '逻辑删除 0正常 1已删除',
    `create_by`         VARCHAR(64)     DEFAULT NULL            COMMENT '创建者',
    `create_time`       DATETIME        DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by`         VARCHAR(64)     DEFAULT NULL            COMMENT '更新者',
    `update_time`       DATETIME        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_order_id`      (`order_id`),
    KEY `idx_order_code`    (`order_code`),
    KEY `idx_user_id`       (`user_id`),
    KEY `idx_company_id`    (`company_id`),
    KEY `idx_status`        (`status`, `sales_status`),
    KEY `idx_create_time`   (`create_time`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '积分订单售后单';


-- =====================================================
-- 菜单与权限初始化
-- 说明：以下 menu_id 使用占位值，执行前请根据实际 sys_menu 表的 max(menu_id) 调整
--       parent_id 需替换为"积分订单"菜单的 menu_id（可执行下方查询获取）
--       SELECT menu_id, menu_name FROM sys_menu WHERE menu_name LIKE '%积分%';
-- =====================================================

-- 1. 主菜单：积分售后管理（目录下挂载页面）
-- 注意：parent_id 请替换为实际的"积分订单"父菜单ID
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (3001, '积分售后管理', 0, 50, 'integralAfterSales', 'his/integralAfterSales/index', 1, 0, 'C', '0', '0', 'his:integralAfterSales:list', 'shopping', 'admin', NOW(), '积分订单售后管理菜单');

-- 2. 按钮权限
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (3002, '积分售后查询', 3001, 1, '#', '', 1, 0, 'F', '0', '0', 'his:integralAfterSales:query', '#', 'admin', NOW(), '');

INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (3003, '积分售后导出', 3001, 2, '#', '', 1, 0, 'F', '0', '0', 'his:integralAfterSales:export', '#', 'admin', NOW(), '');

INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (3004, '积分售后平台审核', 3001, 3, '#', '', 1, 0, 'F', '0', '0', 'his:integralAfterSales:audit', '#', 'admin', NOW(), '');

INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (3005, '积分售后撤销', 3001, 4, '#', '', 1, 0, 'F', '0', '0', 'his:integralAfterSales:cancel', '#', 'admin', NOW(), '');

INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (3006, '积分售后财务退款', 3001, 5, '#', '', 1, 0, 'F', '0', '0', 'his:integralAfterSales:refund', '#', 'admin', NOW(), '');

INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (3007, '积分售后编辑物流', 3001, 6, '#', '', 1, 0, 'F', '0', '0', 'his:integralAfterSales:edit', '#', 'admin', NOW(), '');


-- =====================================================
-- 积分售后独立状态字典 integral_after_sales_status
-- 创建时间：2026-07-24
-- 说明：积分售后使用独立字典，与商城售后(store_after_sales_status)隔离
--       仅退款(serviceType=0): 0→1→4→5
--       退款退货(serviceType=1): 0→1→2→3→4→5
-- =====================================================

-- 1. 字典类型
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
VALUES ('积分售后状态', 'integral_after_sales_status', '0', 'admin', NOW(), '积分订单售后审核状态字典');

-- 2. 字典数据
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
VALUES
    (0, '已提交', '0', 'integral_after_sales_status', '', 'info', 'N', '0', 'admin', NOW(), '用户提交售后申请，待平台审核'),
    (1, '已审核', '1', 'integral_after_sales_status', '', 'warning', 'N', '0', 'admin', NOW(), '平台已审核，仅退款等待财务退款/退款退货等待用户发货'),
    (2, '已发货', '2', 'integral_after_sales_status', '', 'warning', 'N', '0', 'admin', NOW(), '用户已寄回商品，待仓库审核'),
    (3, '仓库已审核', '3', 'integral_after_sales_status', '', 'primary', 'N', '0', 'admin', NOW(), '仓库已确认收货，待财务退款'),
    (4, '退款中', '4', 'integral_after_sales_status', '', 'danger', 'N', '0', 'admin', NOW(), '财务已发起退款，等待回调确认'),
    (5, '退款成功', '5', 'integral_after_sales_status', '', 'success', 'N', '0', 'admin', NOW(), '退款回调确认完成，售后流程结束');

-- 3. 数据迁移说明
--    若已有旧数据使用 status=3(原退款成功) 或 status=4(原退款成功)，需根据实际业务状态调整：
--    - 已发起退款但未回调成功的：status=4(退款中)
--    - 回调成功的：status=5(退款成功)
-- UPDATE fs_integral_after_sales SET status = 5 WHERE status = 4 AND sales_status = 3;
-- UPDATE fs_integral_after_sales SET status = 4 WHERE status = 3 AND sales_status = 0;

