為nopcommerce自訂使用者積分功能(1)

來源:互聯網
上載者:User
由於此功能為定製功能,所以不方便把所有代碼都發上來,而且功能或許還有BUG,有興趣的同學可以一起研究,大家也可以訪問中文站www.nopchina.com或者 www.nopcommerce.org或者加入QQ群101675096一起討論。
nopcommerce是開源的asp.net網店,從08年底出來第一個版本,截止本文發稿時最新版本為1.40,有興趣的同學可以去http://www.nopcommerce.com瞭解詳細情況。

nopcommerce本身不帶使用者積分功能,至少1.4還沒有。基本目前的使用者需求,等不到官方發布這個功能了。我們來自己實現一個簡單的使用者積分,積分記錄暫時通過SQL查詢

先來看看基本需求和大概流程。首先這個積分不像凡客那種買個東西就幾千上萬分,我們所定義的積分就是一種虛擬貨幣,而且和網店主要貨幣的匯率為1,我們的 目的很簡單,使用者在每次購物以後可以給使用者的帳戶裡添加X元的貨幣,這個貨幣的名字使用者可以自訂,比如這個網店我想取名叫A$,那個網店我想叫 Z$,或者直接叫RMB也行。為了簡單起見我們規定在每次購物以後使用者可以得到1%的貨幣(為了更好的區分,以下用“積分”代替),而且積分是扣掉打折以 後再開始計算的。例如使用者購買了200元的東西,打折10%即20元,這樣使用者需要支付180元,所得積分為180*1%=1.8元。當然這個百分比是可 以隨時更改的。

要注意的是使用者下單後不是馬上得到積分而是在網店收到錢以後,由管理員在更新狀態時同時給使用者添加積分。管理員也可以選擇不給此人增加積分,或者給此人增 加另一個數額的積分,而且在使用者管理頁面管理員也可以直接對使用者的積分進行修改。為了把積分概念深入人心,使用者下單以後也要加到郵件通知裡。

綜上所述我們要的流程如下:

1.使用者下單,結帳,email通知使用者下單成功並能獲得X元的積分,此積分下一次可以在購物時使用。
2.使用者付款以後管理員給使用者添加積分
3.使用者獲得積分,下次可以使用。

我們先來進行必要的設定,包括本地化、全域設定以及修改資料庫。

configuration->all settings->add new,添加兩項設定“RewardPercent”和“RewardPoint”,分別為獲得積分的百分比和積分的貨幣符號。

content management->localization->add new,添加兩項“Promotion.RewardMessageForGuest”和“Promotion.RewardPointName”分別為 guest user在結帳時的提示資訊和本地化以後的貨幣符號,其實這個可以用上邊的積分符號代替。

然後,我們在資料庫裡添加一個新的表
CREATE TABLE [dbo].[Nop_RewardAudit](
[RewardID] [int] IDENTITY(1,1) NOT NULL,
[OrderID] [int] NOT NULL,
[RewardTime] [datetime] NOT NULL,
[Status] [nchar](10) NOT NULL,
[Amount] [money] NOT NULL,
[RewardDetails] [nvarchar](2000) NULL,
CONSTRAINT [PK_Nop_RewardAudit] PRIMARY KEY CLUSTERED
(
[RewardID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
這個表用來做audit,目前還沒有把audit的介面做出來,不過功能倒是設計出來了,有空加上。然後分別再向customer表和order表加一個money欄位:

ALTER TABLE dbo.Nop_Customer SET (LOCK_ESCALATION = TABLE)

order表的類似,我把代碼搞沒了,大家自己加上應該沒問題。接下來老丁我還得改幾個預存程序,不過強烈建議放到後邊改,是更新使用者和插入訂單的。

CREATE PROCEDURE dbo.Nop_CustomerRewardPointCalculation
@cID int,
@orderID    int,
@points money,
@details nvarchar(2000)
AS
update nop_customer
set rewardPoint = rewardPoint + @points
where CustomerID = @cID

insert into Nop_RewardAudit
(OrderID,RewardTime,Status,Amount,RewardDetails)
values
(@orderID,getdate(),””,@points,@details)

還有:
CREATE PROCEDURE dbo.Nop_CustomerSetRewardPoint
@cID int,
@orderID    int,
@points money,
@details nvarchar(2000)
AS
update nop_customer
set rewardPoint = @points
where CustomerID = @cID

insert into Nop_RewardAudit
(OrderID,RewardTime,Status,Amount,RewardDetails)
values
(0,getdate(),””,@points,@details)
RETURN

更新使用者資訊:

CREATE PROCEDURE [dbo].[Nop_CustomerUpdate]
(
@CustomerId int,
@CustomerGUID uniqueidentifier,
@Email nvarchar(255),
@PasswordHash nvarchar(255),
@SaltKey nvarchar(255),
@AffiliateID int,
@BillingAddressID int,
@ShippingAddressID int,
@LastPaymentMethodID int,
@LastAppliedCouponCode nvarchar(100),
@LanguageID int,
@CurrencyID int,
@TaxDisplayTypeID int,
@IsTaxExempt bit,
@IsAdmin bit,
@IsGuest bit,
@IsForumModerator bit,
@TotalForumPosts int,
@Signature nvarchar(300),
@AdminComment nvarchar(4000),
@Active bit,
@Deleted bit,
@RegistrationDate datetime,
@TimeZoneID nvarchar(200),
@Username nvarchar(100),
@AvatarID int,
@RewardPoint money
)
AS
BEGIN

UPDATE [Nop_Customer]
SET
CustomerGUID=@CustomerGUID,
Email=@Email,
PasswordHash=@PasswordHash,
SaltKey=@SaltKey,
AffiliateID=@AffiliateID,
BillingAddressID=@BillingAddressID,
ShippingAddressID=@ShippingAddressID,
LastPaymentMethodID=@LastPaymentMethodID,
LastAppliedCouponCode=@LastAppliedCouponCode,
LanguageID=@LanguageID,
CurrencyID=@CurrencyID,
TaxDisplayTypeID=@TaxDisplayTypeID,
IsTaxExempt=@IsTaxExempt,
IsAdmin=@IsAdmin,
IsGuest=@IsGuest,
IsForumModerator=@IsForumModerator,
TotalForumPosts=@TotalForumPosts,
[Signature]=@Signature,
AdminComment=@AdminComment,
Active=@Active,
Deleted=@Deleted,
RegistrationDate=@RegistrationDate,
TimeZoneID=@TimeZoneID,
Username=@Username,
AvatarID=@AvatarID,
RewardPoint = @RewardPoint
WHERE
[CustomerId] = @CustomerId

END

Nop_OrderInsert的就不用我再放上來了吧,按上邊這個SP來改問題不大。

今天先發到這兒。明天繼續發CS代碼部分。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.