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 ...
随机推荐
- wamp环境网站根目录更改
1.修改wampserver的默认目录 安装好wampserver后,网站根目录默认为:安装目录\wamp\www,也就是wampserver安装目录下的www文件夹. 我们以更改为:D\www为例. ...
- 修改PHP的默认时区
每个地区都有自己的本地时间,在网上及无线电通信中,时间的转换问题显得格外突出.整个地球分为24个时区,每个时区都有自己的本地时间.在国际无线电或网络通信场合,为了统一起见,使用一个统一的时间,成为通用 ...
- 关于Python文档读取UTF-8编码文件问题
近来接到一个小项目,读取目标文件中每一行url,并逐个请求url,拿到想要的数据. #-*- coding:utf-8 -*- class IpUrlManager(object): def __in ...
- JS 操作Dom节点之CURD
许多优秀的Javascript库,已经封装好了丰富的Dom操作函数,这可以加快项目开发效率.但是对于非常注重网页性能的项目来说,使用Dom的原生操作方法还是必要的. 1. 查找节点 document. ...
- C#程序中将图片转换为byte数组,并将byte数组转换为图片
/// <summary> /// 将图片以二进制流 /// </summary> /// <param name="path"></pa ...
- What qualities characterize a great PhD student
省理工计算机教授David Karger接触了许多世界上最杰出的博士生,近日总结出了优秀博士通常具备的五点品质:0 过人的智力 1 好奇心 2 创造力 3 纪律性与生产力 4 与观众沟通 5 与伙伴沟 ...
- Android JSON,Gson,fastjson实现比较
activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- COJ 0650 绝世难题(一) 可爱的仙人掌
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=620 绝世难题(一) 可爱的仙人掌 难度级别:E: 运行时间限制:1000m ...
- Java StringTokenizer分割字符串
除了String本身的split方法,JDK在很早就提供了StringTokenizer这个类来分割字符串: 不过,由于正则表达式和String本身的功能越来越多,StringTokenizer已经被 ...
- 五子棋——C++
最近在学C++,这个是照葫芦画瓢的五子棋C++版- - 依赖SDL_PingGe_1.3,很多实用的函数,类我都封装成DLL了调用起来真是舒服啊.. 不过一方面要对DLL做测试,一方面要开发,一个人还 ...