如何使用ssm实现基于java web的网上书城系统的设计与实现+vue

@TOC

ssm123基于java web的网上书城系统的设计与实现+vue

JAVA简介

Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,JSP(java server pages),和XML技术。JAVA语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,开发者只需要知道一些概念就能够编写出一些应用程序。Java程序相对较小,其代码能够在小机器上运行。Java是一种计算机编程语言,具有封装、继承和多态性三个主要特性,广泛应用于企业Web应用程序开发和移动应用程序开发。

Java语言和一般编译器以及直译的区别在于,Java首先将源代码转换为字节码,然后将其转换为JVM的可执行文件,JVM可以在各种不同的JVM上运行。因此,实现了它的跨平台特性。虽然这使得Java在早期非常缓慢,但是随着Java的开发,它已经得到了改进。

2.3 Tomcat服务器

Tomcat属于一种轻型的服务器,当程序员需要开发或调试JSP 程序时,则通常会将该服务器作为首选。对于一个仅具有计算机基础知识的人来说,计算机系统具有一个好的Apache服务器,可以很好的对HTML 页面进行访问。Tomcat 虽然是Apache的扩展,但是它们都是可以独立运行的,二者是不互相干扰的。当配置正确的时候,Apache服务器为HTML 页面的运行提供技术支持,Tomcat 的任务则是运行Servle和JSP 页面。Tomca也具有一定的HTML页面处理功能。

2.4 MySQL数据库

数据库是系统开发过程中不可或缺的一部分。 在WEB应用方面,MySQL AB开发了一个具有很大优势的MySQL关系数据库管理系统。 MySQL可以将数据存储在不同的表中,这非常灵活,并且还可以提高系统在实际应用中的速度。 数据库访问最常用于标准SQL语言,MySQL用于SQL语言,因此它具有高度兼容性。数据库的操作是必不可少的,包括对数据库表的增加、删除、修改、查询等功能。现如今,数据库可以分为关系型数据库和非关系型数据库,Mysql属于关系性数据库,Mysql数据库是一款小型的关系型数据库,它以其自身特点:体积小、速度快、成本低等,Mysql数据库是目前最受欢迎的开源数据库。

在WEB应用技术中, Mysql数据库支持不同的操作系统平台,虽然在不同平台下的安装和配置都不相同,但是差别也不是很大,Mysql在Windows平台下两种安装方式,二进制版和免安装版。安装完Mysql数据库之后,需要启动服务进程,相应的客户端就可以连接数据库,客户端可通过命令行或者图形界面工具登录数据库。

2.5 SSM框架

当今流行的"SSM组合框架"是Spring + SpringMVC + MyBatis的缩写,受到很多的追捧,"组合SSM框架"是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于一个轻量级的反转控制框架(IoC),但它也是一个面向表面的容器(AOP)。SpringMVC常常用于控制器的分类工作模式,与模型对象分开,程序对象的作用与自动取款机进行处理。这种解耦治疗使整个系统的个性化变得更加容易。MyBatis是一个良好的可持续性框架,支持普通SQL查询,同时允许对存储过程的高级映射进行数据的优化处理。大型Java Web应用程序的由于开发成本太高,开发后难以维护和开发过程中一些难以解决的问题,而采用"SSM组合框架",它允许建立业务层次结构,并为这个问题提供良好的解决方案。

3 系统分析

3.1 可行性分析

3.1.1 技术可行性

技术可行性主要取决于系统设计和开发中使用的软硬件配置是否能满足应用要求,相关技术是否能保证系统设计完成后的正常运行。本网站在Windows操作系统中进行开发,并且目前PC机的性能已经可以胜任普通系统的web服务器。系统开发所使用的技术也都是自身所具有的,也是当下广泛应用的技术之一。

系统的开发环境和配置都是可以自行安装的,使用比较成熟的Mysql数据库进行对系统用户之间的数据交互,根据技术语言对数据库管理,结合需求进行修改维护,可以使得系统运行更具有稳定性和安全性,从而完成实现系统的开发。该系统目前采用比较成熟的JAVA技术,并利用其创建的脚本与结合创建动态网页。它可以在普通文本编辑器上编辑而无需编译,它可以直接在服务器上执行。它易于学习和操作,系统开发的基础是高度兼容和灵活的,从技术可行性上来分析系统开发时完全可行的。

3.1.2 经济可行性

网上书城系统的开发之前所做的市场调研及其他管理相关的系统,是没有任何费用的,都是通过开发者自己的努力,所有的工作的都是自己亲力亲为,在碰到自己比较难以解决的问题,大多是通过同学和指导老师的帮助进行相关信息的解决,所以对于系统的开发在经济上是完全可行的,没有任何费用支出的。

使用比较成熟的技术,系统是基于Java的开发,采用Mysql数据库。所以系统在开发人力、财力要求不高,具有经济可行性。

3.1.3 操作可行性

可操作性主要是对系统设计完成后,用户的使用体验度,通过界面导航菜单可以简单明了地进行查看所需的信息内容。对于系统的操作,不需要专业人员都可以直接进行功能模块的操作管理,所以在系统的可操作性是完全可以的。本系统的操作使用的也是界面窗口进行登录,所以操作人员只要会简单的电脑操作就完全可以的。

3.2 项目设计目标与原则

1、关于网上书城系统的基本要求

(1)功能要求:户管理、图书信息管理、一级分类管理、二级分类管理、订单评价管理、图书统计管理、系统管理、订单管理等功能模块。

(2)性能:在不同操作系统上均能无差错实现在不同类型的用户登入相应界面后能不出差错、方便地进行预期操作。

(3)安全与保密要求:用户都必须通过身份验证才能进入系统,并且用户的权限也需要根据用户的类型进行限定。

(4)环境要求:支持多种平台,可在Windows系列、Vista系统等多种操作系统下使用。

2、设计原则

系统架构设计应反映用户与整个系统接口模块之间的有效交互,以确保系统中实时数据的可扩展性和安全性。只有系统设计才能实现这一目标。可以扩展功能模块以适应系统的未来发展。

在系统的所有功能模块中,必须要保证系统的数据安全性、易用性、柔软性和扩展性,下面分别对四个性能进行详细分析。

(1)数据的安全性

对于用户进行网上购物管理所牵扯到的数据信息,必须保证系统数据的安全性,因此在系统设计过程中必须要有多方面的考虑到系统的安全问题并进行解决处理。

(2)易用性

对于易用性主要是对于系统实现完成交付给用户,用户是否可以不用培训就能够进行系统管理操作,也就是常说的傻瓜操作,一定简单明了,任何人都可以上手对数据信息进行操作管理。

(3)柔软性

对于任何一个系统的实现都会涉及的服务种类繁多,所以在设计时一定确保系统可以随时更改并且可以随时处理。

(4)扩展性

互联网的不断发展,对于系统实现的所有的功能随着用户需求的不断提高,功能模块也将要不断扩展。

由于这是一个网上书城系统,系统的设计是为了更好地节省人员成本和各种成本,因此需要考虑系统开发成本和效益。

3.3 系统流程分析

3.3.1 操作流程

对于系统的安全性的第一关,就是用户想要进入系统,必须通过登录窗口,输入自己的登录信息才可以进行登录,用户输入的信息准确无误后才可以进入到操作系统界面,进行功能模块的相对应操作,如果用户输入的信息不正确,则窗口出现提示框,用户登录失败,返回到第一步进行重新输入,如图3-1所示。

图3-1注册流程图

3.3.2 添加信息流程

对于网上书城系统,需要随时添加所需要的数据信息,对于用户添加信息,需要根据添加界面,根据选框的内容进行填写所要添加的数据信息,信息输入完成后判断数据信息是否符合要求,符合要求则添加完成,用户所添加的信息不符合要求,则需要返回到第一步,重新输入数据信息,再进行判断操作,如图3-2所示。

图3-2 添加信息流程图

3.3.3 购买操作流程分析

系统牵扯到交易过程,所以在这一流程把控是比较严格的,确保数据信息的安全。购买流程分析如图3-3所示。

图3-3 购买操作业务流程图

3.4 系统功能需求分析

任意一个新网站的开发都需要完整的任务需求分析,需求分析的质量好坏决定了一个网站开发的意义,俗话说好的开头是成功的一半,对于网上书城系统平台的设计与实现来说前期的分析更加显得尤为重要,任务分析决定了之后任务的开展和设计,只有完美的需求分析才能做出更好的让民众更为满意的网站,否则将会导致无法进行,更无法完成任务。

任务需求分析在整个系统开发的过程中是相当重要的一环,直接决定了开发过程中的软件质量,分析得是否完善,是否考虑到了每一步可能会出现的问题,这些都决定了软件能否正常运行,网站结构是否稳定,是否能让客户满意,需求分析决定了整个系统的框架、功能和要求。

本课题要求实现一套网上书城系统的设计与实现,系统主要分为前台和后台。主要包括前台:个人中心、后台管理、购物车、在线客服。后台:用户管理、图书信息管理、一级分类管理、二级分类管理、订单评价管理、图书统计管理、系统管理、订单管理等功能。

4 系统设计

4.1系统结构设计

架构设计的目的是反映一个结构和其他元素之间的关系,抽象,通常用于指导大型软件系统。将一个巨大的任务细分为多个小任务的过程是系统架构的总体设计。完成小任务后,整个任务就可以完成了。具体的实现过程是分解系统,分析各部分的功能、接口和逻辑关系。页面是一个一个模块组建而成的,层次结构分明,思想运用的是面向对象,一个实体对应一个数据类型,还要对每个数据类添加一个实施类。

网上书城系统的实现主要包括用户和管理员两个用户角色,由于系统用户角色不同所使用的功能模块相应不同,管理员根据需求对系统功能模块进行维护管理操作。

根据我们对网上书城系统的功能要求进行分析,我们将本系统划分为以下几各主要的模块,如图4-1所示。

图4-1 系统结构图

4.2数据库设计

4.2.1 数据库E-R图设计

学习编程,我们都知道数据库设计是基于需要设计的系统功能,我们需要建立一个数据库关系模型,用于存储数据信息,这样当我们在程序中时,就没有必要为程序页面添加数据,从而提高系统的效率。数据库存储了很多信息,可以说是信息管理系统的核心和基础,数据库还提供了添加、删除、修改和检查,使系统能够快速找到自己想要的信息,而不是在程序代码中找到。数据库中信息表的每个部分根据一定的关系精确地组合,排列和组合成数据表。

通过网上书城系统的功能进行规划分成几个实体信息,实体信息将通过ER图进行说明,本系统的主要实体图如下:

(1)管理员数据E-R图,如图4-2所示:

图4-2 管理员信息实体属性图

(2)用户信息数据E-R图如图4-3所示:

图4-3 用户信息实体属性图

(3)图书信息数据E-R图如图4-4所示:

图4-4 图书信息实体属性图

(4)订单信息数据E-R图如图4-5所示:

图4-5 订单信息实体图

(6)订单评价信息数据E-R图如图4-6所示:

图4-6 订单评价信息实体图

4.2.2 数据库表设计

将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。

表4.1 address信息表

Field Type Comment
id bigint(20) 主键
addtime timestamp 创建时间
userid bigint(20) 用户id
address varchar(200) 地址
name varchar(200) 收货人
phone varchar(200) 电话
isdefault varchar(200) 是否默认地址[是/否]

表4.2 cart信息表

Field Type Comment
id bigint(20) 主键
addtime timestamp 创建时间
tablename varchar(200) 商品表名
userid bigint(20) 用户id
goodid bigint(20) 商品id
goodname varchar(200) 商品名称
picture varchar(200) 图片
buynumber int(11) 购买数量
price float 单价
discountprice float 会员价

表4.3 dingdanpingjia信息表

Field Type Comment
id bigint(20) 主键
addtime timestamp 创建时间
dingdanbianhao varchar(200) 订单编号
pingjiabiaoti varchar(200) 评价标题
dingdanpingfen varchar(200) 订单评分
pingjianeirong longtext 评价内容
tianjiatupian varchar(200) 添加图片
pingjiariqi date 评价日期
yonghuming varchar(200) 用户名
lianxidianhua varchar(200) 联系电话
sfsh varchar(200) 是否审核
shhf longtext 审核回复

表4.4 discusstushuxinxi信息表

Field Type Comment
id bigint(20) 主键
refid bigint(20) 关联表id
userid varchar(200) 用户id'

表4.5 erjifenlei信息表

Field Type Comment
id bigint(20) 主键
addtime timestamp 创建时间
erjifenlei varchar(200) 订单编号

表4.6 shangpinchuku信息表

Field Type Comment
id bigint(20) 主键
addtime timestamp 创建时间
shangpinmingcheng varchar(200) 商品名称
fenlei varchar(200) 分类
pinpai varchar(200) 品牌
guige varchar(200) 规格
shuliang int(11) 数量
beizhu varchar(200) 备注
chukuriqi date 出库日期

表4.7 news信息表

Field Type Comment
id bigint(20) 主键
addtime timestamp 创建时间
title varchar(200) 标题
introduction longtext 简介
picture varchar(200) '图片
content longtext '图片

表4.8 yonghu信息表

Field Type Comment
id bigint(20) 主键
addtime timestamp 创建时间
zhanghao varchar(200) 账号
mima varchar(200) 密码
xingming varchar(200) 姓名'
xingbie varchar(200) 性别
shouji varchar(200) 手机
youxiang varchar(200) 邮箱
zhaopian varchar(200) 照片',
dizhi varchar(200) 地址
money float 余额'

表4.9 users信息表

Field Type Comment
id bigint(20) 主键
username varchar(100) 用户名
password varchar(100) 密码
role varchar(100) '角色
addtime timestamp 新增时间'

5 系统的实现

5.1前台功能模块

用户进入网上书城系统平台可以查看首页、图书信息、通知公告、个人中心、后台管理、购物车、在线客服等操作,系统前台主界面如图5-1所示。

图5-1 系统前台主界面

用户通过登录界面,进行在线填写用户名和密码,信息输入完成后选择提交,用户登录完成,如果用户没有自己的账号,需要在线注册成为网站会员,用户进入到注册界面,进行填写用户的基本信息内容,信息编辑完成后选择提交,如图5-2所示。

图5-2 用户注册界面

用户通过图书列表可以查看网站已有的图书类别,用户根据需求可以进行在线选择分类进行查看图书,通过图书列表查看界面展示的图书信息,如图5-3所示,用户根据自己的需求可以点击商品图片进入到图书详情界面,通过详情界面获取到图书名称、商品价格、图书编号、一级分类、二级分类、作者、出版社、出版时间、点击次数等信息,根据需求在线加入购物车操作,也可结合需求进行在线购买、点我收藏等操作,如图5-4所示。

图5-3 图列表界面

图5-4 图书详情界面

用户通过购物车界面,可以在线查看自己加入购物车的商品信息,核对购买商品、价格、数量、总价等信息,用户也可在线增减商品数量,确认信息无误后进行提交购买操作,如图5-5所示,用户提交订单,核对收货人的地址,再次确认所要购买的商品信息及订单金额,并根据需求可以在线进行支付操作,如图5-6所示。

图5-5 购物车界面

图5-6 订单界面

用户通过自己的用户中心,通过个人中心、我的订单、我的地址、我的收藏等功能模块,进行相对应操作,通过个人中心可以进行在线更新个人信息资料操作,如图5-7所示。我的订单:通过列表可以获取订单编号、商品、价格、数量、总价、地址等信息内容,进行查看或退款操作,如图5-8所示。

图5-7个人中心界面

图5-8我的订单界面

订单评价管理,用户根据自己的订单信息,可以进行订单评价操作,通过编辑订单编号、评价名称、图书评价、图书质量、综合评分、评语、账号、姓名等,信息编辑完成后进行提交,等待管理员审核完成后,通过前台的商品详情界面可以在线查看评论的内容,如图5-9所示。

图5-9用户订单评价界面

5.2后台功能模块

管理员通过登录窗口进行输入自己的账号信息进行在线登录,登录完成后可以对系统所有的个人中心、用户管理、图书信息管理、一级分类管理、二级分类管理、订单评价管理、图书统计管理、系统管理、订单管理等功能模块进行在线编辑或者删除等操作。

用户管理,管理员根据需求可以在线查看系统已有的用户信息,用户名、密码、姓名、头像、性别、联系电话、邮箱、照片、地址等信息,并结合需求可以对已有的用户信息进行在线查看或者删除等操作,如图5-10所示。

图5-10用户管理界面

图书信息管理,对于管理员可以查看系统所有的图书信息并对已有的图书信息进行编辑或者删除等操作,也可对已有的图书信息详情、修改或查看评论、删除操作,如图5-11所示,管理员根据需求可以在线添加新的商品信息,管理员进入到商品添加界面,编辑图书编号、图书名称、一级分类、二级分类、图片、作者、出版时间、简介等信息,信息编辑完成后核对信息无误后进行提交,新的图书信息添加完成,方便用户通过前台进行商品信息的查看等,如图5-12所示。

图5-11 商品管理界面

图5-12 添加商品信息界面

订单评价管理,订单评价数据信息都是由用户所购买的图书订单完成后所提交的订单评价,管理员根据用户提交的评价编号、图书名称、图书评价、图书质量、综合质量、综合评分、评语、账号、姓名等信息,管理员可以对已有的评价信息进行在线删除等操作,如图5-13所示。

图5-13 订单评价管理界面

36

6 系统测试

系统测

StoreupController.java
package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.StoreupEntity;
import com.entity.view.StoreupView;

import com.service.StoreupService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 收藏表
 * 后端接口
 * @author 
 * @email 
 * @date 2021-03-23 23:49:23
 */
@RestController
@RequestMapping("/storeup")
public class StoreupController {
    @Autowired
    private StoreupService storeupService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,StoreupEntity storeup, 
		HttpServletRequest request){
    	if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		storeup.setUserid((Long)request.getSession().getAttribute("userId"));
    	}

        EntityWrapper<StoreupEntity> ew = new EntityWrapper<StoreupEntity>();
		PageUtils page = storeupService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, storeup), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,StoreupEntity storeup, HttpServletRequest request){
    	if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		storeup.setUserid((Long)request.getSession().getAttribute("userId"));
    	}

        EntityWrapper<StoreupEntity> ew = new EntityWrapper<StoreupEntity>();
		PageUtils page = storeupService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, storeup), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( StoreupEntity storeup){
       	EntityWrapper<StoreupEntity> ew = new EntityWrapper<StoreupEntity>();
      	ew.allEq(MPUtil.allEQMapPre( storeup, "storeup")); 
        return R.ok().put("data", storeupService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(StoreupEntity storeup){
        EntityWrapper< StoreupEntity> ew = new EntityWrapper< StoreupEntity>();
 		ew.allEq(MPUtil.allEQMapPre( storeup, "storeup")); 
		StoreupView storeupView =  storeupService.selectView(ew);
		return R.ok("查询收藏表成功").put("data", storeupView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        StoreupEntity storeup = storeupService.selectById(id);
        return R.ok().put("data", storeup);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        StoreupEntity storeup = storeupService.selectById(id);
        return R.ok().put("data", storeup);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody StoreupEntity storeup, HttpServletRequest request){
    	storeup.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(storeup);
    	storeup.setUserid((Long)request.getSession().getAttribute("userId"));

        storeupService.insert(storeup);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody StoreupEntity storeup, HttpServletRequest request){
    	storeup.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(storeup);
    	storeup.setUserid((Long)request.getSession().getAttribute("userId"));

        storeupService.insert(storeup);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody StoreupEntity storeup, HttpServletRequest request){
        //ValidatorUtils.validateEntity(storeup);
        storeupService.updateById(storeup);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        storeupService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<StoreupEntity> wrapper = new EntityWrapper<StoreupEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}
		if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		wrapper.eq("userid", (Long)request.getSession().getAttribute("userId"));
    	}


		int count = storeupService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}
CartController.java
package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.CartEntity;
import com.entity.view.CartView;

import com.service.CartService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 购物车表
 * 后端接口
 * @author 
 * @email 
 * @date 2021-03-23 23:49:23
 */
@RestController
@RequestMapping("/cart")
public class CartController {
    @Autowired
    private CartService cartService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,CartEntity cart, 
		HttpServletRequest request){
    	if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		cart.setUserid((Long)request.getSession().getAttribute("userId"));
    	}

        EntityWrapper<CartEntity> ew = new EntityWrapper<CartEntity>();
		PageUtils page = cartService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, cart), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,CartEntity cart, HttpServletRequest request){
        EntityWrapper<CartEntity> ew = new EntityWrapper<CartEntity>();
		PageUtils page = cartService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, cart), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( CartEntity cart){
       	EntityWrapper<CartEntity> ew = new EntityWrapper<CartEntity>();
      	ew.allEq(MPUtil.allEQMapPre( cart, "cart")); 
        return R.ok().put("data", cartService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(CartEntity cart){
        EntityWrapper< CartEntity> ew = new EntityWrapper< CartEntity>();
 		ew.allEq(MPUtil.allEQMapPre( cart, "cart")); 
		CartView cartView =  cartService.selectView(ew);
		return R.ok("查询购物车表成功").put("data", cartView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        CartEntity cart = cartService.selectById(id);
        return R.ok().put("data", cart);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        CartEntity cart = cartService.selectById(id);
        return R.ok().put("data", cart);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody CartEntity cart, HttpServletRequest request){
    	cart.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(cart);
    	cart.setUserid((Long)request.getSession().getAttribute("userId"));

        cartService.insert(cart);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody CartEntity cart, HttpServletRequest request){
    	cart.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(cart);

        cartService.insert(cart);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody CartEntity cart, HttpServletRequest request){
        //ValidatorUtils.validateEntity(cart);
        cartService.updateById(cart);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        cartService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<CartEntity> wrapper = new EntityWrapper<CartEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}
		if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		wrapper.eq("userid", (Long)request.getSession().getAttribute("userId"));
    	}


		int count = cartService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}
CommonServiceImpl.java
package com.service.impl;


import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.dao.CommonDao;
import com.service.CommonService;


/**
 * 系统用户
 */
@Service("commonService")
public class CommonServiceImpl implements CommonService {
	
	@Autowired
	private CommonDao commonDao;

	@Override
	public List<String> getOption(Map<String, Object> params) {
		return commonDao.getOption(params);
	}
	
	@Override
	public Map<String, Object> getFollowByOption(Map<String, Object> params) {
		return commonDao.getFollowByOption(params);
	}
	
	@Override
	public void sh(Map<String, Object> params) {
		commonDao.sh(params); 
	}

	@Override
	public int remindCount(Map<String, Object> params) {
		return commonDao.remindCount(params);
	}

	@Override
	public Map<String, Object> selectCal(Map<String, Object> params) {
		return commonDao.selectCal(params);
	}
	
	@Override
	public List<Map<String, Object>> selectGroup(Map<String, Object> params) {
		return commonDao.selectGroup(params);
	}
	
	@Override
	public List<Map<String, Object>> selectValue(Map<String, Object> params) {
		return commonDao.selectValue(params);
	}

}

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

相关推荐
ChinaRainbowSea2 分钟前
十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能
java·spring boot·后端·spring·web
吴半杯13 分钟前
Mysql调优之性能监控(一)
java·linux·mysql
.生产的驴30 分钟前
Docker 消息队列RabbitMQ 安装延迟消息插件
运维·spring boot·后端·docker·容器·rabbitmq·java-rabbitmq
慢慢雨夜1 小时前
uniapp 苹果安全域适配
java·前端·uni-app
mit6.8241 小时前
[Linux#49][UDP] 2w字详解 | socketaddr | 常用API | 实操:实现简易Udp传输
linux·网络·c++·笔记·后端
敲代码不忘补水1 小时前
二十种编程语言庆祝中秋节
java·javascript·python·golang·html
码农研究僧1 小时前
Java或者前端 实现中文排序(调API的Demo)
java·前端·localecompare·中文排序·collator
Chase-Hart1 小时前
【每日一题】LeetCode 7.整数反转(数学)
java·数据结构·算法·leetcode·eclipse
四角小裤儿儿1 小时前
Java数据结构(十一)——归并排序、计数排序
java·数据结构·排序算法
guangzhi06331 小时前
JVM本地方法栈
java·jvm·面试