Selaa lähdekoodia

创建推荐规则表

jintao.geng 1 kuukausi sitten
vanhempi
commit
64be8c351d

+ 0 - 751
mango-application/src/main/resources/db/migration/V1.1_mongo_order_create.sql

@@ -1,751 +0,0 @@
--- 订单管理表结构
--- 1. 订单主表(t_rating_order)
-CREATE TABLE "public"."t_rating_order" (
-                                           id BIGSERIAL PRIMARY KEY,
-                                           "order_no" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
-                                           "user_id" int8 NOT NULL,
-                                           "total_amount" numeric(10,2) NOT NULL,
-                                           "discount_amount" numeric(10,2) DEFAULT 0.00,
-                                           "pay_amount" numeric(10,2) NOT NULL,
-                                           "coupon_id" int8,
-                                           "order_status" int4 NOT NULL,
-                                           "evaluate_type" int4 NOT NULL,
-                                           "ship_type" varchar(32) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                           "logistics_company" varchar(32) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                           "logistics_no" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                           "return_address_id" int8 NOT NULL,
-                                           "remark" text COLLATE "pg_catalog"."default",
-                                           "extend_fields" text COLLATE "pg_catalog"."default",
-                                           "version" int4 DEFAULT 1,
-                                           "order_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                           "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                           "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                           "create_user" int8 NOT NULL,
-                                           "update_user" int8 NOT NULL,
-                                           "del_flag" int2 DEFAULT 0,
-                                           "card_style" int4,
-                                           "evaluate_efficiency" int4,
-                                           "in_status" int4,
-                                           "in_time" timestamp(6),
-                                           "card_quantity" int4 DEFAULT 0,
-                                           "send_back_ship_time" timestamp(6) DEFAULT NULL::timestamp without time zone,
-                                           "platform_send_back_no" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                           CONSTRAINT "uk_rating_order_no" UNIQUE ("order_no")
-)
-;
-
-ALTER TABLE "public"."t_rating_order"
-    OWNER TO "postgres";
-
-CREATE INDEX "idx_rating_order_create_time" ON "public"."t_rating_order" USING btree (
-    "create_time" "pg_catalog"."timestamp_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_rating_order_evaluate_type" ON "public"."t_rating_order" USING btree (
-    "evaluate_type" "pg_catalog"."int4_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_rating_order_status" ON "public"."t_rating_order" USING btree (
-    "order_status" "pg_catalog"."int4_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_rating_order_user_id" ON "public"."t_rating_order" USING btree (
-    "user_id" "pg_catalog"."int8_ops" ASC NULLS LAST
-    );
-
-COMMENT ON COLUMN "public"."t_rating_order"."id" IS '主键ID';
-
-COMMENT ON COLUMN "public"."t_rating_order"."order_no" IS '订单编号(编号生成规则待定)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."user_id" IS '用户ID(关联t_user.id)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."total_amount" IS '订单总金额';
-
-COMMENT ON COLUMN "public"."t_rating_order"."discount_amount" IS '优惠金额';
-
-COMMENT ON COLUMN "public"."t_rating_order"."pay_amount" IS '实付金额';
-
-COMMENT ON COLUMN "public"."t_rating_order"."coupon_id" IS '使用的优惠券ID(关联t_coupon.id)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."order_status" IS '订单状态 (100 - 待支付,101 - 已支付待寄出,102 - 已支付已寄出,201 - 订单超时,202 - 退款中,203 - 用户取消,204 - 退款完成,205 - 退款失败,301 - 预评 - 待预审,302 - 预评 - 预审通过,303 - 预评 - 预审未通过,304 - 送评 - 待送评,305 - 送评 - 待送评未支付,306 - 送评 - 待送评已支付,307 - 送评 - 送评中,401 - 评级中 - 拍照,402 - 评级中 - 打分,403 - 评级中 - 生成报告,404 - 评级中 - 审核报告,405 - 评级中 - 审核报告通过,406 - 评级中 - 审核报告未通过,501 - 打印标签,502 - 封装,503 - 打包发货,504 - 已发货,505 - 订单完成)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."evaluate_type" IS '评级类型(枚举:1-自评级-TCG,2-自评级-体育卡牌,3-PSA-体育卡牌)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."ship_type" IS '寄出方式(枚举:SF_VISIT-顺丰上门,SELF_SEND-自己寄出)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."logistics_company" IS '快递公司(如SF-顺丰)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."logistics_no" IS '物流单号';
-
-COMMENT ON COLUMN "public"."t_rating_order"."return_address_id" IS '寄回地址ID(关联t_user_address.id)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."remark" IS '订单备注';
-
-COMMENT ON COLUMN "public"."t_rating_order"."extend_fields" IS '扩展字段(动态存储如保价金额、预估重量等)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."version" IS '乐观锁版本号';
-
-COMMENT ON COLUMN "public"."t_rating_order"."order_time" IS '下单时间';
-
-COMMENT ON COLUMN "public"."t_rating_order"."create_time" IS '创建时间';
-
-COMMENT ON COLUMN "public"."t_rating_order"."update_time" IS '更新时间';
-
-COMMENT ON COLUMN "public"."t_rating_order"."create_user" IS '创建人(用户ID)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."update_user" IS '更新人(用户ID)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."del_flag" IS '逻辑删除(0=正常,1=删除)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."card_style" IS '评级款式(枚举:1-普通款,2-设计款,3-高端款)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."evaluate_efficiency" IS '评级时效(枚举:1-普通,2-快速,3-闪评)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."in_status" IS '入库状态(枚举:1-未入库,2-已签收,3-已入库)';
-
-COMMENT ON COLUMN "public"."t_rating_order"."in_time" IS '入库时间';
-
-COMMENT ON COLUMN "public"."t_rating_order"."card_quantity" IS '卡片数量';
-
-COMMENT ON COLUMN "public"."t_rating_order"."send_back_ship_time" IS '平台寄回发货时间';
-
-COMMENT ON COLUMN "public"."t_rating_order"."platform_send_back_no" IS '平台寄回单号';
-
-COMMENT ON TABLE "public"."t_rating_order" IS '订单主表 ';
-
-
--- 2. 订单子卡表(t_rating_order_card)
-CREATE TABLE "public"."t_rating_order_card" (
-                                                id BIGSERIAL PRIMARY KEY,
-                                                "order_no" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
-                                                "card_no" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
-                                                "card_status" int2,
-                                                "card_style" int8,
-                                                "evaluate_efficiency" int2,
-                                                "score_threshold" numeric(3,1) DEFAULT NULL::numeric,
-                                                "is_original_return" bool DEFAULT false,
-                                                "front_image_url" varchar(255) COLLATE "pg_catalog"."default",
-                                                "back_image_url" varchar(255) COLLATE "pg_catalog"."default",
-                                                "recognized_info" text COLLATE "pg_catalog"."default",
-                                                "evaluate_report" text COLLATE "pg_catalog"."default",
-                                                "evaluate_no" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                                "finished_image_url" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                                "version" int4 DEFAULT 1,
-                                                "logistics_company" varchar(32) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                                "logistics_no" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                                "last_time_ship" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
-                                                "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                                "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                                "del_flag" int2 NOT NULL DEFAULT 0,
-                                                "user_id" int8,
-                                                "scheme_no" varchar(64) COLLATE "pg_catalog"."default",
-                                                CONSTRAINT "uk_rating_card_no" UNIQUE ("card_no")
-)
-;
-
-ALTER TABLE "public"."t_rating_order_card"
-    OWNER TO "postgres";
-
-CREATE INDEX "idx_rating_card_evaluate_no" ON "public"."t_rating_order_card" USING btree (
-    "evaluate_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_rating_card_order_id" ON "public"."t_rating_order_card" USING btree (
-    "order_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_rating_card_status" ON "public"."t_rating_order_card" USING btree (
-    "card_status" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-    );
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."id" IS '主键ID';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."order_no" IS '订单编号(关联t_rating_order.order_no)';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."card_no" IS '卡片编号(唯一,如CARD20260107001001)';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."card_status" IS '卡片状态(枚举:100=未开始,101=待寄出,102=已寄出,202=已入库,203=预审未通过,204=预审通过,205=待送评,301=评级中-拍照,302=评级中-打分,303=评级中-生成报告,304=评级中-审核报告,305=评级中-审核报告通过,306=评级中-审核报告未通过,401=打印标签,402=封装评级壳,501=已发货-已寄出,502=完成)';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."card_style" IS '评级款式Id';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."evaluate_efficiency" IS '评级时效(枚举:1-普通,2-快速,3-闪评)';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."score_threshold" IS '评级壳分数阈值(如8.5)';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."is_original_return" IS '是否原卡寄回';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."front_image_url" IS '卡片正面图片URL';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."back_image_url" IS '卡片背面图片URL';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."recognized_info" IS '识别信息(球员/卡种/编号等,如{"player":"库里","series":"2024篮球","number":"100"})';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."evaluate_report" IS '评级报告(评分/子分项/评语等,如{"score":9.0,"subItems":{"centering":9.5},"comment":"品相极佳"})';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."evaluate_no" IS '评级编号(机台/PSA返回的唯一编号)';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."finished_image_url" IS '成品图片URL';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."version" IS '乐观锁版本号';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."logistics_company" IS '物流公司';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."logistics_no" IS '物流单号';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."last_time_ship" IS '最晚发货时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."create_time" IS '创建时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."update_time" IS '更新时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."del_flag" IS '逻辑删除(0=正常,1=删除)';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."user_id" IS '用户id';
-
-COMMENT ON COLUMN "public"."t_rating_order_card"."scheme_no" IS '方案编号/名称';
-
-COMMENT ON TABLE "public"."t_rating_order_card" IS '订单子卡表';
-
-
--- 3. 订单支付表(t_rating_order_pay)
-
-CREATE TABLE "public"."t_rating_order_pay" (
-                                               id BIGSERIAL PRIMARY KEY,
-                                               "order_id" int8 NOT NULL,
-                                               "pay_no" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
-                                               "pay_amount" numeric(10,2) NOT NULL,
-                                               "pay_type" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
-                                               "pay_status" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
-                                               "pay_time" timestamp(6),
-                                               "trade_no" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                               "extend_fields" text COLLATE "pg_catalog"."default" DEFAULT '{}'::jsonb,
-                                               "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                               "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                               "del_flag" int2 DEFAULT 0,
-                                               CONSTRAINT "uk_rating_pay_no" UNIQUE ("pay_no")
-)
-;
-
-ALTER TABLE "public"."t_rating_order_pay"
-    OWNER TO "postgres";
-
-CREATE INDEX "idx_rating_pay_order_id" ON "public"."t_rating_order_pay" USING btree (
-    "order_id" "pg_catalog"."int8_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_rating_pay_status" ON "public"."t_rating_order_pay" USING btree (
-    "pay_status" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-    );
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."id" IS '主键ID';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."order_id" IS '订单ID(关联t_rating_order.id)';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."pay_no" IS '支付单号(唯一)';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."pay_amount" IS '支付金额';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."pay_type" IS '支付方式(枚举:WECHAT_PAY-微信支付)';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."pay_status" IS '支付状态(枚举:PENDING-待支付,SUCCESS-支付成功,FAILED-支付失败,TIMEOUT-支付超时)';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."pay_time" IS '支付时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."trade_no" IS '第三方支付流水号';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."extend_fields" IS '扩展字段(支付额外信息)';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."create_time" IS '创建时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."update_time" IS '更新时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_pay"."del_flag" IS '逻辑删除(0=正常,1=删除)';
-
-COMMENT ON TABLE "public"."t_rating_order_pay" IS '订单支付表 ';
-
--- 4. 订单退款表(t_rating_order_refund)
-
-CREATE TABLE "public"."t_rating_order_refund" (
-                                                  id BIGSERIAL PRIMARY KEY,
-                                                  "refund_no" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
-                                                  "order_id" int8 NOT NULL,
-                                                  "card_id" int8,
-                                                  "refund_amount" numeric(10,2) NOT NULL,
-                                                  "refund_type" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
-                                                  "refund_status" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
-                                                  "refund_reason" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                                  "fail_reason" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                                  "refund_time" timestamp(6),
-                                                  "trade_no" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                                  "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                                  "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                                  "del_flag" int2 DEFAULT 0,
-                                                  CONSTRAINT "uk_rating_refund_no" UNIQUE ("refund_no")
-)
-;
-
-ALTER TABLE "public"."t_rating_order_refund"
-    OWNER TO "postgres";
-
-CREATE INDEX "idx_rating_refund_order_id" ON "public"."t_rating_order_refund" USING btree (
-    "order_id" "pg_catalog"."int8_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_rating_refund_status" ON "public"."t_rating_order_refund" USING btree (
-    "refund_status" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-    );
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."id" IS '主键ID';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."refund_no" IS '退款单号(唯一)';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."order_id" IS '订单ID(关联t_rating_order.id)';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."card_id" IS '子卡ID(单卡退款时关联t_rating_order_card.id,整单退款为NULL)';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."refund_amount" IS '退款金额';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."refund_type" IS '退款类型(枚举:FULL_REFUND-整单退款,PART_REFUND-部分退款,PRE_REVIEW_FAILED_REFUND-预审未通过退款)';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."refund_status" IS '退款状态(枚举:REFUNDING-退款中,SUCCESS-退款成功,FAILED-退款失败)';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."refund_reason" IS '退款原因';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."fail_reason" IS '退款失败原因';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."refund_time" IS '退款完成时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."trade_no" IS '第三方退款流水号';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."create_time" IS '创建时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."update_time" IS '更新时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_refund"."del_flag" IS '逻辑删除(0=正常,1=删除)';
-
-COMMENT ON TABLE "public"."t_rating_order_refund" IS '订单退款表';
-
-
--- 5. 订单操作日志表(t_rating_order_operation_log)
-
-CREATE TABLE "public"."t_rating_order_operation_log" (
-                                                         id BIGSERIAL PRIMARY KEY,                                                         "order_id" int8 NOT NULL,
-                                                         "card_id" int8,
-                                                         "operator_id" int8 NOT NULL,
-                                                         "operator_type" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
-                                                         "operation_type" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
-                                                         "before_status" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
-                                                         "after_status" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
-                                                         "operation_desc" text COLLATE "pg_catalog"."default",
-                                                         "operation_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                                         "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                                         "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                                         "del_flag" int2 DEFAULT 0
-)
-;
-
-ALTER TABLE "public"."t_rating_order_operation_log"
-    OWNER TO "postgres";
-
-CREATE INDEX "idx_rating_operation_order_id" ON "public"."t_rating_order_operation_log" USING btree (
-    "order_id" "pg_catalog"."int8_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_rating_operation_time" ON "public"."t_rating_order_operation_log" USING btree (
-    "operation_time" "pg_catalog"."timestamp_ops" ASC NULLS LAST
-    );
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."id" IS '主键ID';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."order_id" IS '订单ID(关联t_rating_order.id)';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."card_id" IS '子卡ID(关联t_rating_order_card.id)';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."operator_id" IS '操作人ID(用户ID/管理员ID)';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."operator_type" IS '操作人类型(枚举:USER-用户,ADMIN-管理员,SYSTEM-系统)';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."operation_type" IS '操作类型(枚举:CREATE_ORDER-创建订单,PAY-支付,UPDATE_LOGISTICS-更新物流,PRE_REVIEW-预审,EVALUATE-评级,REFUND-退款,SHIP-发货,CONFIRM_RECEIPT-确认收货)';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."before_status" IS '操作前状态';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."after_status" IS '操作后状态';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."operation_desc" IS '操作描述';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."operation_time" IS '操作时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."create_time" IS '创建时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."update_time" IS '更新时间';
-
-COMMENT ON COLUMN "public"."t_rating_order_operation_log"."del_flag" IS '逻辑删除(0=正常,1=删除)';
-
-COMMENT ON TABLE "public"."t_rating_order_operation_log" IS '订单操作日志表';
-
-
--- 6. 球员卡密信息表(t_recognized_info)
-
-CREATE TABLE "public"."t_recognized_info" (
-                                              id BIGSERIAL PRIMARY KEY,
-                                              "card_id" int8,
-                                              "order_no" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
-                                              "player" varchar(128) COLLATE "pg_catalog"."default",
-                                              "year" varchar(32) COLLATE "pg_catalog"."default",
-                                              "series" varchar(128) COLLATE "pg_catalog"."default",
-                                              "card_set" varchar(128) COLLATE "pg_catalog"."default",
-                                              "confidential_id" varchar(64) COLLATE "pg_catalog"."default",
-                                              "limit_id" varchar(64) COLLATE "pg_catalog"."default",
-                                              "create_user" varchar(64) COLLATE "pg_catalog"."default",
-                                              "update_user" varchar(64) COLLATE "pg_catalog"."default",
-                                              "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                              "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                              "del_flag" int2 NOT NULL DEFAULT 0
-)
-;
-
-ALTER TABLE "public"."t_recognized_info"
-    OWNER TO "postgres";
-
-CREATE INDEX "idx_t_recognized_info_card_id" ON "public"."t_recognized_info" USING btree (
-    "card_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_t_recognized_info_del_flag" ON "public"."t_recognized_info" USING btree (
-    "del_flag" "pg_catalog"."int2_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_t_recognized_info_order_no" ON "public"."t_recognized_info" USING btree (
-    "order_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-    );
-
-COMMENT ON COLUMN "public"."t_recognized_info"."id" IS '主键ID';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."card_id" IS '卡ID';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."order_no" IS '订单编号';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."player" IS '球员';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."year" IS '年份';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."series" IS '系列';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."card_set" IS '卡种';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."confidential_id" IS '卡密编号';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."limit_id" IS '限编';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."create_user" IS '创建人';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."update_user" IS '修改人';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."create_time" IS '创建时间';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."update_time" IS '修改时间';
-
-COMMENT ON COLUMN "public"."t_recognized_info"."del_flag" IS '删除标识(0-未删,1-已删)';
-
-COMMENT ON TABLE "public"."t_recognized_info" IS '球员卡密信息表';
-
-
-
--- 7. 用户寄回地址表(t_user_address)
-
-CREATE TABLE "public"."t_user_address" (
-                                           id BIGSERIAL PRIMARY KEY,                                           "user_id" int8,
-                                           "receiver_name" varchar(32) COLLATE "pg_catalog"."default",
-                                           "receiver_phone" varchar(16) COLLATE "pg_catalog"."default",
-                                           "province" varchar(32) COLLATE "pg_catalog"."default",
-                                           "city" varchar(32) COLLATE "pg_catalog"."default",
-                                           "district" varchar(32) COLLATE "pg_catalog"."default",
-                                           "detail_address" varchar(255) COLLATE "pg_catalog"."default",
-                                           "postal_code" varchar(8) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
-                                           "is_default" int2 DEFAULT 0,
-                                           "address_type" varchar(16) COLLATE "pg_catalog"."default" DEFAULT 'NORMAL'::character varying,
-                                           "remark" varchar(128) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
-                                           "create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
-                                           "update_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
-                                           "del_flag" int2 DEFAULT 0
-)
-;
-
-ALTER TABLE "public"."t_user_address"
-    OWNER TO "postgres";
-
-COMMENT ON COLUMN "public"."t_user_address"."id" IS '主键ID 自增';
-
-COMMENT ON COLUMN "public"."t_user_address"."user_id" IS '用户ID,关联用户表t_user.id';
-
-COMMENT ON COLUMN "public"."t_user_address"."receiver_name" IS '收件人姓名';
-
-COMMENT ON COLUMN "public"."t_user_address"."receiver_phone" IS '收件人手机号';
-
-COMMENT ON COLUMN "public"."t_user_address"."province" IS '省份';
-
-COMMENT ON COLUMN "public"."t_user_address"."city" IS '城市';
-
-COMMENT ON COLUMN "public"."t_user_address"."district" IS '区县/行政区';
-
-COMMENT ON COLUMN "public"."t_user_address"."detail_address" IS '详细地址(街道/小区/门牌号)';
-
-COMMENT ON COLUMN "public"."t_user_address"."postal_code" IS '邮政编码(选填)';
-
-COMMENT ON COLUMN "public"."t_user_address"."is_default" IS '是否默认地址 0-否 1-是,用户仅能有1个默认地址';
-
-COMMENT ON COLUMN "public"."t_user_address"."address_type" IS '地址类型 NORMAL-普通地址  COLLECT-代收点';
-
-COMMENT ON COLUMN "public"."t_user_address"."remark" IS '地址备注(例:丰巢柜2号、门卫室代收)';
-
-COMMENT ON COLUMN "public"."t_user_address"."create_time" IS '创建时间';
-
-COMMENT ON COLUMN "public"."t_user_address"."update_time" IS '更新时间';
-
-COMMENT ON COLUMN "public"."t_user_address"."del_flag" IS '逻辑删除 0-正常 1-删除';
-
-COMMENT ON TABLE "public"."t_user_address" IS '用户寄回地址表';
-
-
--- 8. 标签打印记录表(t_print_label_record)
-
-CREATE TABLE "public"."t_print_label_record" (
-                                                 id BIGSERIAL PRIMARY KEY,                                                 "label_title" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
-                                                 "label_content" text COLLATE "pg_catalog"."default" NOT NULL,
-                                                 "print_ip" varchar(30) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                                 "print_user" varchar(30) COLLATE "pg_catalog"."default" NOT NULL,
-                                                 "print_status" int4 DEFAULT 1,
-                                                 "print_msg" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                                 "printer_name" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
-                                                 "create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
-                                                 "del_flag" int4 DEFAULT 0
-)
-;
-
-ALTER TABLE "public"."t_print_label_record"
-    OWNER TO "postgres";
-
-COMMENT ON COLUMN "public"."t_print_label_record"."id" IS '主键ID';
-
-COMMENT ON COLUMN "public"."t_print_label_record"."label_title" IS '标签标题';
-
-COMMENT ON COLUMN "public"."t_print_label_record"."label_content" IS '标签打印内容';
-
-COMMENT ON COLUMN "public"."t_print_label_record"."print_ip" IS '打印操作IP';
-
-COMMENT ON COLUMN "public"."t_print_label_record"."print_user" IS '打印人账号';
-
-COMMENT ON COLUMN "public"."t_print_label_record"."print_status" IS '打印状态 1-成功 2-失败';
-
-COMMENT ON COLUMN "public"."t_print_label_record"."print_msg" IS '打印结果信息';
-
-COMMENT ON COLUMN "public"."t_print_label_record"."printer_name" IS '使用的打印机名称';
-
-COMMENT ON COLUMN "public"."t_print_label_record"."create_time" IS '打印时间';
-
-COMMENT ON COLUMN "public"."t_print_label_record"."del_flag" IS '删除标记 0-未删 1-已删';
-
-COMMENT ON TABLE "public"."t_print_label_record" IS '标签打印记录表';
-
-
-
--- 9. 卡片设计款式模板表(t_card_style_template)
-
-CREATE TABLE "public"."t_card_style_template" (
-                                                  id BIGSERIAL PRIMARY KEY,
-                                                  "card_style_num" int2,
-                                                  "card_style_desc" varchar(64) COLLATE "pg_catalog"."default",
-                                                  "style_url" varchar(255) COLLATE "pg_catalog"."default",
-                                                  "parent_id" int8,
-                                                  "create_user" varchar(64) COLLATE "pg_catalog"."default",
-                                                  "update_user" varchar(64) COLLATE "pg_catalog"."default",
-                                                  "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                                  "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                                  "del_flag" int2 NOT NULL DEFAULT 0
-)
-;
-
-ALTER TABLE "public"."t_card_style_template"
-    OWNER TO "postgres";
-
-COMMENT ON COLUMN "public"."t_card_style_template"."id" IS '主键ID';
-
-COMMENT ON COLUMN "public"."t_card_style_template"."card_style_num" IS '款式编号(枚举:1-普通款,2-设计款,3-高端款)';
-
-COMMENT ON COLUMN "public"."t_card_style_template"."card_style_desc" IS '款式描述(枚举:1-普通款,2-设计款,3-高端款)';
-
-COMMENT ON COLUMN "public"."t_card_style_template"."style_url" IS '款式图片地址';
-
-COMMENT ON COLUMN "public"."t_card_style_template"."parent_id" IS '父类id';
-
-COMMENT ON COLUMN "public"."t_card_style_template"."create_user" IS '创建人';
-
-COMMENT ON COLUMN "public"."t_card_style_template"."update_user" IS '修改人';
-
-COMMENT ON COLUMN "public"."t_card_style_template"."create_time" IS '创建时间';
-
-COMMENT ON COLUMN "public"."t_card_style_template"."update_time" IS '修改时间';
-
-COMMENT ON COLUMN "public"."t_card_style_template"."del_flag" IS '删除标识(0-未删,1-已删)';
-
-COMMENT ON TABLE "public"."t_card_style_template" IS '卡片设计款式模板表';
-
-
--- 10.  Diamond Position 表(t_mold_number)
-CREATE TABLE "public"."t_mold_number" (
-                                          "id" BIGSERIAL PRIMARY KEY,
-                                          "mold_number" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
-                                          "order_no" varchar(100) COLLATE "pg_catalog"."default",
-                                          "user_id" int8,
-                                          "mold_name" varchar(200) COLLATE "pg_catalog"."default",
-                                          "mold_spec" varchar(200) COLLATE "pg_catalog"."default",
-                                          "mold_type" varchar(100) COLLATE "pg_catalog"."default",
-                                          "mold_status" int2 DEFAULT 0,
-                                          "mold_image_url" varchar(500) COLLATE "pg_catalog"."default",
-                                          "remark" varchar(500) COLLATE "pg_catalog"."default",
-                                          "usage_count" int4 DEFAULT 0,
-                                          "expected_usage_count" int4,
-                                          "mold_location" varchar(200) COLLATE "pg_catalog"."default",
-                                          "mold_supplier" varchar(200) COLLATE "pg_catalog"."default",
-                                          "purchase_date" date,
-                                          "warranty_period" int4,
-                                          "next_maintenance_date" date,
-                                          "create_user" varchar(50) COLLATE "pg_catalog"."default",
-                                          "update_user" varchar(50) COLLATE "pg_catalog"."default",
-                                          "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                          "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                          "del_flag" int2 DEFAULT 0,
-                                          CONSTRAINT "t_mold_number_pkey" PRIMARY KEY ("id")
-)
-;
-
-ALTER TABLE "public"."t_mold_number"
-    OWNER TO "postgres";
-
-CREATE INDEX "idx_mold_number" ON "public"."t_mold_number" USING btree (
-                                                                        "mold_number" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-    );
-
-CREATE INDEX "idx_mold_order_no" ON "public"."t_mold_number" USING btree (
-                                                                          "order_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-    );
-
-COMMENT ON COLUMN "public"."t_mold_number"."id" IS '主键ID';
-COMMENT ON COLUMN "public"."t_mold_number"."mold_number" IS '盒子编号';
-COMMENT ON COLUMN "public"."t_mold_number"."order_no" IS '订单编号';
-COMMENT ON COLUMN "public"."t_mold_number"."user_id" IS '用户ID';
-COMMENT ON COLUMN "public"."t_mold_number"."mold_status" IS '盒子状态(0-空闲,1-使用中,2-维修中,3-报废)';
-COMMENT ON COLUMN "public"."t_mold_number"."remark" IS '备注';
-COMMENT ON COLUMN "public"."t_mold_number"."create_user" IS '创建人';
-COMMENT ON COLUMN "public"."t_mold_number"."update_user" IS '修改人';
-COMMENT ON COLUMN "public"."t_mold_number"."create_time" IS '创建时间';
-COMMENT ON COLUMN "public"."t_mold_number"."update_time" IS '修改时间';
-COMMENT ON COLUMN "public"."t_mold_number"."del_flag" IS '逻辑删除标志(0-未删除,1-已删除)';
-COMMENT ON TABLE "public"."t_mold_number" IS '盒子编号表';
-
-
- -- 11.  Diamond Position 表(t_order_merge_group)
- -- 订单合并组表
-CREATE TABLE t_order_merge_group (
-                                   id BIGSERIAL PRIMARY KEY,
-                                   merge_group_no VARCHAR(64),
-                                   return_address_id int8,
-                                   receiver_name VARCHAR(64),
-                                   receiver_phone VARCHAR(32),
-                                   full_address VARCHAR(512),
-                                   logistics_company VARCHAR(64),
-                                   logistics_no VARCHAR(64),
-                                   latest_send_time timestamp(6),
-                                   merge_status INTEGER DEFAULT 0,
-                                   send_time TIMESTAMP,
-                                   create_time timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                   update_time timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                   create_user VARCHAR(64)
-);
-
--- 表注释
-COMMENT ON TABLE t_order_merge_group IS '订单合并组表';
-
--- 字段注释
-COMMENT ON COLUMN t_order_merge_group.id IS '主键ID';
-COMMENT ON COLUMN t_order_merge_group.merge_group_no IS '合并组号';
-COMMENT ON COLUMN t_order_merge_group.return_address_id IS '寄回地址ID';
-COMMENT ON COLUMN t_order_merge_group.receiver_name IS '收件人姓名';
-COMMENT ON COLUMN t_order_merge_group.receiver_phone IS '收件人电话';
-COMMENT ON COLUMN t_order_merge_group.full_address IS '完整地址';
-COMMENT ON COLUMN t_order_merge_group.logistics_company IS '物流公司';
-COMMENT ON COLUMN t_order_merge_group.logistics_no IS '物流单号';
-COMMENT ON COLUMN t_order_merge_group.latest_send_time IS '组内最晚发货时间';
-COMMENT ON COLUMN t_order_merge_group.merge_status IS '合并状态 0-待合并 1-已合并发货';
-COMMENT ON COLUMN t_order_merge_group.send_time IS '发货时间';
-COMMENT ON COLUMN t_order_merge_group.create_time IS '创建时间';
-COMMENT ON COLUMN t_order_merge_group.update_time IS '更新时间';
-COMMENT ON COLUMN t_order_merge_group.create_user IS '创建人';
-
-
-
-
-
--- 12.  Diamond Position 表(t_sys_oper_log)
-CREATE TABLE "public"."t_sys_oper_log" (
-                                           "id" BIGSERIAL PRIMARY KEY,
-                                           "status" int4 NOT NULL DEFAULT 0,
-                                           "business_type" int4 NOT NULL DEFAULT 0,
-                                           "title" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-                                           "oper_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                           "oper_ip" varchar(128) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-                                           "method" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-                                           "oper_url" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-                                           "request_type" varchar(50) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-                                           "request_method" varchar(10) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-                                           "oper_param" varchar(2000) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-                                           "json_result" varchar(2000) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-                                           "error_msg" varchar(2000) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-                                           "admin_id" int8 NOT NULL DEFAULT 0,
-                                           "admin_account" varchar(50) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-                                           "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                           "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-                                           "del_flag" int4 NOT NULL DEFAULT 0
-)
-;
-
-ALTER TABLE "public"."t_sys_oper_log"
-    OWNER TO "postgres";
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."id" IS 'ID';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."status" IS '操作状态 0正常 1异常';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."business_type" IS '业务类型 0其它 1新增 2修改 3删除 4查询';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."title" IS '接口描述';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."oper_time" IS '操作时间';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."oper_ip" IS '主机地址';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."method" IS '方法名称';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."oper_url" IS '请求URL';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."request_type" IS '请求类型';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."request_method" IS '请求方式';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."oper_param" IS '请求参数';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."json_result" IS '返回参数';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."error_msg" IS '错误消息';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."admin_id" IS '管理员id';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."admin_account" IS '管理员账号';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."create_time" IS '创建时间';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."update_time" IS '修改时间';
-
-COMMENT ON COLUMN "public"."t_sys_oper_log"."del_flag" IS '删除标识 0正常 1删除';
-
-COMMENT ON TABLE "public"."t_sys_oper_log" IS '操作日志表';

+ 18 - 0
mango-application/src/main/resources/db/migration/V20260706_rating_recommend_rule_create.sql

@@ -0,0 +1,18 @@
+-- 规则表 DDL
+CREATE TABLE IF NOT EXISTS t_rating_recommend_rule (
+                                                       id                   BIGSERIAL PRIMARY KEY,
+                                                       player               VARCHAR(255) NOT NULL,
+    year                 VARCHAR(64)  NOT NULL,
+    series               VARCHAR(255) NOT NULL,
+    card_set             VARCHAR(255) NOT NULL,
+    recommend_efficiency SMALLINT     NOT NULL,
+    effective_time       TIMESTAMP,
+    create_time          TIMESTAMP    NOT NULL DEFAULT now(),
+    update_time          TIMESTAMP    NOT NULL DEFAULT now(),
+    del_flag             SMALLINT     NOT NULL DEFAULT 0
+    );
+COMMENT ON TABLE t_rating_recommend_rule IS '评级时效推荐规则表(数仓沉淀,只读查询)';
+-- 支撑系列主导降级查询
+CREATE INDEX IF NOT EXISTS idx_rrr_series_set_year ON t_rating_recommend_rule (series, card_set, year);
+-- 支撑全等命中查询
+CREATE INDEX IF NOT EXISTS idx_rrr_feature ON t_rating_recommend_rule (player, year, series, card_set);

+ 1 - 1
mango-application/src/main/resources/logback-fluentd.xml

@@ -7,7 +7,7 @@
         <port>${logging.fluentd.port}</port>
 
         <encoder charset="UTF-8">
-            <pattern>%logger{15}:%L - %msg</pattern>
+            <pattern>[%X{TRACE_ID}] %logger{15}:%L - %msg</pattern>
         </encoder>
     </appender>
 

+ 13 - 2
mango-common/src/main/java/com/mangoo/rating/recommend/config/RecommendProperties.java

@@ -15,7 +15,7 @@ import java.util.Map;
  */
 @Data
 @Component
-@ConfigurationProperties(prefix = "recommend")
+@ConfigurationProperties(prefix = "recommend", ignoreInvalidFields = true)
 public class RecommendProperties {
 
     /** 兜底默认时效档(EvaluateEfficiencyEnum.code,默认 1=普通) */
@@ -28,8 +28,19 @@ public class RecommendProperties {
      * 服务等级时效字符串 → 时效 code 映射(报价用,订单服务返回的 timeLimit 是字符串)。
      * 例:「普通: 1」「快速: 2」「闪评: 3」「7个工作日: 1」「1个工作日: 3」
      */
-    private Map<String, Integer> timeLimitMapping = new LinkedHashMap<>();
+    private Map<String, Integer> timeLimitMapping = defaultTimeLimitMapping();
 
     /** 数仓同步接口鉴权 Token(请求头 X-Sync-Token) */
     private String syncToken = "change-me-sync-token";
+
+    /**
+     * 默认服务时效映射,防止外部配置把 time-limit-mapping 错配成标量时应用启动失败。
+     */
+    private static Map<String, Integer> defaultTimeLimitMapping() {
+        Map<String, Integer> mapping = new LinkedHashMap<>();
+        mapping.put("普通", 1);
+        mapping.put("快速", 2);
+        mapping.put("闪评", 3);
+        return mapping;
+    }
 }

+ 9 - 9
mango-common/src/main/java/com/mangoo/rating/recommend/config/thread/ThreadMdcUtil.java

@@ -1,5 +1,6 @@
 package com.mangoo.rating.recommend.config.thread;
 
+import com.mangoo.rating.recommend.trace.TraceIdConstants;
 import org.slf4j.MDC;
 
 import java.util.Map;
@@ -7,19 +8,18 @@ import java.util.UUID;
 import java.util.concurrent.Callable;
 
 public final class ThreadMdcUtil {
-    private static final String TRACE_ID = "TRACE_ID";
- 
+
     // 获取唯一性标识
     public static String generateTraceId() {
-        return UUID.randomUUID().toString();
+        return UUID.randomUUID().toString().replace("-", "");
     }
- 
+
     public static void setTraceIdIfAbsent() {
-        if (MDC.get(TRACE_ID) == null) {
-            MDC.put(TRACE_ID, generateTraceId());
+        if (MDC.get(TraceIdConstants.TRACE_ID) == null) {
+            MDC.put(TraceIdConstants.TRACE_ID, generateTraceId());
         }
     }
- 
+
     /**
      * 用于父线程向线程池中提交任务时,将自身MDC中的数据复制给子线程
      *
@@ -43,7 +43,7 @@ public final class ThreadMdcUtil {
             }
         };
     }
- 
+
     /**
      * 用于父线程向线程池中提交任务时,将自身MDC中的数据复制给子线程
      *
@@ -66,4 +66,4 @@ public final class ThreadMdcUtil {
             }
         };
     }
-}
+}

+ 21 - 12
mango-common/src/main/java/com/mangoo/rating/recommend/log/LogInterceptor.java

@@ -1,5 +1,6 @@
 package com.mangoo.rating.recommend.log;
 
+import com.mangoo.rating.recommend.trace.TraceIdConstants;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.MDC;
 import org.springframework.web.servlet.HandlerInterceptor;
@@ -10,24 +11,32 @@ import javax.servlet.http.HttpServletResponse;
 import java.util.UUID;
 
 public class LogInterceptor implements HandlerInterceptor {
- 
-    private static final String TRACE_ID = "TRACE_ID";
- 
+
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
-        String tid = UUID.randomUUID().toString().replace("-", "");
-        //可以考虑让客户端传入链路ID,但需保证一定的复杂度唯一性;如果没使用默认UUID自动生成
-        if (!StringUtils.isEmpty(request.getHeader("TRACE_ID"))){
-            tid=request.getHeader("TRACE_ID");
+        // 依次尝试多个请求头候选,兼容不同上游的链路 ID 命名
+        String tid = null;
+        for (String header : TraceIdConstants.TRACE_ID_HEADERS) {
+            String value = request.getHeader(header);
+            if (StringUtils.isNotEmpty(value)) {
+                tid = value;
+                break;
+            }
+        }
+        // 上游未传则本地生成
+        if (StringUtils.isEmpty(tid)) {
+            tid = UUID.randomUUID().toString().replace("-", "");
         }
-        MDC.put(TRACE_ID, tid);
+        MDC.put(TraceIdConstants.TRACE_ID, tid);
+        // 回写响应头,方便调用方与前端排查
+        response.setHeader(TraceIdConstants.TRACE_ID, tid);
         return true;
     }
- 
+
     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                                 @Nullable Exception ex) {
-        MDC.remove(TRACE_ID);
+        MDC.remove(TraceIdConstants.TRACE_ID);
     }
- 
-}
+
+}

+ 23 - 0
mango-common/src/main/java/com/mangoo/rating/recommend/trace/TraceIdConstants.java

@@ -0,0 +1,23 @@
+package com.mangoo.rating.recommend.trace;
+
+/**
+ * 链路追踪常量
+ *
+ * @author gengjintao
+ * @date 2026/07/03
+ */
+public final class TraceIdConstants {
+
+    private TraceIdConstants() {
+    }
+
+    /**
+     * MDC 及请求头中链路追踪 ID 的键
+     */
+    public static final String TRACE_ID = "TRACE_ID";
+
+    /**
+     * 入站取值时依次尝试的请求头候选(兼容不同上游命名)
+     */
+    public static final String[] TRACE_ID_HEADERS = {"TRACE_ID", "X-Trace-Id", "X-Request-Id"};
+}

+ 53 - 0
mango-common/src/test/java/com/mangoo/rating/recommend/config/RecommendPropertiesTest.java

@@ -0,0 +1,53 @@
+package com.mangoo.rating.recommend.config;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Configuration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * RecommendProperties 配置绑定测试。
+ */
+class RecommendPropertiesTest {
+
+    private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+            .withUserConfiguration(TestConfig.class);
+
+    @Test
+    void timeLimitMappingBindSuccess() {
+        contextRunner
+                .withPropertyValues(
+                        "recommend.time-limit-mapping.普通=1",
+                        "recommend.time-limit-mapping.快速=2",
+                        "recommend.time-limit-mapping.闪评=3")
+                .run(context -> {
+                    assertThat(context).hasNotFailed();
+                    RecommendProperties properties = context.getBean(RecommendProperties.class);
+                    assertThat(properties.getTimeLimitMapping())
+                            .containsEntry("普通", 1)
+                            .containsEntry("快速", 2)
+                            .containsEntry("闪评", 3);
+                });
+    }
+
+    @Test
+    void timeLimitMappingScalarValueKeepDefault() {
+        contextRunner
+                .withPropertyValues("recommend.time-limit-mapping=1")
+                .run(context -> {
+                    assertThat(context).hasNotFailed();
+                    RecommendProperties properties = context.getBean(RecommendProperties.class);
+                    assertThat(properties.getTimeLimitMapping())
+                            .containsEntry("普通", 1)
+                            .containsEntry("快速", 2)
+                            .containsEntry("闪评", 3);
+                });
+    }
+
+    @Configuration
+    @EnableConfigurationProperties(RecommendProperties.class)
+    static class TestConfig {
+    }
+}

+ 28 - 0
mango-domain/src/main/java/com/mangoo/rating/recommend/client/feign/TraceIdFeignInterceptor.java

@@ -0,0 +1,28 @@
+package com.mangoo.rating.recommend.client.feign;
+
+import com.mangoo.rating.recommend.trace.TraceIdConstants;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+
+/**
+ * Feign 出站链路追踪拦截器
+ * 将当前线程 MDC 中的 TRACE_ID 透传到下游 Feign 请求头(已有则不覆盖,无则不加)。
+ * 作为全局 Bean 对所有 FeignClient 生效。
+ *
+ * @author gengjintao
+ * @date 2026/07/03
+ */
+@Component
+public class TraceIdFeignInterceptor implements RequestInterceptor {
+
+    @Override
+    public void apply(RequestTemplate template) {
+        String traceId = MDC.get(TraceIdConstants.TRACE_ID);
+        if (traceId != null && !traceId.isEmpty()
+                && !template.headers().containsKey(TraceIdConstants.TRACE_ID)) {
+            template.header(TraceIdConstants.TRACE_ID, traceId);
+        }
+    }
+}