Nopcommerce商城添加【满XX减XX优惠券】功能
公司的电商网站要做个优惠券的功能,nop框架,但我接触nop时间不多,最后还是为了功能而完成了。这中间肯定有很多小问题。
Nopcommerce自带的促销功能感觉不是很好,首先优惠券功能放在购物车页面的,如果直接下单就用不了优惠。其次nop的优惠还必须要输入优惠券码很麻烦,最后不满足现在电商主流的单笔订单满XX减XX优惠券功能。但是nop提供了很多基础的方法,我们只要稍作更改就可以达到我们想要的。
优惠券首先需要和用户挂钩,用户可以领取和查看自己的优惠券。优惠券的功能nop基本已经实现了,但是没把优惠券和用户挂钩。
【第一步】我们添加一张表,将优惠券和用户映射。标结构很简单,不多说了。
添加一张表,底层还要添加很多东西,慢慢添加。
【第二步】编写满xx减xx的插件,说实话我接触nop时间不长,插件更不会用。但是nop有个自带的促销插件是商城客户总的订单满足xx就可以使用优惠的,拿过来改造一下就可以了。
【第三步】将Service下的几个方法改造
IDscountService下的IsDiscountValid这个方法主要是判断当前用户以及当前优惠券是否满足使用条件,但是他用了一个优惠券码判断,为了使nop代码最小改动,这里我们注释掉就可以了。
接着在OrderTotalCalculationService下重载一个GetShoppingCartTotal方法
原来的方法优惠券和优惠金额都是nop自己选一个最佳的优惠方案然后返回这个优惠券和优惠的金额
(hasDiscount那个参数是我加上去的,因为购物车页面也会调用该方法,当显然购物车不应该使用优惠券,所以我加了个参数,在购物车的是为false,不计算优惠信息)
而我希望是自己传一个优惠券然后改价,所以我们得重载一个
appliedDiscount就是我们需要传过去优惠券,然后计算价格,可以为空的,用户可能没有优惠券或者优惠券没使用优惠券
【第四步】优惠券领取里面 供用户领取
把所有使用期限未过期的优惠券都赛选出来
用户领取优惠券 ajax调用
【第五步】 订单确认页面,把本订单所有满足的优惠券都赛选出来,并且默认选中最佳优惠
这块我感觉我写的有问题,主要还是想偷懒使用nop的方法
先把商城所有满足条件的优惠券选出来,再根据之前创建的表映射,找到用户拥有的未使用的交集优惠即是可拥的优惠券...
【第六步】修改OrderProcessingService方法
SelDiscount新增一个属性,表示当前这个order选择的discount,给orderDiscountAmount赋这个discount折扣的金额,用于在后台订单展现订单折扣的金额
顺带在用户后台的订单详情页加上优惠信息
完工。。。第一次写这么长的,肯定好多问题。一边学一边改。
Nopcommerce商城添加【满XX减XX优惠券】功能的更多相关文章
- tomcat 启动参数 Xms, Xmx, XX:MaxNewSize, XX:PermSize, -XX:MaxPermSize, Djava.awt.headless
在 tomcat/bin/catalina.sh 的 第一行#!/bin/sh 下添加 JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:MaxNewSiz ...
- Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式
Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天 安装 shell ...
- elastic-job集成到springboot教程,和它的一个异常处理办法:Sharding item parameters '1' format error, should be int=xx,int=xx
先说这个Sharding item parameters '1' format error, should be int=xx,int=xx异常吧,这是在做动态添加调度任务的时候出现的,网上找了一会没 ...
- 我的第一篇博客之js的XXXX年XX月XX日 星期[日一-六] [上下]午 XX时:XX分
<!DOCTYPE html> <html> <head> <title>test</title> ...
- java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100/虚拟机调优
JVM的堆的内存, 是通过下面面两个参数控制的 -Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 -Xmx 是最大堆的大小 当最小堆占满后,会尝试进行GC,如果GC之后 ...
- -XX:PermSize -XX:MaxPermSize 永久区参数设置
-XX:PermSize -XX:MaxPermSize –设置永久区的初始空间和最大空间 -XX:PermSize 设置持久代(perm gen)初始值,物理内存的1/64 -XX:MaxPe ...
- JAVA -Xms -Xmx -XX:PermSize -XX:MaxPermSize 区别
java -Xms -Xmx -XX:PermSize -XX:MaxPermSize 在做java开发时尤其是大型软件开发时经常会遇到内存溢出的问题,比如说OutOfMemoryError ...
- Amazon全场满$35减$5 (需Facebook)
在Amazon.com上建一个Wish List(创建Wish List后须点击“Manage your lists”,在“Privacy”那一栏选择“Public”或“Shared”,再回到这个链接 ...
- [Irving]WPF Invalid character in the given encoding. Line xx, position xx.' XML is not valid.
WPF开发中发现Xaml界面中突然抽风似的提示错误 Invalid character in the given encoding. Line xx, position xx.' XML is not ...
随机推荐
- 实用iPhone Cydia插件
BadgeClear(角标清除):可以清除App推送所在图标右上角出现的红色角标.在桌面长按图标后,图标开始左右摇动,再双击图标即可清除点击的图标角标. Bitesms(短信):收费插件,具有 ...
- python:UnboundLocalError: local variable 'xxx' referenced before assignment
近来一直都在学习python语言,偶然在伯乐在线看到2017年京东C/C++的面试题.就打算用python+ST3 IDE顺便敲下面试题代码. 原题 C语言: #include <stdio.h ...
- python执行shell获取硬件参数写入mysql
最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...
- 如何让div出现滚动条
由于DIV本身属性并没有滚动条设置,但是有些地方的设计却需要出现滚动条,如何实现呢?本人采用CSS样式来控制显示!而且也很简单,代码如下: <div style="OVERFLOW-Y ...
- MVC中的过滤器
authour: chenboyi updatetime: 2015-05-09 09:30:30 friendly link: 目录: 1,思维导图 2,过滤器种类(图示) 3,全局过滤器 ...
- Sublime Text 3 中文汉化绿色破解特别版下载
Sublime Text是一款代码编辑器,几乎支持所有语言的编写.sublime给人们的印象不外乎小巧.速度快.并且快捷键丰富而强大.不知繁多的插件. sublime一般被应用到前端的开发.Subli ...
- Oracle归档日志定时删除任务
1.在Oracle账号下,创建归档日志删除文件del_arch.sh 文件位置:/home/oracle/crontabOra,内容如下: #!/bin/bash LOG_DIR=/home/orac ...
- PIL Image 转成 wx.Image、wx.Bitmap
import wx from PIL import Image def ConvertToWxImage(): pilImage = Image.open('1.png') image = wx.Em ...
- 让乔布斯立足肩上的C语言之父
2011年,人们对乔布斯的去世记忆深刻,但这一年还有另一位本应获得同样关注的人物也与世长辞,他就是C语言之父丹尼斯·里奇(Dennis Ritchie). 不过,并非所有人都没能正确认识到里奇所曾作出 ...
- Andoird 监听开机广播和关机广播
需求:有时候,我们需要自己的程序在开机后自动运行;在关机时,记录一些信息到文件中. 一.开机广播监听Android系统启动完成后会自动发出启动完成广播(android.intent.action.BO ...