如何使用ssm实现神马物流+vue

235 篇文章 0 订阅
134 篇文章 0 订阅

@TOC

ssm163神马物流+vue

绪论

1.1 研究背景

当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。

据调查,传统的神马物流管理面对大量货物信息、订单信息、物流追踪信息、物流线路分配信息、配送员信息以及车辆交通信息等,信息的及时更新等弊端凸显,传统的神马物流管理过度的依靠人力资源的登记,对于庞大的信息量,显然只依靠人力,很难准确的处理好大量的数据,传统的管理模式不仅效率低,出错率高,对于神马物流管理带来了诸多不便,因此,传统的神马物流管理模式已经远远无法满足神马物流发展需求,我们急需对神马物流管理体系进行变革,开发基于计算机平台的神马物流管理系统。现代化的利用计算机来进行神马物流管理很大程序上可以提高效率,人力方面也大大的节省,界面简单易操作,只要会计算机就可以快速的进行神马物流相关信息的管理。对经济方面也是很大的节省,其优点是显而易见的。

1.2 设计原则

在开始开发项目之前,必须要先考虑项目的实用性、科学性,以及该项目是否能够真正让用户受益并尽可能的发挥项目的作用。因此,在开发前,通过以下几条原则对项目进行判断:

(1)可行性原则。项目需要保证经济可行性和技术可行性,这包括了项目在浏览端、服务端等方面上的经济和技术上是可以达成的。

(2)适应性原则。项目要保证可维护性和可扩展性,这是每个非短期项目都需要考虑的,并且不论是维护还是扩展,都必须要建立在适应用户的正常需求的基础上。

(3)安全性及保密性原则。要充分保证用户信息的安全性和保密性,不能因为开发上的疏忽,导致用户的信息泄露。

(4)系统工程原则。为了确保项目的整体性,在项目调查、项目分析、项目设计、项目开发的过程中,都需遵从项目工程的方法和步骤逐步进行。

(5)统一规划、分期实施、逐步完善原则。项目开发的过程中,要按照规划、分期实施,特别是要注意在项目开发过程中要有条理,从点到面,一步步完善,不要贪图进度,要循环渐进的对项目进行开发。

1.3 论文结构安排

第一部分绪论:文章主要从课题背景、设计原则综合阐述了开发此系统的必要性。

第二部分相关技术:系统开发用到的各种技术都大致做出了简介

第三部分系统分析:从可行性分析和功能需求分析等角度综合研究了此次开发的系统

第四部分系统设计:功能模块设计和数据库设计这两部分内容都有专门的表格和图片表示

第五部分系统实现:进行系统主要功能模块的界面展示

第六部分系统测试:检验程序是否达到预期目标

第七部分总结:进行最后的总结工作

1

2 关键技术简介

2.1 JAVA技术

Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任何地方都可以运行。除此之外,它还拥有简单的语法和实用的类库,让编程人员可以尽可能将精力集中在问题的求解上,并且许多开源项目和科研成果都是采用它实现的。

在1995年这一年的5月份,著名的Sun Microsystems公司在程序开发设计上面郑重推出一种面向对象开发的程序设计语言——Java,最开始的时候Java是由詹姆斯.高斯林这位伟大的JAVA之父来进行主导,但是在后来由于各种原因,让甲骨文公司这个针对商业程序创建了oracle大型数据库的公司收购了Java。Java的平台总共算下来有3个,分别为javaME和javaSE以及javaEE这3个java平台。下面将对其进行分别介绍。

(1)在电脑桌面程序的开发上面需要选择JavaME,这个用得也比较多。

(2)企业也会根据工作以及业务需要开发各种软件,那么就会选用JavcEE这个支持企业版软件的开发的Java平台,JavcEE主攻运用在企业领域上面的web应用,JavcEE也在javaSE的基础上获得了比如jsp技术 ,Servlet技术等程序开发技术的支持。

(3)现在生活中手机的普及化,也使得手机端这样的移动设备的软件的兴起,JavaME这个迷你版java平台就能运用于移动端的软件开发操作。

2.2 MYSQL数据库

所谓数据库,实际上就是一个容器,按照数据结构来组织、存储和管理。数据库的作用就是为大量的信息进行管理并提供高效的解决方案。

MySQL是典型的关系数据库系统,拥有开源免费、稳定、高效等特点,一直是中小型web项目的最佳数据库选择。MySQL作为当今IT领域使用人数最多的开源关系型数据库软件之一,在2018年的数据库使用率排名中位居第二,仅次于目前为止最成功的商业版数据库Orcle[5]。MySQL最大的优势之一就是无偿使用,这也是它成功的关键。

MySQL支持标准化数据库查询语言SQL。MySQL是一款非常适合个人开发者或小型组织开发团体的数据库管理系统,因为它是开源并且免费的,体积小、速度快、成本低以及其最重要的一点开放源码,深受程序设计人员的喜爱,这也让它成为了许许多多中小型开发网站数据库的首选,同时提供了多种开发的连接API。MySQL将数据的存放按照记录之间的关系存放到了不同的表中,减少了数据的冗余并且提高了开发的工作效率。MySQL支持开发中需要用的大型数据库,并能处理数以万计的记录。因为MySQL是开源的软件,所以在项目的预算中的时候不用花费额外的资金,大大降低了开发的总体成本,这也是MySQL数据库在中小型企业和独立的开发者中广泛流行的原因[1]。

2.3 B/S结构

Browse/Sever(浏览器/服务器)架构,是一种基于互联网系统的所开发的一种架构,是在C/S架构上进行完善开发的一种架构,它主要用于Web和移动端的软件开发。它的方便在于用户只需要在浏览器上连接部署上用户所需的数据库便可在浏览器浏览用户所需的数据。

从逻辑上B/S架构可以分为三层结构体系,客户机层浏览器,Web层和DB服务器层。客户机层可以将用户所需要的数据信息通过后端数据库数据模块的读取,显示到用户的客户层浏览器中。Web层主要是实现浏览器上的功能,来分析处理数据进行端口的对接。可以访问COM,ADO等对象。DB服务器层是整个B/S框架的核心,为其他技术提供数据库的支持,并对各种数据库进行更新,删除,添加,查询等功能。

B/S架构这种只需要用户在浏览器上运行不需要再下载客户端的模式,使用浏览器就可以实现和下载客户端的一样复杂的功能。给管理系统的用户带来了很大的方便,节约了大量的成本。现在B/S架构已经在Web开发上被广泛运用,它的基础内容也在不断的完善更新。

2.4 SSM框架

本神马物流管理系统基于Spring、SpringMVC、Mybatis框架进行开发设计。

Spring 框架是在2004年首次发布,之后出现了多次的重大修订。Spring框架是由七个不同的模块组成,分别是SpringCore、Spring AOP、Spring ORM、Spring DAO、Spring Web Flow、Spring Context和Spring Web MVC[16]。这些模块提供不同的平台来开发不同的企业应用程序 ,本课题使用Spring Web MVC模块开发基于MVC的应用程序。

Spring Web MVC是基于Servlet API的原始Web框架,从一开始就包含在Spring 框架中。“Spring Web MVC”是该框架的正式名称,但通常被简称为“Spring MVC” [17]。Spring MVC框架提供了模型模块-视图模块-控制器的架构和可用于直接开发的Web应用程序的现成组件。Spring MVC模式将应用程序的不同方面分开,使元素之间形成松散耦合。

MyBatis原名叫做iBatis属于持久层框架,消除了大部分JDBC代码和参数的设置以及结果集的检索。这个框架不仅支持普通SQL查询和存储过程,还支持高级的映射[18]。MyBatis使用.xml和注解来做原始映射和配置,将接口和Java对象映射成数据库记录。

2.5 Vue框架

Vue是当今前端的三大框架之一,主要技术领域运用到的是单页SPA的应用之中。这样很好的提供了用户的浏览网页的交互体验。减少了浏览器的负载。提高浏览器的高效的浏览的速度。

Vue 是一套用于构建用户界面的渐进式框架。Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。Vue可以在任意其他类型的项目中使用,使用成本较低,更加灵活,主张较弱,在Vue的项目中也可以轻松融汇其他的技术来开发,而且因为Vue的生态系统特别庞大,可以找到基本所有类型的工具在vue项目中使用。其特点:易用(使用成本低),灵活(生态系统完善,适用于任何规模的项目),高效(体积小,优化好,性能好)。

VUE的出现,加快了前后端分离的进程,提高了程序员的工作效率,也减少了工作时间。Vue.js是一套用于构建用户界面的,可以自底向上逐层应用的渐进式前端框架。它相比于其他主流的JavaScript框架例如AngularJS或React都具有运行效率高、语法简洁、自身占用空间小、上手容易等特点。它的核心只关注视图层,是一个允许采用简洁的模板语法来声明式地将数据渲染进DOM的系统,并且所有的这些都是响应式的。

3 系统分析

3.1 可行性分析

可行性分析是该平台系统进行投入开发的基础第一步,必须对其进行可行性分析才能够降低不必要的需要从而使资源合理利用,更具有性价比和降低成本,同时也是系统平台的成功的未雨绸缪的一步。

3.1.1 技术可行性

本系统可运用SSM+Vue框架,结构清晰明了,网页采用的是JSP进行开发,相比Html更适合。系统使用Java语言编写,JAVA语言有着庞大的用户以及学习群体。数据库采用MySQL。这些都是比较基础,使用较为广泛的技术,因此具有技术可行性。

3.1.2 经济可行性

每一套系统的开发,都得花费一定的时间去研究。需要使用的软件也是有很多需要花钱。本系统使用的MyEclipse、MySQL数据库及Google Chrome浏览器等软件都是网上均可以下载使用的,供程序员免费使用,无需收费。从开发角度来说,成本低,因此具有经济可行性。

3.1.3 操作可行性

本系统操作不复杂且比较容易上手,对于初次接触本系统的来说,不许要接受什么培训就可以操作本系统。用户不需要什么特定的软件,只需要安装大众所使用的浏览器即可进行系统的访问。本系统采用可视化窗口,面向大众,有效的避免了繁琐的操作。而且,本系统将各个功能都详细设计,各模块功能逻辑清晰,对用户非常友好。因此,本系统具有操作可行性。

3.1.4法律可行性

所有的功能模块都不违法法律,也不涉及法律的灰色地带,项目部署在国内的服务器中,域名在国家的工业和信息化部进行备案,接受监管。所以在开发过程中不会涉及法律责任,具有可行性;

综上所述,本次开发的神马物流管理系统在技术、经济、操作以及法律四个方面都能够保障系统的顺利开发,具有极高的开发可行性。

3.2 系统性能分析

系统除了功能结构设计以外还需要附加需求的分析,非功能需求分析,主要是包括界面、数据库问题、框架等,需要满足非功能性能的需求,保证系统运行起来的时候能够达到最佳的效果,保证稳定性和安全性。

(1)数据底层统一。数据传输中需要进行数据处理,在查询数据存储上达到最佳效果。

(2)界面风格统一。图片需要进行PS处理,文字需要统一格式大小。

(3)数据库。每个模块都需要独立,各个模块之间相互配合,形成一个整体,包装各个功能合理化的配置,需要考虑开放端口,满足可扩展性。

3.3 系统功能分析

本神马物流管理系统主要实现了管理员功能模、配送员功能模块和用户功能模块三大部分,下面将对这三大功能模块分别进行功能需求分析。

管理员功能模块:管理员登录后可对系统进行全面管理,管理员登录后主要实现的功能模块包括个人中心、用户管理、货物信息管理、货物分类管理、订单管理、物流追踪管理、物流路线分配管理、车辆交通管理、车辆交通类型管理、配送员管理以及系统管理,管理员实现了对系统信息的查看、添加、修改和删除的功能。

用户功能模块:没有账号的用户可进行注册操作,注册登录后主要功能模块包个人中心、货物信息管理以及物流追踪管理。

3.4 系统技术框架分析

本神马物流管理系统是基于B/S模式又称Brower/Server或浏览器/服务器模式。采取流行成熟的JSP+MYSQL技术,利用浏览器通过Web Server同数据库进行数据交互。本系统只要有一台能上网的电脑就能使用,即客户端零维护。而且,系统的扩展非常容易,只要能上网就可以使用了。采用技术框架图如图3-1所示。

显示逻辑

浏览器

事物处理逻辑

Web服务

数据库

事物处理逻辑

数据库服务器

响应

请求

响应

请求

图3-1系统技术框架图

3.5 系统流程分析

3.5.1开发流程

神马物流管理系统的开发也是有对应的流程,开发之前必须要进行用户功能需求的分析,最后根据功能需求进行网站设计还有数据库相关数据的设计工作,此次开发的神马物流管理系统开发流程如图3-2所示。

![D:\用户目录\Documents\Tencent Files\736505925\FileRecv\DSH}__@$MA6E_E[YBHK0JA.png](https://i-blog.csdnimg.cn/direct/977a1087f5214fb8b0b4ad13e5c906ab.png "DSH}\_\_@$MA6E\_E[YBHK0JA")

图3-2 开发流程图

3.5.2登录流程

用户要想在神马物流管理系统中进行参与操作,必须登录系统,用户登录流程图如图3-3所示。

图3-3登录流程图

3.5.3 注册流程

未有账号的用户可进行注册操作,注册流程图如图3-4所示。

图3-4 注册流程图

3.5.4添加信息流程

在添加信息时,系统首先判断信息是否合法,合法则添加成功,反之重新输入。添加信息流程图如图3-5所示。

图3-5 添加信息流程图

4 系统设计

4.1 系统结构设计

在结构设计过程中,首先对系统进行需求分析,然后进行系统初步设计,将系统功能模块细化,具体分析每一个功能模块具体应该首先哪些功能,最后将各个模块进行整合,实现系统结构的最终设计。本神马物流管理系统结构设计如图4-1所示。

图4-1 系统结构图

4.2 系统顺序图设计

4.2.1登录模块顺序图

登录模块主要满足了管理员和用户的权限登录,登录模块的顺序图如图 4-2 所示。

图4-2登录顺序图

4.2.2添加信息模块顺序图

管理员登录后可进行信息的添加操作,添加信息顺序图如图4-3所示

图4-3添加信息顺序图

4.3 系统数据库设计

数据库是动态软件技术的基础,本系统将采用MYSQL作为数据库工具。神马物流管理系统的数据库管理要进行各种各样的数据处理,提供各类信息的添加、删除、修改和更新等功能。通过上述对系统的设计分析,根据系统的需求,主要设计为数据库概念设计和逻辑结构设计。

4.3.1 数据库E-R图设计

E-R图是一种描述显示数据类型间的关系的数据描述方法,E-R图可以完整地映射出现实模型的关系。E-R图中的三个最为重要的元素就是实体、属性、关系。E-R图即由这三点组成。

实体:E-R图中数据的实体,用矩形表示上面为实体名,下面为实体属性,实体包含主外键等关系。

属性:E-R图中的属性,是指实体的属性,实体由多条属性所构成,属性拥有自己的数据类型,数据大小。属性的优劣决定了E-R图中实体的健全性、完整性。

关系:E-R图中的关系是指实体之间的关系,用菱形来表示实体间的关系,这些菱形关系的联系上有着一对多或多对多的数据联系,这些构成了E-R图的关系,E-R图的关系紧密连接了实体,使实体间的关联性更加的显著、易懂。本神马物流管理系统的E-R图如下所示:

(1)管理员信息实体E-R图如图4-4所示:

图4-4 管理员信息实体E-R图

(2)用户信息实体E-R图如图4-5所示:

图4-5 用户信息实体E-R图

(3)物流追踪信息实体E-R图如图4-6所示:

图4-6 物流追踪信息实体E-R图

(4)货物信息实体E-R图如图4-7所示:

图4-7 货物信息实体E-R图

(5)配送员信息实体E-R图如图4-8所示:

图4-8 配送员信息实体E-R图

4.3.2 数据库表设计

本神马物流管理系统采用MYSQL数据库进行系统数据的储存,下面介绍数据库中的各个表的详细信息。

表4-1 users管理员信息表

序号字段描述类型和长度主键是否可空
1id编号bigint(20)不允许
2username用户名varchar(100)允许
3password密码varchar(100)允许
4role角色varchar(100)允许
5addtime添加时间timestamp允许

表4-2 yonghu用户信息表

序号字段描述类型和长度主键是否可空
1id编号bigint(20)不允许
2addtime创建时间timestamp允许
3zhanghao账号varchar(200)允许
4mima密码varchar(200)允许
5xingming姓名varchar(200)允许
6xingbie性别varchar(200)允许
7shouji手机varchar(200)允许
8youxiang邮箱varchar(200)允许
9shouhuodizhi收货地址longtext允许
10zhaopian照片varchar(200)允许

表4-3 wuliuzhuizong物流追踪信息表

序号字段描述类型和长度主键是否可空
1id编号bigint(20)不允许
2addtime创建时间timestamp允许
3dingdanbianhao订单编号varchar(200)允许
4yunshuzhuangtai运输状态varchar(200)允许
5yunshuzhong运输中varchar(200)允许
6yunshuluxian运输路线varchar(200)允许
7zhanghao账号varchar(200)允许
8xingming`姓名varchar(200)允许
9`shouhuodizhi收货地址varchar(200)允许

表4-4 huowuxinxi货物信息表

序号字段描述类型和长度主键是否可空
1id编号bigint(20)不允许
2addtime创建时间timestamp允许
3huowumingcheng货物名称varchar(200)允许
4fenlei分类varchar(200)允许
5tupian图片varchar(200)允许
6guige规格varchar(200)允许
7`pinpai品牌varchar(200)允许
8shoujia售价int(11)允许
9jinjia`进价int(11)允许
10shuliang`数量int(11)允许
11hejijine合计金额int(11)允许
12guanliyuan管理员varchar(200)允许

表4-5 peisongyuan配送员信息表

序号字段描述类型和长度主键是否可空
1id编号bigint(20)不允许
2addtime创建时间timestamp允许
3peisongyuanbianhao配送员编号varchar(200)允许
4peisongyuanxingming配送员姓名varchar(200)允许
5peisongyuandianhua配送员电话varchar(200)允许
6peisongyuanzhaopian`配送员照片varchar(200)允许
7peisongyuanzhuangtai配送员状态varchar(200)允许
8shangbanshijian上班时间varchar(200)允许
9`beizhu备注varchar(200)允许

5 系统的实现

5.1 登录模块的实现

用户要想进入本系统必须进行登录操作,在登录界面输入系统账号、登录密码,选择登录类型,点击登录按钮进行登录系统,系统登录界面展示如图5-1所示。

图5-1 系统登录界面图

5.2 用户管理模块的实现

管理员可增删改查用户信息,用户管理界面展示如图5-2所示,新增用户界面展示如图5-3所示。

图5-2用户管理界面图

图5-3 新增用户界面图

5.3 货物信息管理模块的实现

管理员登录后可查询、添加、修改和删除货物信息,货物信息管理界面展示如图5-4所示,添加货物信息界面展示如图5-5所示。

图5-4 货物信息管理界面图

图5-5 添加货物信息界面图

5.4 订单管理模块的实现

管理员可增删改查订单信息,订单管理界面展示如图5-6所示。

图5-6 订单管理界面图

5.5 物流追踪管理模块的实现

管理员可增删改查物流追踪信息,物流追踪管理界面展示如图5-7所示,添加物流追踪界面如图5-8所示。

图5-7 物流追踪管理界面图

图5-8 添加物流追踪界面图

5.6 车辆交通管理模块的实现

管理员可增删改查车辆交通信息,车辆交通管理界面展示如图5-9所示。

图5-9 车辆交通管理界面图

ChatController.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.ChatEntity;
import com.entity.view.ChatView;

import com.service.ChatService;
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-04-12 13:47:09
 */
@RestController
@RequestMapping("/chat")
public class ChatController {
    @Autowired
    private ChatService chatService;
    


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

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

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

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(ChatEntity chat){
        EntityWrapper< ChatEntity> ew = new EntityWrapper< ChatEntity>();
 		ew.allEq(MPUtil.allEQMapPre( chat, "chat")); 
		ChatView chatView =  chatService.selectView(ew);
		return R.ok("查询在线客服成功").put("data", chatView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        ChatEntity chat = chatService.selectById(id);
        return R.ok().put("data", chat);
    }

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



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody ChatEntity chat, HttpServletRequest request){
    	chat.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(chat);
    	if(StringUtils.isNotBlank(chat.getAsk())) {
			chatService.updateForSet("isreply=0", new EntityWrapper<ChatEntity>().eq("userid", request.getSession().getAttribute("userId")));
    		chat.setUserid((Long)request.getSession().getAttribute("userId"));
    		chat.setIsreply(1);
    	}
    	if(StringUtils.isNotBlank(chat.getReply())) {
    		chatService.updateForSet("isreply=0", new EntityWrapper<ChatEntity>().eq("userid", chat.getUserid()));
    		chat.setAdminid((Long)request.getSession().getAttribute("userId"));
    	}

        chatService.insert(chat);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody ChatEntity chat, HttpServletRequest request){
    	chat.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(chat);
    	chat.setUserid((Long)request.getSession().getAttribute("userId"));
    	if(StringUtils.isNotBlank(chat.getAsk())) {
			chatService.updateForSet("isreply=0", new EntityWrapper<ChatEntity>().eq("userid", request.getSession().getAttribute("userId")));
    		chat.setUserid((Long)request.getSession().getAttribute("userId"));
    		chat.setIsreply(1);
    	}
    	if(StringUtils.isNotBlank(chat.getReply())) {
    		chatService.updateForSet("isreply=0", new EntityWrapper<ChatEntity>().eq("userid", chat.getUserid()));
    		chat.setAdminid((Long)request.getSession().getAttribute("userId"));
    	}

        chatService.insert(chat);
        return R.ok();
    }

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

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        chatService.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<ChatEntity> wrapper = new EntityWrapper<ChatEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


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


}

WuliuzhuizongController.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.WuliuzhuizongEntity;
import com.entity.view.WuliuzhuizongView;

import com.service.WuliuzhuizongService;
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-04-12 13:47:09
 */
@RestController
@RequestMapping("/wuliuzhuizong")
public class WuliuzhuizongController {
    @Autowired
    private WuliuzhuizongService wuliuzhuizongService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,WuliuzhuizongEntity wuliuzhuizong, 
		HttpServletRequest request){

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
			wuliuzhuizong.setZhanghao((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<WuliuzhuizongEntity> ew = new EntityWrapper<WuliuzhuizongEntity>();
		PageUtils page = wuliuzhuizongService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wuliuzhuizong), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,WuliuzhuizongEntity wuliuzhuizong, HttpServletRequest request){
        EntityWrapper<WuliuzhuizongEntity> ew = new EntityWrapper<WuliuzhuizongEntity>();
		PageUtils page = wuliuzhuizongService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wuliuzhuizong), params), params));
        return R.ok().put("data", page);
    }

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(WuliuzhuizongEntity wuliuzhuizong){
        EntityWrapper< WuliuzhuizongEntity> ew = new EntityWrapper< WuliuzhuizongEntity>();
 		ew.allEq(MPUtil.allEQMapPre( wuliuzhuizong, "wuliuzhuizong")); 
		WuliuzhuizongView wuliuzhuizongView =  wuliuzhuizongService.selectView(ew);
		return R.ok("查询物流追踪成功").put("data", wuliuzhuizongView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        WuliuzhuizongEntity wuliuzhuizong = wuliuzhuizongService.selectById(id);
        return R.ok().put("data", wuliuzhuizong);
    }

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



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody WuliuzhuizongEntity wuliuzhuizong, HttpServletRequest request){
    	wuliuzhuizong.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(wuliuzhuizong);

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

        wuliuzhuizongService.insert(wuliuzhuizong);
        return R.ok();
    }

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

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        wuliuzhuizongService.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<WuliuzhuizongEntity> wrapper = new EntityWrapper<WuliuzhuizongEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
			wrapper.eq("zhanghao", (String)request.getSession().getAttribute("username"));
		}

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


}

ConfigServiceImpl.java

package com.service.impl;


import java.util.Map;

import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.dao.ConfigDao;
import com.entity.ConfigEntity;
import com.entity.UserEntity;
import com.service.ConfigService;
import com.utils.PageUtils;
import com.utils.Query;


/**
 * 系统用户
 */
@Service("configService")
public class ConfigServiceImpl extends ServiceImpl<ConfigDao, ConfigEntity> implements ConfigService {
	@Override
	public PageUtils queryPage(Map<String, Object> params) {
		Page<ConfigEntity> page = this.selectPage(
                new Query<ConfigEntity>(params).getPage(),
                new EntityWrapper<ConfigEntity>()
        );
        return new PageUtils(page);
	}
}

HomeProgress.vue
<template>
  <div class="home-progress">
    <div class="title">月访问量</div>
    <div class="tip">同上期增长</div>
    <el-progress
      class="progress"
      :text-inside="true"
      :stroke-width="24"
      :percentage="20"
      status="success"
    ></el-progress>
    <div class="title">月用户量</div>
    <div class="tip">同上期增长</div>
    <el-progress
      class="progress"
      :text-inside="true"
      :stroke-width="24"
      :percentage="50"
      status="success"
    ></el-progress>
    <div class="title">月收入</div>
    <div class="tip">同上期减少</div>
    <el-progress
      class="progress"
      :text-inside="true"
      :stroke-width="24"
      :percentage="28"
      status="exception"
    ></el-progress>
  </div>
</template>
<script>
export default {};
</script>
<style lang="scss">
.home-progress {
  background: #ffffff;
  height: 400px;
  padding: 20px;
  .title {
    color: #666666;
    font-weight: bold;
    font-size: 20px;
    margin-top: 10px;
  }
  .tip {
    color: #888888;
    font-size: 16px;
    margin-top: 10px;
  }
  .progress {
    margin-top: 10px;
  }
}
</style>

声明

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值