当前位置:网站首页>【实战场景】商城-折扣活动设计方案
【实战场景】商城-折扣活动设计方案
2022-08-11 04:00:00 【菜鸟是大神】
- 需求:
- 折扣管理:
- 商品支持打折活动,打折活动支持多种形式;
- 活动折扣要求:大于0,小于10,允许包含一位小树;
- 一旦折扣活动创建后,不可以修改折扣;
- 促销管理:
- 可以按照折扣活动查询对应参与活动的商品,显示对应活动商品的原价,折扣,减价,折扣后;
- 允许商家查看可以参加某活动的商品,且一个商品最多允许参加一个活动即使活动已经过期,必须取消已参与的其他活动后,才能参加另外一个活动;
- 设置某产品参加某活动时,默认按照该活动的折扣进行计算折扣、减价、折扣后,但也允许用户手动修改某个商品或者批量改变某几个商品的折扣,或者减价。
- 受影响的业务:
目前系统中,关于购物添加了该业务还会影响业务地方:
- 商品展示信息:当展示商品信息时,需要判定该商品是否参加了活动;
- 如果参加了活动,那么就要显示活动信息,同时根据对该产品定制的活动信息改变对应的折扣后价格,折扣信息。
- 这里提到“商品定制的活动信息”,它是在促销管理添加某个活动时,生成的一条记录,所有的参加了折扣活动的商品都有一个条这样的信息;
- 如何判断某个商品是否已经参加了活动,就是根据商品ID从“商品定制的活动信息”查询,是否记录。
- 但删除某个折扣活动时,会提示:“如果该折扣活动已经被其他商品使用,删除后参与该活动的商品将取消活动,是否继续?”,也就是说,当删除了某个折扣活动,将会从“商品定制的活动信息”中删除该活动下的所有记录。
- 如果没有参加活动,那么商品将不会显示活动信息,没有折扣、折扣价信息。
- 购物车信息:当展示商品信息时,需要判定该商品是否参加了活动;
- 如果参加了活动,那么就要显示活动信息,同时根据对该产品定制的活动信息改变对应的折扣后价格,折扣信息。
- 如果没有参加活动(只有当该商品参与的活动在活动期间,且已经开启的情况下),那么商品将不会显示活动信息,没有折扣、折扣价信息.
- 在某个商品价格小计是,如果有折扣活动(只有当该商品参与的活动在活动期间,且已经开启的情况下)需要按照折扣后价格进行计算;
- 在计算总价时,如果有折扣活动()需要按照折扣后价格进行汇总;
- 订单信息:
- 在生成需要支付总价格时,需要取值为购物车中的总价格--购物车中的总价格是更具商品ID,查询到对应信息()进而综合计算的总价;
- 购物车中总价,及订单中的总价,不能靠cookie中的信息,很危险,一定要从数据库中查询计算得到总价。
- 订单商品信息:
- 订单商品信息中的必须要保存的字段:商品价格,是否参加折扣活动,活动名称,折扣,折扣后价格。为什么要显示这些信息?为了跟踪产品价格,避免别人订单信息无法追踪。
- 当然这里“是否参加折扣活动”字段,只有当该商品参与的活动在活动期间,且已经开启的情况下,才标识为true.
- 用来冗余:一旦取消了某个折扣活动,但若某个已经参加了该活动且已经包含在订单商品中,在取消活动后,这时就无法知道用户提交时,是否参与过什么活动。
- 开发
- 添加表“活动信息”
- 脚本:
/****** Object: Table [dbo].[cx_GoodsMarketingCampaignCategory] Script Date: 05/23/2015 11:17:53 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[cx_GoodsMarketingCampaignCategory]( [ID] [int] IDENTITY(1,1) NOT NULL, [Title] [nvarchar](64) NOT NULL, [Discount] [decimal](9, 1) NOT NULL, [IsWipingPoints11] [bit] NOT NULL, [IsWipingPoints01] [bit] NOT NULL, [BeginDate] [datetime] NOT NULL, [EndDate] [datetime] NOT NULL, [Enabled] [bit] NOT NULL, [SortID] [int] NOT NULL, [ModifyDate] [datetime] NOT NULL, [CreateDate] [datetime] NOT NULL, CONSTRAINT [PK_cx_GoodsMarketingCampaignCategory] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[cx_GoodsMarketingCampaignCategory] ADD CONSTRAINT [DF_cx_GoodsMarketingCampaignCategory_CreateDate] DEFAULT (getdate()) FOR [CreateDate] GO
- 脚本:
- 添加表“商品定制的活动信息”
- 脚本:
1 SET ANSI_NULLS ON 2 GO 3 4 SET QUOTED_IDENTIFIER ON 5 GO 6 7 CREATE TABLE [dbo].[cx_GoodsMarketingCampaign]( 8 [ID] [int] IDENTITY(1,1) NOT NULL, 9 [GoodsID] [int] NOT NULL, 10 [GoodsMarketingCampaignCategoryOID] [int] NOT NULL, 11 [Discount] [decimal](9, 1) NOT NULL, 12 [CreateDate] [datetime] NOT NULL, 13 [ModifyDate] [datetime] NOT NULL, 14 CONSTRAINT [PK_cx_GoodsMarketingCampaign] PRIMARY KEY CLUSTERED 15 ( 16 [ID] ASC 17 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 18 ) ON [PRIMARY] 19 20 GO
- Discount,就是商品参加活动时设置的折扣,为了避免店主修改某个商品的价格后折扣后价格没有发生变化,这里就就没有保存折扣价、折扣价格,当界面显示查看某个参加活动商品折扣,折扣后价格时,动态生成该“折扣后价格”。
1 Declare @GoodsID Int; 2 Declare @NowDateTime Datetime; 3 4 Set @GoodsID=1; 5 Set @NowDateTime=GETDATE(); 6 7 -- 获取参与过活动的产品的原始价格,活动折扣,折扣后价格 8 Select 9 T11.SellPrice, 10 T12.Discount, 11 (Case When T13.IsWipingPoints01=1 Then Round(T11.SellPrice*T12.Discount,1) 12 When T13.IsWipingPoints11=1 Then ROUND(T11.SellPrice*T12.Discount,0) 13 Else Round(T11.SellPrice*T12.Discount,2) End) as RealPrice 14 From cx_Article as T10 15 inner join cx_ArticleAttributeValue as T11 on T10.ID=T11.ArticleID 16 inner join cx_ArticleGoodsMarketingCampaign as T12 on T10.ID=T12.ArticleID 17 inner join cx_GoodsMarketingCampaignCategory as T13 on T12.GoodsMarketingCampaignCategoryOID=T13.ID 18 Where T13.[Enabled]=1 19 and T13.BeginDate<[email protected] and T13.EndDate>@NowDateTime
- 怎么判断该商品活动是否有效,需要关联到“活动信息”表:
1 Declare @GoodsID Int; 2 Declare @NowDateTime Datetime; 3 4 Set @GoodsID=1; 5 Set @NowDateTime=GETDATE(); 6 7 -- 判断是否该产品是否参与过有效活动 8 Select COUNT(T10.ID) 9 From cx_Article as T10 10 inner join cx_ArticleGoodsMarketingCampaign as T11 on T10.ID=T11.ArticleID 11 inner join cx_GoodsMarketingCampaignCategory as T12 on T11.GoodsMarketingCampaignCategoryOID=T12.ID 12 Where T12.[Enabled]=1 13 and T12.BeginDate<[email protected] and T12.EndDate>@NowDateTime
- 脚本:
- 修改表“订单商品信息”阿萨德
- 订单信息表中,必须添加冗余字段:是否参加折扣活动,活动名称,折扣,折扣后价格
到此,该逻辑已经完整的清晰了。突然感觉到文字的力量很神奇,苦想了,也没有理清的业务,文字写出来后竟然清晰了很多。
折扣活动编辑

折扣活动管理

可参加某活动商品

已参加某活动商品

边栏推荐
- 获取Qt的安装信息:包括安装目录及各种宏地址
- MYSQLg advanced ------ return table
- What has programmatic trading changed?
- uni-app - 城市选择索引列表 / 通过 A-Z 排序的城市列表(uview 组件库 IndexList 索引列表)
- js uses the string as the js execution code
- 【FPGA】名词缩写
- 多串口RS485工业网关BL110
- 【FPGA】day22-SPI protocol loopback
- uni-app - 获取汉字拼音首字母(根据中文获取拼音首字母)
- .NET service registration
猜你喜欢

北湖区燕泉街道开展“戴头盔·保安全”送头盔活动

LeetCode刷题第16天之《239滑动窗口最大值》

快速使用UE4制作”大场景游戏“

When EasyCVR is connected to the GB28181 device, what is the reason that the device is connected normally but the video cannot be played?

【FPGA】SDRAM

Detailed explanation of VIT source code

(转)JVM中那些区域会发生OOM?

Clang Code Model: Error: The clangbackend executable “X:/clangbackend.exe“ could not be started

Interchangeable Measurement Techniques - Geometric Errors

校园兼职平台项目反思
随机推荐
The custom of the C language types -- -- -- -- -- - structure
Where can machine learning be applied?What is machine learning useful for?
LeetCode814算题第15天二叉树系列值《814 二叉树剪枝》
Multi-serial port RS485 industrial gateway BL110
uni-app - 获取汉字拼音首字母(根据中文获取拼音首字母)
LeetCode刷题第16天之《239滑动窗口最大值》
MYSQLg高级------聚簇索引和非聚簇索引
DNS separation resolution and intelligent resolution
【FPGA】SDRAM
【Yugong Series】August 2022 Go Teaching Course 036-Type Assertion
【FPGA】day19-二进制转换为十进制(BCD码)
80端口和443端口是什么?有什么区别?
Rotary array problem: how to realize the array "overall reverse, internal orderly"?"Three-step conversion method" wonderful array
What has programmatic trading changed?
Build Zabbix Kubernetes cluster monitoring platform
Use jackson to parse json data in detail
Enter the starting position, the ending position intercepts the linked list
Is Redis old?Performance comparison between Redis and Dragonfly
What are port 80 and port 443?What's the difference?
What should I do if the channel ServerID is incorrect when EasyCVR is connected to a Hikvision Dahua device and selects another cluster server?