- 需求:
- 折扣管理:
- 商品支持打折活動,打折活動支持多種形式;
- 活動折扣要求:大於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<=@NowDateTime 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<=@NowDateTime and T12.EndDate>@NowDateTime
- 腳本:
- 修改表“訂單商品信息”阿薩德
- 訂單信息表中,必須添加冗余字段:是否參加折扣活動,活動名稱,折扣,折扣后價格
到此,該邏輯已經完整的清晰了。突然感覺到文字的力量很神奇,苦想了,也沒有理清的業務,文字寫出來后竟然清晰了很多。
折扣活動編輯
折扣活動管理
可參加某活動商品
已參加某活動商品