• 为nopcommerce自定义用户积分功能(1)


    由于此功能为定制功能,所以不方便把所有代码都发上来,而且功能或许还有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代码部分。
  • 相关阅读:
    IDEA最常用快捷键汇总+快速写出Main函数
    设计模式之代理模式
    Java多线程中join、yield、sleep方法详解
    git基础命令详解
    用友网络科技Java高级开发面试题(2019)
    Java内部类超详细总结(含代码示例)
    构造器中绝对绝对不能调用可被覆盖的方法
    写给小白看的Git的安装配置与使用
    Vue学习笔记5--前端工程化
    Vue学习笔记4--vue-router路由
  • 原文地址:https://www.cnblogs.com/dingsea/p/1670929.html
Copyright © 2020-2023  润新知