SSM实现网上商城 有聊天功能
1.项目介绍
实现一个网上商城,商品信息展示,购物车,订单管理,个人中心,商品评价,商品搜索,地址管理,聊天,后台管理(商品增删改查),分类管理,活动管理,客服聊天回复
2.开发环境
- 开发环境:IDEA/eclipse、Tomcat8.5+
- 数据库:MySql
- 前端主要使用Bootstrap以及JQuery,后端基于SpringMVC、Spring、MyBatis进行开发,使用Maven构建
- activeMQ
相关代码
@Controller
public class OrderController {/*@Value("#{addressService}")*/@Autowiredprivate AddressService addressService;@Autowiredprivate ShopCartService shopCartService;@Autowiredprivate GoodsService goodsService;@Autowiredprivate OrderService orderService;@Autowiredprivate ActivityService activityService;@RequestMapping("/order")public String showOrder(HttpSession session, Model model) {User user = (User) session.getAttribute("user");if (user == null) {return "redirect:/login";}//查询当前用户的收货地址AddressExample addressExample = new AddressExample();addressExample.or().andUseridEqualTo(user.getUserid());List<Address> addressList = addressService.getAllAddressByExample(addressExample);model.addAttribute("address", addressList);//订单信息//获取当前用户的购物车信息ShopCartExample shopCartExample = new ShopCartExample();shopCartExample.or().andUseridEqualTo(user.getUserid());List<ShopCart> shopCart = shopCartService.selectByExample(shopCartExample);//获取购物车中的商品信息List<Goods> goodsAndImage = new ArrayList<>();Float totalPrice = new Float(0);Integer oldTotalPrice = 0;for (ShopCart cart:shopCart) {Goods goods = goodsService.selectById(cart.getGoodsid());List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());goods.setImagePaths(imagePathList);goods.setNum(cart.getGoodsnum());//活动信息Activity activity = activityService.selectByKey(goods.getActivityid());goods.setActivity(activity);if(activity.getDiscount() != 1) {goods.setNewPrice(goods.getPrice()*goods.getNum()* activity.getDiscount());} else if(activity.getFullnum() != null) {if (goods.getNum() >= activity.getFullnum()) {goods.setNewPrice((float) (goods.getPrice()*(goods.getNum()-activity.getReducenum())));} else {goods.setNewPrice((float) (goods.getPrice()*goods.getNum()));}} else {goods.setNewPrice((float) (goods.getPrice()*goods.getNum()));}totalPrice = totalPrice + goods.getNewPrice();oldTotalPrice = oldTotalPrice + goods.getNum() * goods.getPrice();goodsAndImage.add(goods);}model.addAttribute("totalPrice", totalPrice);model.addAttribute("oldTotalPrice", oldTotalPrice);model.addAttribute("goodsAndImage", goodsAndImage);return "orderConfirm";}@RequestMapping("/orderFinish")@ResponseBodypublic Msg orderFinish(Float oldPrice, Float newPrice, Boolean isPay, Integer addressid,HttpSession session) {User user = (User) session.getAttribute("user");//获取订单信息ShopCartExample shopCartExample = new ShopCartExample();shopCartExample.or().andUseridEqualTo(user.getUserid());List<ShopCart> shopCart = shopCartService.selectByExample(shopCartExample);//删除购物车for (ShopCart cart : shopCart) {shopCartService.deleteByKey(new ShopCartKey(cart.getUserid(),cart.getGoodsid()));}//把订单信息写入数据库Order order = new Order(null, user.getUserid(), new Date(), oldPrice, newPrice, isPay, false, false, false, addressid,null,null);orderService.insertOrder(order);//插入的订单号Integer orderId = order.getOrderid();//把订单项写入orderitem表中for (ShopCart cart : shopCart) {orderService.insertOrderItem(new OrderItem(null, orderId, cart.getGoodsid(), cart.getGoodsnum()));}return Msg.success("购买成功");}}
@Controller
public class MainController {@Autowiredprivate CateService cateService;@Autowiredprivate GoodsService goodsService;@RequestMapping("/main")public String showAllGoods(Model model, HttpSession session) {Integer userid;User user = (User) session.getAttribute("user");if (user == null) {userid = null;} else {userid = user.getUserid();}//数码分类List<Goods> digGoods = getCateGoods("数码", userid);model.addAttribute("digGoods", digGoods);//家电List<Goods> houseGoods = getCateGoods("家电", userid);model.addAttribute("houseGoods", houseGoods);//服饰List<Goods> colGoods = getCateGoods("服饰", userid);model.addAttribute("colGoods", colGoods);//书籍List<Goods> bookGoods = getCateGoods("书籍", userid);model.addAttribute("bookGoods", bookGoods);return "main";}public List<Goods> getCateGoods(String cate, Integer userid) {//查询分类CategoryExample digCategoryExample = new CategoryExample();digCategoryExample.or().andCatenameLike(cate);List<Category> digCategoryList = cateService.selectByExample(digCategoryExample);if (digCategoryList.size() == 0) {return null;}//查询属于刚查到的分类的商品GoodsExample digGoodsExample = new GoodsExample();List<Integer> digCateId = new ArrayList<Integer>();for (Category tmp:digCategoryList) {digCateId.add(tmp.getCateid());}digGoodsExample.or().andCategoryIn(digCateId);List<Goods> goodsList = goodsService.selectByExampleLimit(digGoodsExample);List<Goods> goodsAndImage = new ArrayList<>();//获取每个商品的图片for (Goods goods:goodsList) {//判断是否为登录状态if (userid == null) {goods.setFav(false);} else {Favorite favorite = goodsService.selectFavByKey(new FavoriteKey(userid, goods.getGoodsid()));if (favorite == null) {goods.setFav(false);} else {goods.setFav(true);}}List<ImagePath> imagePathList = goodsService.findImagePath(goods.getGoodsid());goods.setImagePaths(imagePathList);goodsAndImage.add(goods);}return goodsAndImage;}
}
相关文章:

as3中TextFormat类的使用
在AS3中对TextField进行格式化时可以有三种方法:html标签控制格式css使用TextFormathtml比较方便,但很有限,CSS可以外置维护比较容易,但缺少变化,TextFormat可以复杂多变,只是写起来比较麻烦,并…

pyqt5 使用 QTimer, QThread, pyqtSignal 实现自动执行,多线程,自定义信号触发。
渣渣用法,请等待我心情好的时候更新。 1.第一个例子 1.1 先看mainwindow.py from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(640, 320…

linux secureCRT 显示中文乱码
安装的时候,只安装了英文,没有安装中文,所以只有en_US.UTF-8.因为linux本身就支持多语言,所以我们只需要在光盘 上找到2个中文支持字体包安装上即可.这两个字体文件是存放在第四张光盘上的Servers目录下: fonts-chines…

PicGo 配置Gitee 图床
目录 1.下载安装picGo 2.打开picGo详情页面 3.创建gitee图床库 4. 配置picGo 5.获取gitee token信息 6.与typora搭配使用 1.下载安装picGo 百度picgo csdn下载地址:https://download.csdn.net/download/huyande123/12582917 2.打开picGo详情页面 3.创建gitee图床库 …

文件夹内多文件上传到服务器
文件夹上传至服务器希望可以给你一点帮助 直接上代码jsp页面 <div style"text-align:center; vertical-align:middel" id"uploadFile"> <input type"file" name"file" id"file" multiple"multiple" webk…

【Socket研究】~。~ Scoket开发蛋疼笔记 Silverlight
客户端连接步骤【Silverlight】 【注意】 Silverlight 客户端 记得一定是异步连接。 一。连接步骤 1.实例一个Scoket 2.实例套接字 SocketAsyncEventArgs 3.给套接字载入连接信息 4.载入异步方法转载于:https://www.cnblogs.com/manbaal/archive/2011/03/08/1977521.html

通知:正式迁移至新博客
博客迁移这事情已经有一段时间了,不过最近发现似乎还有许多朋友不知道这点,以为我怎么不写博客了——其实我还在写,写的还挺勤快的,只不过已经不继续同步到博客园了。这事儿说来也很遗憾,原本我打算两边同步更新&#…

java中别名问题
Java中别名问题 Java中涉及到对象引用时常常出现意想不到得问题直接将一个对象赋值给另一个对象时 改变另一个对象 开始的那个对象也出现改变class Person{private int age;public int getAge() {return age;}public void setAge(int age) {this.age age;}} 对于对象Person做如…

中国挪动批改KPI查核制度将器重客户满意度
飞象网讯(魏德龄/文)记者从相关动静处置解到,中国挪动2011年的KPI查核将大幅缩减,并消除数据业务、TD用户数和集体客户等目标,重点调高了利润和客户满意度目标,并加入了相关EVA财务目标查核。去年ÿ…

ElasticSearch安装使用 操作索引
文章目录1.下载并安装2.了解es的配置文件**elasticsearch-.yml**(中文配置详解)3.使用head插件1.使用谷歌浏览器head插件2.使用压缩中的head程序4.使用kibana(安装)1.什么是kibana2.kibana国际化,将kibana设值成中文3.启动(es先启…

36.两个链表的第一个公共结点——剑指offer
/* 找出2个链表的长度,然后让长的先走两个链表的长度差,然后再一起走 (因为2个链表用公共的尾部) */ class Solution { public:ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {int len1 findListLenth(pH…

浅析SAAS数据模型设计(Oracle)
目前SAAS平台对于大家来说并不陌生,市场上真正属于SAAS应用的并不是特别多,还有很大一部分是ASP的模式在运行,不管对于公司还是技术部门都是很大的挑战。去年在做elearning项目的时候其实也就是一个ASP的模式扩展,ASP模式本身就会…

编译原理(六)自底向上分析之LR分析法
自底向上分析之LR分析法 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记。 基本概念 1. LR分析:从左到右扫描(L)自底向上进行规约(R),是规范规约,也即最右推导(规范推导)&a…

一篇文章让你搞懂原型和原型链
每一个构造函数在被创建的时候,会自动创建一个相应的对象,这个对象就是原型对象,这个函数有一个指向该对象的指针。举个例子: 下面创建了一个函数person。 function person () { } 则 person.prototype 就是原型对象。而原型对象里…
elasticsearch 文档操作
文章目录single API1.添加数据2.更新数据PUTPOST --此方式更零活,可指定修改指定字段2.查询数据简单查询--根据id查询根据查询条件查询 --query string search根据查询条件查询--query DSL1.term/terms 过滤2.range过滤3.exists 和 missing 过滤4.bool过滤5.bool查询…

一起学WP7 XNA游戏开发(八. 让3d model动起来)
如何让3d model动起来,其实就是要给model的bone设置动作,这样整个model就会动起来了。一.获取Bones在fbx文件中可以看到所有bones的名称,这样就可以通过名称来获取到bones。turretBone tankModel.Bones["turret_geo"];…

【Python】解析Python中类的使用
目录结构: contents structure [-]类的基本使用专有方法继承单重继承多重继承砖石继承1.类的基本使用 下面是类使用的一个简单案例, class person:"person 类的描述信息"def __init__(self,name"",age0):self.name nameself.age a…

hive中array嵌套map以及行转列的使用
1. 数据源信息 {"student": {"name":"king","age":11,"sex":"M"},"sub_score":[{"subject":"语文","score":80},{"subject":"数学","score&qu…
SpringBoot 操作elasticsearch
SpringBoot 操作elasticsearch 版本环境 jdk1.8elasticsearch 7.6.1 maven <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>注意版本…

替换WCF默认序列化方式
创建类 : using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel.Description; using System.Xml; using System.Runtime.Serialization; namespace Kingge.Mini.Network { public class NetDataContra…

Linux下vi编辑器命令精华版
最近开始使用vi编辑器,用了几天,发现其实还是比较好用的。对自己常用的命令做个总结,以备实时查阅。一下内容是对网络多篇文章的总结。进入vi的命令:vi filename :打开或新建文件,并将光标置于第一行首 vi filename &…

测试用例评审关注点
测试用例评审关注点 1、用例设计是否清晰、合理、简洁; 2、用例是否高效对需求进行覆盖,是否覆盖测试需求上的所有功能点; 3、优先级是否合理; 4、用例是否有很好的可执行性(例如用例的“执行步骤”、“期待结果”是否…

命令行收集(DOS/Linux/nc/xscan/xsniffer)
#1 一: net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C:到…

偏前端 - vue-cli(axios请求数据==》token+按接口参数顺序(参数值拼接base64)- MD5)...
token按接口参数顺序(参数值拼接base64)-> MD5) 请教于“喵咪”,再此特别鸣谢!~ 特别强调:import qs from qs; 这个内部方法一定要用哦。参数签名base64md5都成功的情况华。接口还是爆500,就是和这个有关…
Docker 搭建elasticsearch 7.6.x集群
Docker 搭建elasticsearch 7.6.x集群 文章目录拉取镜像设置Elasticsearch挂载目录编写elasticsearch.yml配置文件node-1node-2node-3创建镜像验证是否搭建成功问题max virtual memory areas vm.max_map_count [65530] is too low, increase to at least参考拉取镜像 docker pu…

乐嘉性格色彩分析测试题
乐嘉<性格色彩>分析测试题 说明:最符合你的句子用红色作标记 1. 关于人生观,我的内心其实是: A 希望能够有尽量多的人生体验,所以会有非常多样化的想法。 B在小心合理的基础上,谨慎地确定自己的目标ÿ…

OAuth_1
OAuth2.0是一个应用之间彼此访问数据的开源授权协议。比如,一个游戏应用可以 访问Facebook的用户数据。用户访问web游戏应用,该游戏应用要求用户通过Facebook 登录。用户登录到Facebook,再重定向回游戏应用,游戏应用就可以访问用户…

ubuntu 使用阿里云 apt 源
以下内容来自 https://opsx.alibaba.com/mirror Ubuntu对应的“帮助”信息 修改方式:打开 /et/apt/sources.list将http://archive.ubuntu.com/替换为mirrors.aliyun.com即可 PS:网络上的信息,一定得注意时效性。以下内容,均为此时…

ecos 编译时无法找到 tclConfig.sh 和 tkConfig.sh
这是因为 tcl-devel tk-devel 一般系统中默认是不安装的,至少cent-os 5.5 和fedora 11是这样的,安装这两个包即可。 # yum install tcl-devel tk-devel 补记: ubuntu 10.04.2 上为了便于多个版本的tcl的存在,tcl被安装的位置不太一…

从消息处理角度看应用程序与windows的关系(图示)
转载于:https://blog.51cto.com/gzkhrh/338533