拼吾爱程序人生

首页 » 编程应用 » 应用系统 » DiscuzNT商品交易插件设计之[信用机制]
cobra - 2008-9-16 12:40:00
在商品交易过程中,信用机制的引入是至关重要的,我们在这里参考的是discuz的做法(其实它最终是采

用类似TAOBAO的好评机制来实现的)。所以在每笔交易结束时,都会要求买卖双方进行互评,以便为信用机

制提供数据。而这里所使用的信用等级信息是参考discuz的数据进行相应级别设置的,其“信用等级”表


(dnt_goodscreditrules)结构参见下图所示:


 附件: 您所在的用户组无法下载或查看附件




    其初始化数据设置在后台管理中显示如下:



 附件: 您所在的用户组无法下载或查看附件
   
   
    好了,现在有了评分等级的依据,下面就开始介绍一下关于信用数据是如何操作的了。
   
    首页打开源码包,在Discuz.Mall项目下的Pages文件夹中找到goodsrate.cs文件(这个就是买卖双方互
评的页面,因为之前的文章中已做过介绍,这里就不再介绍了),其相应的逻辑代码如下所示(评见注释):

Code


上面代码段中的如下对象实例化语句中,Goodsrateinfo对象声明如下:

Code


上面的类声明对应数据库中的dnt_goodsrates表,而该类的结构如下图所示:


 附件: 您所在的用户组无法下载或查看附件



       
    在完成了上面所说的类实例初始化设置之后,就要通过如下代码段来向数据表插入数据了:

Code


上面代码中的GoodsRates.CreateGoodsRate(goodsrateinfo)一行即是插入评价信息的代码,其函数声明如下所示:

Code


这里因为只是简单的向数据库中插入记录,所以就不多做解释了。请接着看上面代码中的语句:

Code


这段代码主要是对评价状态进行确定,并通过该数据更新当前的交易评价状态,其RateClosed方法如下所示:

Code


作者: 代震军, daizhj
    原帖链接: http://www.cnblogs.com/daizhj/archive/2008/08/26/1276467.html

 您可能对 [应用系统] 的这些文章也感兴趣:

谷歌Chrome浏览器开发内幕
Google App Engine 未公开的Search API
XNA Game Studio 3.0 发布
DotNetNuke 4.0安装
价值百万美元的SOA问题:选择软件ESB还是硬件设备?
成熟的Web服务和虚幻的SOA实现
数据抽取、清洗与转换 BI项目中ETL设计
Flash与3D编程探秘(五)- 摄像机旋转和移动
IBM拟50亿美元收购Cognos布局SOA BI领域
八种常见的防盗链方法总结及分析
cobra - 2008-9-16 12:42:00
到这里还有一个重要工作没有说,就是上面代码中的如下语句:

Code


在解释上面方法之前有必要先介绍一下关于信用机制显示数据的一些设计思想。请先看一下“信用评价”的页面截图:



 附件: 您所在的用户组无法下载或查看附件


   
   
    当前用户(截图中是admin)的评价按日期分为:最近一周,最近一个月,最近六个月,六个月前。按类型又分为:好评,中评,差评。而这些数字如果在显示时进行实时统计的话(实时查询上面的dnt_goodsrates表),在页面响应时间上会很慢,因为要做的查询“工作量”上实在是太大了,让人“无法接受”,因此这里我引入了一个数据表来记录要显示的相应数据,也就是dnt_goodsusercredits,下面即是该数据表的字典截图:



 附件: 您所在的用户组无法下载或查看附件



   这样我们就可以通过相应的数据行来显示“信用评价页面”中的各行内容了,这样做一是优化查询(只要一次查询)即可,二是数据与前台页面对应关系明确,一目了然。


      当然,在这里我们需要一些当前用户的信用初始化数据,用于在日后有评价记录进入系统时来累加该表中的相应字段,而这项工作也交给了上面所述的方法GoodsUserCredits.SetUserCredit。

      通过上面的介绍之后,我们就来看一下实际的代码是如何实现这些功能的。请看下面的SetUserCredit方法声明(位于App_Code文件夹下的GoodsUserCredits.cs文件):

Code


上面代码段中的第一行即是获取相应的用户信用记录的方法,其返回的是一个GoodsusercreditinfoCollection类型,该类型是一个集合类型,而GetUserCreditList方法声明如下所示:

Code


该函数用于将数据表中查询的信用数据转换(DTO)成为集合类型,而其GetGoodsUserCreditByUid方法所执行的查询语句如下所示(注:这里要返回的记录行数为6,即是上面信用页面截图中所列的6行数据):

Code


而上面SetUserCredit方法中的如下代码,即是在尚无用户初始数据时来进行初始化操作的:

Code


其SQL语句如下所示(注:插入了6行数据):

Code


在初始化相应数据后再次实例化goodsusercreditinfocoll对象,以便在接下来的代码中进行数据更新绑定,如下所示:

Code


这样,我们可在新创建信用数据之后用已存在的信用数据来更新已有的信用评价记录数了(参见信用页面截图)。

   

    当然说到这里,还有一个问题没有解决,就是数据时效性的问题。因为从上面的代码中可以看出,只有在发生评价行为时,才会更新相应的数据,而如果用户很长时间没有进行交易的话,数据是不会进行更新的,而该问题的解决方案包括:



    1. 可以在用户登陆时进行异步统计更新
    2. 可在后台加入计划任务,以便在指定时间对全部用户的交易信用数据进行统计
    3. 在上述方面中直接进行更新

      当然目前还没有最终实现,因为还不排除存在“更优解决方案”的可能性。当然这里所造成的问题并不十分严重,因为在好评率上不会因为这个问题而造成误差,同时评价信息也未受到影响,这会为将来解决方案出台后进行信息统计提供可靠的数据支持。




  到这时,主要的业务逻辑和设计思路解释完了,而相应的页面数据显示基本上是使用了ajax +js进行开发的,相关内容大家可以参见相应的模板(eccredit.htm)及js文件(template_eccredit.js)说明。这里就不多加说明了。



  当然,这里的信用机制还缺少一些分支流程的支持。比如因为买卖双方的“误操作”,造成评价信息的不准确。所以应该提供“申诉(投诉)机制”来让管理员或双方介入修改相应的评价信息数据等。而这些都有待日后进一步完善设计。



  好了,今天的内容就先到这里了。


    关于DiscuzNT交易插件介绍的系列文章到此就要告一段落了, 谢谢大家的支持和关注:) 



    作者: 代震军, daizhj
    原帖链接: http://www.cnblogs.com/daizhj/archive/2008/08/26/1276467.html
1
查看完整版本: DiscuzNT商品交易插件设计之[信用机制]
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: