Home 成长之路 Leetcode题解

 【技术方案】促销配置新增校验&核心库新增流水

一、需求相关概要

1.1 需求背景

新促销管理后台缺少很多核心参数的校验,且对于存储的数据没有任何的流水表

https://doc.weixin.qq.com/sheet/e3_AIsAFga8APY1hD1S2o7TY05aozgBM?scode=AAYA0wfQAAwmkMMK8mAIsAFga8APY&tab=BB08J2

1.2 需求详情

tapd:促销配置新增校验&核心库新增流水-科技零售-TAPD平台

.  整体方案设计

代码分支:rel_eventCheckImp_1316824               

修改工程:ec_event_admin

2.1   促销管理端,对不同的促销类型的核心参数进行强校验,且支持拓展

1.前端改造:促销不同流程的网关均需传入【event_type】

2.后端逻辑:如下图

3.促销后端校验整理

https://doc.weixin.qq.com/sheet/e3_AIsAFga8APY1hD1S2o7TY05aozgBM?scode=AAYA0wfQAAwfMjmJqXAdQAJgZuAGg&tab=0whtpq

重点校验逻辑:

1.互斥优惠

4.Hippo配置:

  1. 校验开关:ec_event_admin.check_switch
  • true: 开启
  • false:关闭
  1. 规则表达式列表:ec_event_admin.rule.expression.validation.list

注:新增aviator自定义函数:【CheckIn】、【NotNullOrEmpty】、【DateBefore】、【CheckDateSubset】

完整的规则列表:

[
    {
        "condition": "!CheckIn(eventType,36,37)",
        "rule": "NotNullOrEmpty(scopeType) &&  CheckIn(scopeType,1,2,4)",
        "desc": "促销类型非单品-普通或单品-秒杀时,促销范围不能为空且只能选【自营促销】、【平台促销】、【POP促销】之一"
    },
    {
        "condition": "CheckIn(eventType,36,37)",
        "rule": "NotNullOrEmpty(scopeType) &&  CheckIn(scopeType,1,2)",
        "desc": "促销类型为【单品-普通、单品-秒杀】时,促销范围不能为空且只能选【自营促销】、【平台促销】之一"
    },
    {
        "condition": "!CheckIn(eventType, 36, 37)",
        "rule": "NotNullOrEmpty(eventBeginTime , eventEndTime) && DateBefore(eventBeginTime ,eventEndTime)",
        "desc": "促销类型非【单品-普通、单品-秒杀】时,促销开始时间、结束时间不能为空且结束时间必须大于开始时间"
    },
    {
        "condition": "!CheckIn(eventType, 36, 37)",
        "rule": "NotNullOrEmpty(eventBeginTime , eventEndTime) && DateBefore(eventBeginTime ,eventEndTime)",
        "desc": "促销类型非【单品-普通、单品-秒杀】时,促销开始时间、结束时间、提报开始时间、结束时间均不能为空且提报结束时间必须大于开始时间,同时提报时间必须是促销时间的子集"
    },
    {
        "condition": "1 == 1",
        "rule": "NotNullOrEmpty(adminPromotion)",
        "desc": "负责人不能为空"
    },
    {
        "condition": "1 == 1",
        "rule": "NotNullOrEmpty(productReviewer)",
        "desc": "商品审核人不能为空"
    },
    {
        "condition": "!CheckIn(eventType, 36, 37)",
        "rule": "NotNullOrEmpty(distributeType) && CheckIn(distributeType ,1, 2)",
        "desc": "促销类型非【单品-普通、单品-秒杀】时,生效逻辑不能为空且只能选【建立SKU和活动生效关系】、【建立类目和活动生效关系】之一"
    },
    {
        "condition": "!CheckIn(eventType, 31, 51)",
        "rule": "NotNullOrEmpty(lossFusingAmount) && lossFusingAmount >= 100 && lossFusingAmount%100 == 0",
        "desc": "促销类型非【氛围促销、直播】时,亏损熔断金额不能为空且必须是正整数"
    },
    {
        "condition": "CheckIn(eventType,42, 43,33,48,49)",
        "rule": "NotNullOrEmpty(useWay) && CheckIn(useWay,1,2,3,4)",
        "desc": "用途不能为空且只能选【兑换、售卖、回收宝、内部采购】之一"
    },
    {
        "condition": "CheckIn(eventType,42, 43,33,48,49)",
        "rule": "NotNullOrEmpty(convertType) && CheckIn(convertType,1, 2)",
        "desc": "兑换方式不能为空且只能选【兑换一次、兑换多次】之一"
    },
    {
        "condition": "CheckIn(eventType,42, 43,33,48,49)",
        "rule": "NotNullOrEmpty(isShow) && CheckIn(isShow,1, 2)",
        "desc": "商详页是否展示不能为空且只能选【是、否】之一"
    }
]

2.2  对促销的配置库表写入流水表,记录每一次的数据变更情况和操作人

2.2.1 【活动管理】

活动信息表:【OPDB】op_db.t_ec_event_activity

氛围表:【OPDB】ec_subtitle_db.t_event

审批记录表:已切至线下买鸭审批

活动管理部分,活动信息表、氛围表需要新建流水表

 

2.2.2 【促销管理】

促销基础信息表:【OPDB】op_db.t_ec_event_base

选品表:【ECDB】product_db.t_search_selection (玄武配置流水表)

氛围表:【OPDB】ec_subtitle_db.t_event

审批记录表:已切至线下买鸭审批

促销管理部分,促销基础信息表、氛围表需要新建流水表

2.2.3 【提报管理】

选品提报记录表:【ECDB】product_db.t_selection_submit_apply (玄武配置流水表)

选品商品表:【EccaidanDB】t_selection_apply_sku=selection_db (玄武配置流水表)

审批记录表:已切至线下买鸭审批

提报部分,已全部建立流水表,本次无需新建

结论:【活动管理】、【促销管理】在玄武配置MySQL监听,以完成流水表的同步

活动信息流水表

CREATE TABLE op_db.t_ec_event_activity_water (

 `Fwater_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘自增主键’,

 `Factivity_id` varchar(64) NOT NULL DEFAULT ” COMMENT ‘活动id’, `Factivity_name` varchar(256) NOT NULL DEFAULT ” COMMENT ‘活动名称’, `Factivity_grade` varchar(4) NOT NULL DEFAULT ” COMMENT ‘活动级别 S A+ A B’, `Factivity_begin_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘活动开始时间’, `Factivity_end_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘活动结束时间’, `Factivity_status` int(11) NOT NULL DEFAULT ’10’ COMMENT ‘活动状态 10:未开始 20:进行中 30:已结束’, `Fowner` varchar(560) NOT NULL DEFAULT ” COMMENT ‘创建者’, `Foperator` varchar(560) NOT NULL DEFAULT ” COMMENT ‘管理员’, `Ftest_flag` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘测试标识’, `Fcreate_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘创建时间’, `Fmodify_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘修改时间’, `Fversion` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘版本号’, `Fedit_status` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘编辑状态 10:编辑中 20:审批中 30:编辑完成’, `Fhold_ext` text COMMENT ‘暂存信息’, 

PRIMARY KEY (`Fwater_id`) USING BTREE,

KEY `idx_activity_id` (`Factivity_id`) USING BTREE,

KEY `idx_modify_time` (`Fmodify_time`) USING BTREE )

ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’电商|促销系统-活动流水表|breakyang|20231221′;

促销基础信息流水表

CREATE TABLE op_db.t_ec_event_base_water (

 `Fwater_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘自增主键’,

 `Fbase_id` varchar(32) NOT NULL DEFAULT ” COMMENT ‘活动ID号’, `Fevent_name` varchar(255) NOT NULL DEFAULT ” COMMENT ‘活动名称’, `Fevent_type` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘促销活动类型’, `Fevent_desc` varchar(256) NOT NULL DEFAULT ” COMMENT ‘活动补充说明’, `Fevent_status` tinyint(4) NOT NULL DEFAULT ’10’ COMMENT ‘活动状态’, `Fcreator` varchar(32) NOT NULL DEFAULT ” COMMENT ‘活动创建人’, `Fchannel_type` varchar(20) NOT NULL DEFAULT ‘[0]’ COMMENT ‘推广平台(0-APP 1-H5 2-PC)’, `Fscope_type` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘活动范围(1-自营 2-POP 3-店铺)’, `Fsale_type` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘所属业务(0\\1-全部 2-实物 3-虚拟)’, `Fevent_begin_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘活动开始时间’, `Fevent_end_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘活动结束时间’, `Fevent_apply_begin_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘活动报名开始时间’, `Fevent_apply_end_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘活动报名结束时间’, `Fcreate_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘活动创建时间’, `Fmodify_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘活动修改时间’, `Fadmin_promotion` varchar(512) NOT NULL DEFAULT ” COMMENT ‘活动管理权限人员’, `Fadmin_goods` varchar(512) NOT NULL DEFAULT ” COMMENT ‘活动商品管理人员’, `Frule_id` varchar(32) NOT NULL DEFAULT ” COMMENT ‘规则id号’, `Fjoin_type` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘参与方式(1-按商品范围 2-指定)’, `Fevent_base_detail` text COMMENT ‘活动详细json串’, `Fevent_external_channel` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘活动所属渠道’, `Fversion` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘版本号’, `Fshare_desc` varchar(256) NOT NULL DEFAULT ” COMMENT ‘分享描述’, `Fshare_title` varchar(128) NOT NULL DEFAULT ” COMMENT ‘分享标题’, `Fshare_link` varchar(256) NOT NULL DEFAULT ” COMMENT ‘分享链接’, `Fpay_way` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘支付方式 1.乐卡支付 2.信用卡支付 3.微信支付’, `Fpay_channel` varchar(256) NOT NULL DEFAULT ” COMMENT ‘支付渠道’, `Fshare_pic_url` varchar(256) NOT NULL DEFAULT ” COMMENT ‘分享图片’, `Flimit_buy_single` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘单人限购字段,0标识不限购’, `Fevent_sub_type` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘活动子类型,部分类型的活动有自己的类型定义’, `Frelevancy_business` varchar(32) NOT NULL DEFAULT ‘[]’ COMMENT ‘业务归属(基本都有)’, `Fuser_type` varchar(32) NOT NULL DEFAULT ‘[]’ COMMENT ‘促销用户类型(费率促销,支付立减,单品促销等)’, `Forder_type` bigint(20) NOT NULL DEFAULT ‘0’ COMMENT ‘活动支持的订单类型’, `Fmutex_event_type` varchar(1024) NOT NULL DEFAULT ” COMMENT ‘互斥活动,以集合形式存储’, `Fcacheable` tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘是否需要建缓存’, `Fec_channel` varchar(64) NOT NULL DEFAULT ‘[”FQL”]’ COMMENT ‘活动促销渠道’, `Fmerch_name` varchar(128) NOT NULL DEFAULT ” COMMENT ‘商户名称’, `Flimit_buy_whole` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘单人限购数量,0:标识不限购’, `Fapplicable` tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘是否可以报名, 0:不可报名,1:可报名’, `Fplat` varchar(32) NOT NULL DEFAULT ‘FQL’ COMMENT ‘app平台’, `Ffull_event` tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘是否是全场活动 0:不是,1:是’, `Fpay_way_list` varchar(64) NOT NULL DEFAULT ‘[]’ COMMENT ‘多个支付方式’, `Floss_fusing_amount` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘亏损熔断金额(风控使用)(单位:分)’, `Fuser_config` text COMMENT ‘用户差异化促销配置(用户标签、性别、授信状态等)(新)’, `Fclose_order_time` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘关单时间(单位:分)’, `Fapproval_type` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘审核方式:0人工 1自动’, `Fdept_id` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘创建人部门’, `Ffq_num_list` varchar(64) NOT NULL DEFAULT ‘[]’ COMMENT ‘分期数限制’, `Fenable_early_repay` int(2) NOT NULL DEFAULT ‘1’ COMMENT ‘是否支持提前还款’, `Fnum_not_early_repay` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘前N期不支持提前还款’, `Fcoupon_type` int(4) NOT NULL DEFAULT ‘0’ COMMENT ‘优惠属性’, `Fsku_sale_type_list` varchar(64) NOT NULL DEFAULT ‘[]’ COMMENT ‘商品销售类型 0-普通 1-买鸭1.0 2-买鸭2.0’, `Fext` text COMMENT ‘活动扩展字段’, `Fapproval_id` varchar(32) NOT NULL DEFAULT ” COMMENT ‘审批流id’, `Fedit_status` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘编辑状态 10:编辑中 20:审批中 30:编辑完成’, `Fsystem_version` varchar(11) NOT NULL DEFAULT ‘V1’ COMMENT ‘系统版本 老系统 V1 新系统 V2’, `FField_domain_flag` int(1) NOT NULL DEFAULT ‘0’ COMMENT ‘是否接入场域 0:否 1:是’, `Factivity_id` varchar(64) NOT NULL DEFAULT ” COMMENT ‘活动id’, `Frule_update_flag` int(1) NOT NULL DEFAULT ‘0’ COMMENT ‘规则修改记录 0:没有 1:有’, `Fhold_ext` text COMMENT ‘暂存信息’, `Ftest_flag` int(1) NOT NULL DEFAULT ‘0’ COMMENT ‘测试促销标识 0:否 1:是’, `Fuse_way` int(2) NOT NULL DEFAULT ‘2’ COMMENT ‘优惠券用途(1:兑换 2:售卖 3:回收宝 4:内部采购)’, `Fconvert_type` int(2) NOT NULL DEFAULT ‘1’ COMMENT ‘兑换方式(1:兑换多次;2:兑换一次)’, `Fis_show` int(2) NOT NULL DEFAULT ‘1’ COMMENT ‘商详页面是否展示(1:不展示;2:展示)’, `Fis_remind` int(2) NOT NULL DEFAULT ‘1’ COMMENT ‘是否推送过期提醒(1:不推送;2:推送)’, `Fcalculate_type` int(2) NOT NULL DEFAULT ’10’ COMMENT ‘计费类型 10:促销维度 20:批次维度 30:商品维度’, `Fsettle_type` int(2) NOT NULL DEFAULT ’10’ COMMENT ‘结算类型 10:活动 20:批次’, `Fproduct_reviewer` varchar(1024) NOT NULL DEFAULT ” COMMENT ‘商品审核人’, `Fparent_base_id` varchar(64) NOT NULL DEFAULT ” COMMENT ‘父促销’, `Fdistribute_type` int(2) NOT NULL DEFAULT ‘1’ COMMENT ‘打散类型 1:按商品 2:按类目’, `Fsku_limit_buy_single` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘sku单人限购数量,0:标识不限购’, `Fstrategy_config` text COMMENT ‘策略配置信息’, 

PRIMARY KEY (`Fwater_id`) USING BTREE,

KEY `idx_base_id` (`Fbase_id`) USING BTREE, 

KEY `idx_Fmodify_time` (`Fmodify_time`) USING BTREE)

ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’促销引擎|促销基础信息流水表|breakyang|20231221′;

氛围流水表

CREATE TABLE ec_subtitle_db.t_event_water (

 `Fwater_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘自增主键’,

  `Fbase_id` varchar(32) NOT NULL DEFAULT ” COMMENT ‘活动id’,

  `Fname` varchar(32) NOT NULL DEFAULT ” COMMENT ‘配置名称’,

  `Frule_id` varchar(32) NOT NULL DEFAULT ” COMMENT ‘规则id’,

  `Fbegin_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘活动开始时间’,

  `Fend_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘活动结束时间’,

  `Fscope_type` tinyint(4) NOT NULL DEFAULT ‘1’ COMMENT ‘活动范围(1-自营 2-POP 3-店铺)’,

  `Fgoods_type` tinyint(3) NOT NULL DEFAULT ‘0’ COMMENT ‘制定商品方式 1、按SPU指定 2、按SKU指定’,

  `Fjoin_type` tinyint(3) NOT NULL DEFAULT ‘0’ COMMENT ‘参与方式(1、按商品范围参加 2、指定商品参加)’,

  `Fbrand_desc` varchar(40) NOT NULL DEFAULT ‘ ‘ COMMENT ‘文字链’,

  `Fshort_title` varchar(28) NOT NULL DEFAULT ‘ ‘ COMMENT ‘短标题’,

  `Fsubtitle` varchar(110) NOT NULL DEFAULT ‘ ‘ COMMENT ‘副标题’,

  `Flink_h5` varchar(100) NOT NULL DEFAULT ” COMMENT ‘h5链接’,

  `Flink_pc` varchar(100) NOT NULL DEFAULT ” COMMENT ‘pc链接’,

  `Flist_mul_pic_url` varchar(256) NOT NULL DEFAULT ‘[]’ COMMENT ‘列表页多列氛围图(支持多个,json存储)’,

  `Flist_single_pic_url` varchar(256) NOT NULL DEFAULT ‘[]’ COMMENT ‘列表页单列氛围图(支持多个,json存储)’,

  `Fdetail_pic_url` varchar(256) NOT NULL DEFAULT ‘[]’ COMMENT ‘商详页氛围图(支持多个,json存储)’,

  `Fadmin` varchar(512) NOT NULL DEFAULT ” COMMENT ‘活动权限管理人员’,

  `Fstatus` tinyint(3) NOT NULL DEFAULT ‘0’ COMMENT ‘状态(10:正常;11:暂停)’,

  `Foperator` varchar(32) NOT NULL DEFAULT ” COMMENT ‘活动创建人’,

  `Fmodify_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘修改时间’,

  `Fcreate_time` datetime NOT NULL DEFAULT ‘1970-01-01 00:00:00’ COMMENT ‘创建时间’,

  `Fversion` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘版本号’,

  `Fsubtitle_type` tinyint(3) NOT NULL DEFAULT ‘1’ COMMENT ‘ 副标题类型 (1、图文样式 2、大促样式)’,

  `Fextend_info` text COMMENT ‘活动个性化字段(json串)’,

  `Fuser_portrait` varchar(256) NOT NULL DEFAULT ” COMMENT ‘用户画像信息’,

  `Fevent_type` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘配置级别1:活动2:促销’,

  `Flogic_id` varchar(64) NOT NULL DEFAULT ” COMMENT ‘活动或促销ID’,

PRIMARY KEY (`Fwater_id`) USING BTREE,

KEY `idx_base_id` (`Fbase_id`), 

 KEY `idx_modify_time` (`Fmodify_time`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8  COMMENT=’促销引擎|氛围流水表|breakyang|20231221′;

SIMILAR ARTICLES

0 99

发表评论

发表评论