第一章:描述了程序的开拓背景,程序利用于现实生活的目的与意义,以及程序文档的构造安排信息;
第二章:描述了程序的开拓环境,包括程序开拓涉及到的技能,程序开拓利用的数据存储工具等信息;
第三章:描述了程序动手进行开拓时,会面临的可行性问题,并对程序功能以及性能哀求进行描述;
第四章:描述了程序大功能模块下的功能细分信息,以及存储程序数据的数据库表文件构造的设计信息等;
第五章:描述了程序的功能实现界面的内容,也对程序操作职员操作的部分功能进行了描述;
第六章:描述了程序功能的测试内容,并先容了系统测试的观点与方法。 # 2 干系技能 ## 2.1 JSP技能先容 Java Server Pages这三个英文词汇的首字母的组合便是JSP。以是JSP是一个简写的名字,代表动态网页开拓技能。JSP与Java的关系可以利用公式表示,即:JSP= HTML+Java,HTML便是编写静态内容的标记措辞。JSP则是可以编写网页动态内容的技能,与同属于SUN公司的动态网页技能之一Servlet技能比较,JSP在输出动态内容上面比较随意马虎,但是Servlet技能更适宜编写Java逻辑代码,常日在动态网页的开拓上,利用Servlet技能须要承担巨大的事情量,每每这个时候,JSP就已经可以算作是Servlet事情的替代品,换句话说便是,在对HTML进行输出时,就靠JSP进行输出。利用JSP技能开拓完成的WEB程序,是从属于Java程序的。因此JSP也具备了Java具有的跨平台特性。JSP的运行事理为了能够方便理解,现以图片的办法进行描述。
22f9
图2.1 JSP运行事理图 ## 2.2 B/S构造先容在早期,一些利用HTML措辞编写的文件,再凑集一些其它资源文件就可以组成一个最大略的Web程序,理解了Web程序也须要理解Web站点,它们之间的关系便是一个或者多个Web程序可以放在Internet上的一个Web站点(Web做事器)中进行利用。可以说Web运用程序的开拓也带动了B/S这种网络构造模式的兴起。B是Brower(浏览器)的首字母,S是Server(做事器)的首字母,两个首字母进行组合就成了网络构造模式的简称B/S。由于这种构造模式通过安装在客户真个浏览器进行做事器的访问,可以把程序的核心功能安排在做事器中进行处理,给程序的开拓,后期利用和掩护省去了许多事情。图2.2展示的便是利用这种架构开拓的程序的事情事理。
图2.2 B/S架构的事情事理图 ## 2.3 MySQL数据库先容 开拓的程序面向用户的只是程序的功能界面,让用户操作程序界面的各个功能,那么很多人就会问,用户利用程序功能天生的数据信息放在哪里的?这个就须要涉及到数据库的知识了,一样平常来说,程序开拓常日就会对常用数据存储工具的特点进行剖析比对,比如MySQL数据库的特点与上风,Access数据库的特点与上风,Sqlserver数据库的特点与上风等,终极看哪个数据库与须要开拓的程序比较匹配,也符合程序功能运行须要的数据存储哀求,比如,须要开拓商业级别的程序,存储的数据对数据库哀求较高,可以选用Oracle,如果只是比较大略的程序,对数据存储没有过多哀求,可以选用微软旗下的Access,当开拓程序哀求数据库占用空间小,并能知足程序数据存储哀求时,就可以考虑Oracle公司从瑞典MySQL AB公司在很早之前就收购过一个关系型数据库,它是现在的MySQL数据库。在数据库工具里面它是最受认可的个中一个运用软件。须要解释的信息便是,本程序的开拓就利用到了此数据库。它将程序数据通过利用不同的数据表格进行保存,在增加了程序数据的存储速率的时候,也提高了数据库的灵巧性。 图2.3展示的便是MySQL的架构图。
图2.3 MySQL数据库架构图 ## 2.4 SSM框架先容 SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。 常作为数据源较大略的web项目的框架。 Spring就像是全体项目中装置bean的大工厂,在配置文件中可以指定利用特定的参数去调用实体类的布局方法来实例化工具。 也可以称之为项目中的粘合剂。
3 系统剖析当用户确定开拓一款程序时,是须要遵照下面的顺序进行事情,概括为:系统剖析–>系统设计–>系统开拓–>系统测试,无论这个过程是否有变更或者迭代,都是按照这样的顺序开展事情的。系统剖析便是剖析系统须要做什么的问题,紧张目的便是确定系统的功能,这也为接下来的事情做了一个好的开端。 ## 3.1 系统可行性剖析 开拓一款程序软件不仅须要韶光,也须要人力,物力资源。而进行可行性剖析这个环节便是办理用户这方面的疑问,看见地式在当前的条件下是否可以进行开拓。 ### 3.1.1 技能可行性剖析 此程序选用的开拓措辞是Java,这种编程措辞有着丰富的数据类型,在指令掌握语句上也比较完善,更主要的便是对类与工具的大力支持,这些优点为程序开拓者供应了技能保障,尤其是现在代码都逐渐模块化,有关系统功能开拓的源码在网络上都公开展示了,以是让具备一定打算机开拓根本的开拓职员独立开拓系统在技能上也逐渐随意马虎。 ### 3.1.2 经济可行性剖析 开拓此程序最关键的设备便是一台电脑,无论是学校打算机室配备的电脑,还是自己入学以来购置的条记本,都是可以符合开拓哀求的设备,其余在网络上,学校本已完备覆盖了校园网,以是在设备以及网络上无须考虑经济问题。 ### 3.1.3 运行可行性剖析 随着电脑软件以及配套硬件的完善升级,当下的打算机环境是一片大好,尤其是打算机已经广泛遍及到家家户户,以是打算机设备现在是随处可见,由于本次开拓的程序霸占的资源耗费较小,在一样平常的电脑或条记本上都能轻松运转起来。
通过上面的可行性描述,可以从经济,技能,运行方面办理程序开拓是否可行的问题。因此可以认为该程序软件是可以进行开拓的。 ## 3.2 系统性能剖析 系统性能剖析也是比较主要的内容,进行系统性能剖析便是为了确保系统的功能要能够在生活中运行利用时,达到规定的指标,因此一个完全的系统软件,是须要进行系统的性能剖析这个步骤的。本次进行性能剖析紧张从易用性指标,可扩展性指标,系统健壮性指标,系统安全性指标这几个方面进行剖析。 ### 3.2.1 易用性指标 本次程序软件的开拓的目的便是让利用者可以通过利用该软件提高信息数据的管理效率,同时该程序软件也须要针对不同的操浸染户设置对应的功能,因此,此程序的操作流程该当只管即便与用户日常操作软件的行为习气相贴合,其余,程序软件的设计与开拓也应考虑非打算机专业用户的打算机操作水平,要让大部分利用者都可以轻松操作程序供应的各个功能。 ### 3.2.2 可扩展性指标 当前须要开拓的程序软件是根据当下的用户需求进行设计开拓的,但是随着韶光的推移,社会大环境的改变,开拓出的程序也是须要与时俱进的,须要根据用户不断变换的需求进行相应的功能内容的扩展,须要把稳的便是,当对成型的程序进行功能模块新增时,仍旧须要担保程序原有架构以及功能不能受到影响,新增的功能模块在系统中也能够运行正常,该指标达标也就可以担保此程序是可以在知足信息管理哀求下,从容应对市场环境的变革。 ### 3.2.3 健壮性指标 程序软件的开拓便是为了投入利用时,可以一贯稳定的处理各种数据信息,程序软件一旦不稳定,也会给利用者带来滋扰。因此从性能剖析的角度,就要哀求程序软件在应对利用者的误操作,或者是利用者由于各种缘故原由,填写有误的数据等情形时,程序要一贯保持稳定,并能够正常让利用者进行利用。当程序的某个功能模块涌现非常时,程序的其它功能模块也要能够确保正常利用。程序的健壮性指标达标可以让利用者产生良好的用户体验。 ### 3.2.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.3.4 信息删除流程剖析 当从程序里面删除某种无效数据时,遵照程序的信息删除流程(如图3.4所示),先要选中操作者须要删除的数据,程序为了预防操作者误删信息,也会进行提示,当操作者真精确定要删选中的信息时,该信息就会从数据库中被永久删除。
图3.4 信息删除流程图
4 系统设计运动东西购物商城的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开拓层面是否高效,以及在系统掩护层面是否随意马虎掩护和升级,由于在系统实现阶段是须要考虑用户的所有需求,假如在设计阶段没有经由全方位考虑,那么系统实现的部分也就无从下手,以是系统设计部分也是至关主要的一个环节,只有根据用户需求进行细致全面的考虑,才有希望开拓出功能健全稳定的程序软件。 ## 4.1 系统概要设计 本次拟开拓的系统为了节约开拓本钱,也为了后期在掩护和升级上的便利性,打算通过浏览器来实现系统功能界面的展示,让程序软件的紧张事务集中在后台的做事器端处理,前端部分只用途理少量的事务逻辑。下面利用一张图(如图4.1所示)来解释程序的事情事理。
图4.1 程序事情的事理图 ## 4.2 系统功能构造设计 在剖析并得出利用者对程序的功能哀求时,就可以进行程序设计了。如图4.2展示的便是管理员功能构造图。
图4.2 管理员功能构造图 ## 4.3 数据库设计 程序功能操作不管是添加,修正,还是删除等功能产生的数据都是经由数据库进行数据保存和更新的,以是一个数据库设计的好坏也是程序是否好坏的剖断标准,由于程序的成功,有一半的功劳都是靠数据库的精良设计。数据库一旦设计得良好是可以减轻开拓职员的开拓包袱的。 ### 4.3.1 数据库E-R图设计 这个部分的设计须要利用到E-R图绘制工具,常用的工具便是Visio工具来绘制E-R模型图,这款工具不仅可以快速创建须要的E-R模型图,而且该工具供应的操作界面很大略,可以短韶光内修正绘图界面的图形或者是笔墨的属性。在绘制E-R模型图时,要分清楚各个图形代表的含义,以免绘制出错,E-R模型图由长方形(实体),椭圆形(属性),菱形(关系)这三部分图形符号组成,绘制期间要区分开来,用准确的图形符号代表相应的数据元素。
(1)管理员实体属性图见图4.4。
图4.4 管理员实体属性图
(2)商城公告实体属性图见图4.5。
图4.5 商城公告实体属性图
(3)会员实体属性图见图4.6。
图4.6 会员实体属性图 ### 4.3.2 数据库表构造设计 数据库系统一旦选定之后,须要根据程序哀求在数据库中建立数据库文件,并在已经完成创建的数据库文件里面,为程序运行中产生的数据建立对应的数据表格,数据表构造设计便是对创建的数据表格进行字段设计,字段长度设计,字段类型设计等,当数据表格合理设计完成之后,才能正常存储干系程序运行产生的数据信息。
1商城公告表
序号
列名
数据类型
解释
许可空
1
Id
Int
id
否
2
addtime
Date
创建韶光
是
3
title
String
标题
是
4
introduction
String
简介
是
5
picture
String
图片
是
6
content
String
内容
是
2地址表
序号
列名
数据类型
解释
许可空
1
Id
Int
id
否
2
addtime
Date
创建韶光
是
3
userid
Integer
用户id
是
4
address
String
地址
是
5
name
String
收货人
是
6
phone
String
电话
是
7
isdefault
String
是否默认地址[是/否]
是
3商品信息评论表
序号
列名
数据类型
解释
许可空
1
Id
Int
id
否
2
addtime
Date
创建韶光
是
3
refid
Integer
关联表id
是
4
userid
Integer
用户id
是
5
nickname
String
用户名
是
6
content
String
评论内容
是
7
reply
String
回答内容
是
4商品信息表
序号
列名
数据类型
解释
许可空
1
Id
Int
id
否
2
addtime
Date
创建韶光
是
3
shangpinbianhao
String
商品编号
是
4
shangpinmingcheng
String
商品名称
是
5
shangpinleixing
String
商品类型
是
6
tupian
String
图片
是
7
pinpai
String
品牌
是
8
baoxiuqi
String
保修期
是
9
shangjiariqi
date
上架日期
是
10
qicaijieshao
String
器材先容
是
11
clicktime
datetime
最近点击韶光
是
12
price
float
价格
是
13
onelimittimes
Integer
单限
是
14
alllimittimes
Integer
库存
是
5会员表
序号
列名
数据类型
解释
许可空
1
Id
Int
id
否
2
addtime
Date
创建韶光
是
3
huiyuanhao
String
会员号
是
4
mima
String
密码
是
5
xingming
String
姓名
是
6
xingbie
String
性别
是
7
touxiang
String
头像
是
8
youxiang
String
邮箱
是
9
shouji
String
手机
是
10
money
float
余额
是
6订单表
序号
列名
数据类型
解释
许可空
1
Id
Int
id
否
2
addtime
Date
创建韶光
是
3
orderid
String
订单编号
是
4
tablename
String
商品表名
是
5
userid
Integer
用户id
是
6
goodid
Integer
商品id
是
7
goodname
String
商品名称
是
8
picture
String
商品图片
是
9
buynumber
Integer
购买数量
是
10
price
float
价格/积分
是
11
discountprice
float
折扣价格
是
12
total
float
总价格/总积分
是
13
discounttotal
float
折扣总价格
是
14
type
Integer
支付类型
是
15
status
String
状态
是
16
address
String
地址
是
17
tel
String
电话
是
18
consignee
String
收货人
是
19
logistics
String
物流
是
7收藏表
序号
列名
数据类型
解释
许可空
1
Id
Int
id
否
2
addtime
Date
创建韶光
是
3
userid
Integer
用户id
是
4
refid
Integer
收藏id
是
5
tablename
String
表名
是
6
name
String
收藏名称
是
7
picture
String
收藏图片
是
8
type
String
类型(1:收藏,21:赞,22:踩)
是
9
inteltype
String
推举类型
是
8管理员表
序号
列名
数据类型
解释
许可空
1
Id
Int
id
否
2
username
String
用户名
是
3
password
String
密码
是
4
role
String
角色
是
5
addtime
Date
新增韶光
是
9商品类型表
序号
列名
数据类型
解释
许可空
1
Id
Int
id
否
2
addtime
Date
创建韶光
是
3
shangpinleixing
String
商品类型
是
10购物车表
序号
列名
数据类型
解释
许可空
1
Id
Int
id
否
2
addtime
Date
创建韶光
是
3
tablename
String
商品表名
是
4
userid
Integer
用户id
是
5
goodid
Integer
商品id
是
6
goodname
String
商品名称
是
7
picture
String
图片
是
8
buynumber
Integer
购买数量
是
9
price
float
单价
是
10
discountprice
float
会员价
是
5 系统实现系统实现部分便是将系统剖析,系统设计部分的内容通过编码进行功能实现,以一个实际运用系统的形式展示系统剖析与系统设计的结果。前面提到的系统剖析,系统设计最紧张还是进行功能,系统操作逻辑的设计,也包括了存储数据的数据库方面的设计等内容,系统实现便是一个终极的履行阶段,将前面的设计成果进行物理转化,终极出具可以利用于实际的软件系统。 ## 5.1 会员管理 如图5.1显示的便是会员管理页面,此页面供应给管理员的功能有:对会员信息进行查询,添加,删除以及批量删除操作。
图5.1 会员管理页面 ## 5.2 商品类型管理 如图5.2显示的便是商品类型管理页面,管理员可以对商品类型信息进行添加,修正,删除,查询操作。
图5.2 商品类型管理页面 ## 5.3 商品信息管理 如图5.3显示的便是商品信息管理页面,管理员可以对商品信息进行添加,修正,删除,查询操作。
图5.3 商品信息管理页面 ## 5.4 商城公告管理 如图5.4显示的便是商城公告管理页面,管理员可以对商城公告进行添加修正删除查询操作。
图5.4 商城公告管理页面 ## 5.5 购物车管理 如图5.4显示的便是购物车管理页面,用户注册登录后可以对商品信息加入购物车操作,可以在购物车里面对商品移除和修正数量,还可以进行下一步的购买操作。
图5.5 购物车管理页面 ## 5.6 确认下单 如图5.4显示的便是确认下单页面,用户可以在这个页面再次确认要购买的商品信息,价钱,收货地址等。
图5.6 确认下单页面 ## 5.7 我的订单 如图5.4显示的便是我的订单页面,用户可以在我的订单里面查看订单的各种状态,并且未支付订单还可以选择取消和支付。
图5.7 我的订单页面
系统ConfigController.javapackage com.controller;import java.util.Arrays;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;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.annotation.IgnoreAuth;import com.baomidou.mybatisplus.mapper.EntityWrapper;import com.entity.ConfigEntity;import com.service.ConfigService;import com.utils.MPUtil;import com.utils.PageUtils;import com.utils.R;import com.utils.ValidatorUtils;/ 登录干系 /@RequestMapping(34;config")@RestControllerpublic class ConfigController{ @Autowired private ConfigService configService; / 列表 / @RequestMapping("/page") public R page(@RequestParam Map<String, Object> params,ConfigEntity config){ EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>(); PageUtils page = configService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, config), params), params)); return R.ok().put("data", page); } / 列表 / @IgnoreAuth @RequestMapping("/list") public R list(@RequestParam Map<String, Object> params,ConfigEntity config){ EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>(); PageUtils page = configService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, config), params), params)); return R.ok().put("data", page); } / 信息 / @RequestMapping("/info/{id}") public R info(@PathVariable("id") String id){ ConfigEntity config = configService.selectById(id); return R.ok().put("data", config); } / 详情 / @IgnoreAuth @RequestMapping("/detail/{id}") public R detail(@PathVariable("id") String id){ ConfigEntity config = configService.selectById(id); return R.ok().put("data", config); } / 根据name获取信息 / @RequestMapping("/info") public R infoByName(@RequestParam String name){ ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile")); return R.ok().put("data", config); } / 保存 / @PostMapping("/save") public R save(@RequestBody ConfigEntity config){// ValidatorUtils.validateEntity(config); configService.insert(config); return R.ok(); } / 修正 / @RequestMapping("/update") public R update(@RequestBody ConfigEntity config){// ValidatorUtils.validateEntity(config); configService.updateById(config);//全部更新 return R.ok(); } / 删除 / @RequestMapping("/delete") public R delete(@RequestBody Long[] ids){ configService.deleteBatchIds(Arrays.asList(ids)); return R.ok(); }}
OrdersController.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.OrdersEntity;import com.entity.view.OrdersView;import com.service.OrdersService;import com.service.TokenService;import com.utils.PageUtils;import com.utils.R;import com.utils.MD5Util;import com.utils.MPUtil;import com.utils.CommonUtil;import java.io.IOException;/ 订单 后端接口 @author @email @date 2022-03-20 11:39:51 /@RestController@RequestMapping("/orders")public class OrdersController { @Autowired private OrdersService ordersService; / 后端列表 / @RequestMapping("/page") public R page(@RequestParam Map<String, Object> params,OrdersEntity orders, HttpServletRequest request){ if(!request.getSession().getAttribute("role").toString().equals("管理员")) { orders.setUserid((Long)request.getSession().getAttribute("userId")); } EntityWrapper<OrdersEntity> ew = new EntityWrapper<OrdersEntity>(); PageUtils page = ordersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, orders), params), params)); request.setAttribute("data", page); return R.ok().put("data", page); } / 前端列表 / @IgnoreAuth @RequestMapping("/list") public R list(@RequestParam Map<String, Object> params,OrdersEntity orders, HttpServletRequest request){ EntityWrapper<OrdersEntity> ew = new EntityWrapper<OrdersEntity>(); PageUtils page = ordersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, orders), params), params)); request.setAttribute("data", page); return R.ok().put("data", page); } / 列表 / @RequestMapping("/lists") public R list( OrdersEntity orders){ EntityWrapper<OrdersEntity> ew = new EntityWrapper<OrdersEntity>(); ew.allEq(MPUtil.allEQMapPre( orders, "orders")); return R.ok().put("data", ordersService.selectListView(ew)); } / 查询 / @RequestMapping("/query") public R query(OrdersEntity orders){ EntityWrapper< OrdersEntity> ew = new EntityWrapper< OrdersEntity>(); ew.allEq(MPUtil.allEQMapPre( orders, "orders")); OrdersView ordersView = ordersService.selectView(ew); return R.ok("查询订单成功").put("data", ordersView); } / 后端详情 / @RequestMapping("/info/{id}") public R info(@PathVariable("id") Long id){ OrdersEntity orders = ordersService.selectById(id); return R.ok().put("data", orders); } / 前端详情 / @IgnoreAuth @RequestMapping("/detail/{id}") public R detail(@PathVariable("id") Long id){ OrdersEntity orders = ordersService.selectById(id); return R.ok().put("data", orders); } / 后端保存 / @RequestMapping("/save") public R save(@RequestBody OrdersEntity orders, HttpServletRequest request){ orders.setId(new Date().getTime()+new Double(Math.floor(Math.random()1000)).longValue()); //ValidatorUtils.validateEntity(orders); orders.setUserid((Long)request.getSession().getAttribute("userId")); ordersService.insert(orders); return R.ok(); } / 前端保存 / @RequestMapping("/add") public R add(@RequestBody OrdersEntity orders, HttpServletRequest request){ orders.setId(new Date().getTime()+new Double(Math.floor(Math.random()1000)).longValue()); //ValidatorUtils.validateEntity(orders); ordersService.insert(orders); return R.ok(); } / 修正 / @RequestMapping("/update") public R update(@RequestBody OrdersEntity orders, HttpServletRequest request){ //ValidatorUtils.validateEntity(orders); ordersService.updateById(orders);//全部更新 return R.ok(); } / 删除 / @RequestMapping("/delete") public R delete(@RequestBody Long[] ids){ ordersService.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<OrdersEntity> wrapper = new EntityWrapper<OrdersEntity>(); 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 = ordersService.selectCount(wrapper); return R.ok().put("count", count); } / (按值统计) / @RequestMapping("/value/{xColumnName}/{yColumnName}") public R value(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName,HttpServletRequest request) { Map<String, Object> params = new HashMap<String, Object>(); params.put("xColumn", xColumnName); params.put("yColumn", yColumnName); EntityWrapper<OrdersEntity> ew = new EntityWrapper<OrdersEntity>(); ew.in("status", new String[]{"已支付","已发货","已完成"}); List<Map<String, Object>> result = ordersService.selectValue(params, ew); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for(Map<String, Object> m : result) { for(String k : m.keySet()) { if(m.get(k) instanceof Date) { m.put(k, sdf.format((Date)m.get(k))); } } } return R.ok().put("data", result); } / (按值统计)韶光统计类型 / @RequestMapping("/value/{xColumnName}/{yColumnName}/{timeStatType}") public R valueDay(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,HttpServletRequest request) { Map<String, Object> params = new HashMap<String, Object>(); params.put("xColumn", xColumnName); params.put("yColumn", yColumnName); params.put("timeStatType", timeStatType); EntityWrapper<OrdersEntity> ew = new EntityWrapper<OrdersEntity>(); ew.in("status", new String[]{"已支付","已发货","已完成"}); List<Map<String, Object>> result = ordersService.selectTimeStatValue(params, ew); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for(Map<String, Object> m : result) { for(String k : m.keySet()) { if(m.get(k) instanceof Date) { m.put(k, sdf.format((Date)m.get(k))); } } } return R.ok().put("data", result); } / 分组统计 / @RequestMapping("/group/{columnName}") public R group(@PathVariable("columnName") String columnName,HttpServletRequest request) { Map<String, Object> params = new HashMap<String, Object>(); params.put("column", columnName); EntityWrapper<OrdersEntity> ew = new EntityWrapper<OrdersEntity>(); ew.in("status", new String[]{"已支付","已发货","已完成"}); List<Map<String, Object>> result = ordersService.selectGroup(params, ew); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for(Map<String, Object> m : result) { for(String k : m.keySet()) { if(m.get(k) instanceof Date) { m.put(k, sdf.format((Date)m.get(k))); } } } return R.ok().put("data", result); }}
ShangpinxinxiServiceImpl.java
package com.service.impl;import org.springframework.stereotype.Service;import java.util.Map;import java.util.List;import com.baomidou.mybatisplus.mapper.Wrapper;import com.baomidou.mybatisplus.mapper.EntityWrapper;import com.baomidou.mybatisplus.plugins.Page;import com.baomidou.mybatisplus.service.impl.ServiceImpl;import com.utils.PageUtils;import com.utils.Query;import com.dao.ShangpinxinxiDao;import com.entity.ShangpinxinxiEntity;import com.service.ShangpinxinxiService;import com.entity.vo.ShangpinxinxiVO;import com.entity.view.ShangpinxinxiView;@Service("shangpinxinxiService")public class ShangpinxinxiServiceImpl extends ServiceImpl<ShangpinxinxiDao, ShangpinxinxiEntity> implements ShangpinxinxiService { @Override public PageUtils queryPage(Map<String, Object> params) { Page<ShangpinxinxiEntity> page = this.selectPage( new Query<ShangpinxinxiEntity>(params).getPage(), new EntityWrapper<ShangpinxinxiEntity>() ); return new PageUtils(page); } @Override public PageUtils queryPage(Map<String, Object> params, Wrapper<ShangpinxinxiEntity> wrapper) { Page<ShangpinxinxiView> page =new Query<ShangpinxinxiView>(params).getPage(); page.setRecords(baseMapper.selectListView(page,wrapper)); PageUtils pageUtil = new PageUtils(page); return pageUtil; } @Override public List<ShangpinxinxiVO> selectListVO(Wrapper<ShangpinxinxiEntity> wrapper) { return baseMapper.selectListVO(wrapper); } @Override public ShangpinxinxiVO selectVO(Wrapper<ShangpinxinxiEntity> wrapper) { return baseMapper.selectVO(wrapper); } @Override public List<ShangpinxinxiView> selectListView(Wrapper<ShangpinxinxiEntity> wrapper) { return baseMapper.selectListView(wrapper); } @Override public ShangpinxinxiView selectView(Wrapper<ShangpinxinxiEntity> wrapper) { return baseMapper.selectView(wrapper); }}
声明
本博客适用于广泛的学术和教诲用场,包括但不限于个人学习、开拓设计,产品设计。仅供学习参考,旨在为读者供应深入理解和学术研究的材料。
java系统设计,毕设辅导