@TOC
ssm685百货中心供应链管理系统+jsp
第1章 绪论
1.1 研究背景
互联网时代不仅仅是通过各种各样的电脑进行网络连接的时代,也包含了移动终端连接互联网进行复杂处理的一些事情。传统的互联网时代一般泛指就是PC端,也就是电脑互联网时代,但是最近几十年,是移动互联网时代,是向下一步互联网时代过度的一个重要时代,下一个互联网时代叫物联网,而移动互联网就是一个风口,是当前社会的主流风向。目前移动互联网大行其道,人人都手中拿着智能机,手机手机,手不离机,如果开发一个用在手机上的程序软件,那是多么的符合潮流,符合管理者和客户的理想。本次就是开发百货中心供应链管理系统有管理员,人事,财务,销售,采购,服务六个角色。管理员功能有个人中心,人事管理,财务管理,销售管理,采购管理,服务管理,合作公司管理,部门信息管理,商品入库管理,商品出库管理,商品采购管理,商品销售管理。人事功能有个人中心,财务管理,销售管理,采购管理,服务管理,合作公司管理,部门信息管理。财务和销售,功能有个人中心,合作公司管理,部门信息管理,商品信息管理,商品入库管理,商品出库管理,商品采购管理,商品销售管理。采购功能有个人中心,合作公司管理,部门信息管理,商品信息管理,商品入库管理,商品出库管理,商品采购管理。服务有个人中心,合作公司管理,部门信息管理,商品信息管理,商品入库管理,商品出库管理。人事,财务,销售,采购,服务都可以注册登录。
1.2 研究现状
当微软操作系统占领了多半江山,目前不分年龄和种族,使用频率最高,覆盖面积最广。使用人群使用的大多数都是微软系统。而微软又不遗余力的更新Windows版本,从微软对Windows的市场定位来讲,Windows的未来不仅仅是一个操作系统,而是让所有人都拥抱Windows,建立一个属于Windows的互联网生态圈。目前各大行业,各种类型的软件阵地转移到了Windows平台上,包含一些带商城的免费管理系统,或者一些带广告的免费应用,还有好多游戏之类的应用。尤其是经过疫情涌现的互联网办公,学校的互联网教学等,都不断的刷新人们对于互联网的认知。
1.3 目的和意义
从经济成本考虑,手机的价格比较亲民,对于不是必须在电脑上办公的人员来讲,手机上如果能解决事情就更方便了。
从使用便利角度上讲,用手机上的应用处理业务,不用考虑网线是否存在,不用考虑位置是否变化,依托无处不在的手机信号就可以在任何有信号的地方处理事务,这是多么的方便和使用,不限制时间,不限制地点,高山平原山谷都可以作为使用的地点而不影响使用的效果。
从操作角度上讲,手机的操作先天性的高于电脑的操作,因为电脑适合处理复杂的操作,而手机就是为了简化操作而生的,方便高效操作简单。
此次开发这个百货中心供应链管理系统,不仅仅满足用户的需要,也能跟上时代的发展风向,从技术的角度还是用户的角度上进行开发都是很有意义的。
1.4 论文研究内容
论文设计的结构也是依照程序开发的流程进展的,也涉及到功能需求分析,功能设计与实现,程序测试等流程。
绪论:讲解课题的背景与意义,展示论文结构。
程序开发技术:讲解程序运用到的工具与技术知识。
系统分析:讲解程序的功能需求与开发可行性问题。
系统设计:讲解程序的功能与数据库的设计。
系统实现:讲解程序功能与界面实现。
系统测试:讲解程序的功能测试。
第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的运行原理为了能够方便理解,现以图片的方式进行描述。
图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数据库的特点与优势,SQL server数据库的特点与优势等,最终看哪个数据库与需要开发的程序比较匹配,也符合程序功能运行需要的数据存储要求,比如,需要开发商业级别的程序,存储的数据对数据库要求较高,可以选用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技术可行性分析
此次开发程序使用到的开发工具有:MySQL等工具,使用的开发语言是Java,选择的开发工具和开发语言都是在大学课堂接触并学习过,后期因为自己也比较感兴趣,所以也通过网络渠道,或借助图书馆的开发类书籍进行过软件开发知识的系统学习,让自己有了一定的知识积累,加上自己在校期间也独立开发过一些软件作品,也积累了一定的开发经验,所以这次毕设作品的制作在技术上无须担忧过多。
3.1.2经济可行性分析
目前的信息时代,对信息的管理趋于高效化,便捷化,这也是计算机大力普及所带来的便利,此程序软件在设备选用上,依靠的是比较大众的电脑设备,对电脑的配置没有过多要求,一般学校的计算机机房的电脑都可以满足程序开发需求,另外,开发出此款程序,让信息处理变得高效率,其所带来的高效益是远超程序开发的低成本的,因此程序开发的资金投入是可以忽略不计的。
3.1.3操作可行性分析
程序软件的操作界面是符合大众审美的需求,功能模块的布局也是类似于社会上同种类型的软件,因此使用者操作该软件可以无需培训就上手。加上现在计算机入驻各家各户,大部分人的计算机操作水平都比较高,这样的局面也表明开发出来的程序在操作性问题上也是不用担心的。
综合上面的可行性论证,基本可以确定程序开发完全可行。
3.2系统运行环境
程序经过编码可以实现对程序设计的功能。但是编码实现时需要一定的配置环境,包括了电脑上的硬件环境,也包括在电脑操作系统上安装的软件环境。
硬件环境:一台可以正常使用并能够上网的笔记本或者是电脑,电脑内存最低要求4个G,电脑的中央处理器可以配置i5CPU。
软件环境:运用的微软操作系统是比较稳定的win7旗舰版系统,采用比较熟练的360安全浏览器,并在此系统上通过浏览器下载安装好MySQL软件等。
3.3系统流程分析
分析程序的流程,涉及到程序的整体操作流程,通过分析与设计,绘制的程序操作流程图见下图。此程序为了确保安全,会让使用者通过登录模块验证信息,符合要求的使用者才有权限操作程序。
图3-1 程序操作流程图
程序处理数据会涉及到数据的录入环节,绘制的添加流程见下图。程序录入数据过程中,始终与数据库保持同步。
图3-2 信息添加流程图
程序里面的数据也会出现错误,因此就有相应的修改数据的功能,绘制的程序修改流程见下图。此过程也是跟后台数据库进行数据同步显示。
图3-3信息修改流程图
程序数据存放于数据仓库,有时也会涉及到数据删除,此过程对应的流程图见下图。数据信息被删除之后,数据库里面也就没有了该数据信息了。
图3-4 信息删除流程图
第4章 系统设计
4.1 系统设计的原则
在系统设计过程中,也需要遵循相应的设计原则,这些设计原则可以帮助设计者在短时间内设计出符合设计规范的设计方案。设计原则主要有可靠性,安全性,可定制化,可扩展性,可维护性,可升级性以及客户体验等原则。下面就对这些原则进行简要阐述。
可靠性:一个软件是否可靠决定了其是否被用户使用,设计不可靠的软件,用户很容易就遗弃;
安全性:程序软件承担了信息的保存与管理等事务,安全性不足的软件会导致使用者承担巨大的损失;所以系统安全也是需要考虑进入的;
可定制化:市场环境从来都不是一直固定不变,面对客户群体的改变,以及使用环境的改变,市场需求的改变等因素,程序软件也要易于调整以适应各种变化;
可扩展性:程序软件在运行使用期间,也需要及时引进当下的新技术来进行系统优化,主要就是在系统功能层面,系统性能层面上进行相应的扩展,只有这样才能让系统在实际生活中继续占有市场;
可维护性:程序软件的维护需要一定量的资金,不管是排除现有程序错误,还是变更软件的现有需求,都需要在软件技术上投入一定资金,所以易于维护的软件程序就可以降低技术层面的资金消耗;
可升级性:程序软件的投入使用,会面临用户数量增多的情况,用户对软件的使用率也会提升,所以系统面临这种情况,仍然需要通过升级保持性能的合理,这样才能够适应市场;
客户体验:设计出来的程序软件在界面上不能够太复杂,要遵循界面设计的原理设计出简单,方便操作的功能操作界面,让用户易于接受软件,并乐于使用软件提供的功能。
4.2 功能结构设计
在管理员功能模块确定下来的基础上,对管理员各个功能进行设计,确定管理员功能的详细模块。绘制的管理员功能结构见下图。有管理员,人事,财务,销售,采购,服务六个角色。
管理员功能有
个人中心,人事管理,财务管理,销售管理,采购管理,服务管理,合作公司管理,部门信息管理,商品入库管理,商品出库管理,商品采购管理,商品销售管理。
人事功能有
个人中心,财务管理,销售管理,采购管理,服务管理,合作公司管理,部门信息管理。
财务和销售,功能有
个人中心,合作公司管理,部门信息管理,商品信息管理,商品入库管理,商品出库管理,商品采购管理,商品销售管理。
采购功能有
个人中心,合作公司管理,部门信息管理,商品信息管理,商品入库管理,商品出库管理,商品采购管理。
服务有
个人中心,合作公司管理,部门信息管理,商品信息管理,商品入库管理,商品出库管理。
人事,财务,销售,采购,服务都可以注册登录。
图4-2 功能结构图
4.3 数据库设计
与功能结构设计一样,数据库设计也是程序开发不可避免的设计环节,数据库设计最主要的目的就是帮助运行程序存储相应的数据信息。数据库设计包含的内容有数据表结构的设计,也包含了数据库E-R图的设计。
4.3.1 数据库E-R图
在绘制E-R图之前,先要找出数据库的实体,明确各个实体具有的属性,比如用户信息这个实体,它具备的属性包括了用户的姓名属性,用户的密码属性,用户的创建时间属性等,所以明确了用户这个实体,以及用户实体具备的属性之后,就需要根据这些信息绘制用户实体对应的实体属性图了。绘制软件选用当下认可度高,使用范围广,操作便利的微软旗下的Visio工具。
(1)管理员实体属性图通过Visio工具绘制,绘制结果展示如下:
图4-4 管理员实体属性图
(2)部门实体属性图通过Visio工具绘制,绘制结果展示如下:
图4-5 部门实体属性图
(3)人事实体属性图通过Visio工具绘制,绘制结果展示如下:
图4-6 人事实体属性图
4.3.2 数据库表结构
在进行这部分设计之前,需要明白和掌握数据类型以及各个数据类型的长度范围等知识,因为在一张具体的数据表中,为了方便理解,这里就举个简单的例子。比如用户信息表,这个表格的字段就是用户这个实体具备的属性,这时就需要对字段进行数据类型,以及字段长度的设置,也要设置一个主键来作为用户信息表的唯一标识。这些都是数据库表结构设计需要完成的内容。根据百货中心供应链管理系统的功能设计以及数据库设计要求,展示该系统的数据表结构。
1合作公司表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | gongsibianhao | String | 公司编号 | 是 |
4 | gongsimingcheng | String | 公司名称 | 是 |
5 | lianxiren | String | 联系人 | 是 |
6 | lianxidianhua | String | 联系电话 | 是 |
7 | gongsijianjie | String | 公司简介 | 是 |
2商品信息表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | shangpinbianhao | String | 商品编号 | 是 |
4 | shangpinmingcheng | String | 商品名称 | 是 |
5 | shangpinleixing | String | 商品类型 | 是 |
6 | shuliang | Integer | 数量 | 是 |
7 | jiage | float | 价格 | 是 |
8 | tupian | String | 图片 | 是 |
9 | chandi | String | 产地 | 是 |
10 | shengchanriqi | date | 生产日期 | 是 |
11 | baozhiqi | String | 保质期 | 是 |
12 | shangpinxiangqing | String | 商品详情 | 是 |
3商品销售表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | shangpinbianhao | String | 商品编号 | 是 |
4 | shangpinmingcheng | String | 商品名称 | 是 |
5 | shangpinleixing | String | 商品类型 | 是 |
6 | tupian | String | 图片 | 是 |
7 | shuliang | Integer | 数量 | 是 |
8 | jiage | Integer | 价格 | 是 |
9 | zongji | float | 总计 | 是 |
10 | chandi | String | 产地 | 是 |
11 | shengchanriqi | String | 生产日期 | 是 |
12 | baozhiqi | String | 保质期 | 是 |
13 | xiaoshoushijian | datetime | 销售时间 | 是 |
14 | xiaoshouzhanghao | String | 销售账号 | 是 |
15 | xiaoshourenming | String | 销售人名 | 是 |
16 | xiaoshoushuoming | String | 销售说明 | 是 |
4财务表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | caiwuzhanghao | String | 财务账号 | 是 |
4 | mima | String | 密码 | 是 |
5 | caiwuxingming | String | 财务姓名 | 是 |
6 | xingbie | String | 性别 | 是 |
7 | lianxidianhua | String | 联系电话 | 是 |
8 | youxiang | String | 邮箱 | 是 |
9 | shenfenzheng | String | 身份证 | 是 |
10 | zhaopian | String | 照片 | 是 |
11 | dizhi | String | 地址 | 是 |
5商品入库表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | shangpinbianhao | String | 商品编号 | 是 |
4 | shangpinmingcheng | String | 商品名称 | 是 |
5 | shangpinleixing | String | 商品类型 | 是 |
6 | tupian | String | 图片 | 是 |
7 | shuliang | Integer | 数量 | 是 |
8 | jiage | float | 价格 | 是 |
9 | chandi | String | 产地 | 是 |
10 | shengchanriqi | String | 生产日期 | 是 |
11 | baozhiqi | String | 保质期 | 是 |
12 | rukushijian | datetime | 入库时间 | 是 |
13 | fuwuzhanghao | String | 服务账号 | 是 |
14 | fuwurenming | String | 服务人名 | 是 |
15 | rukushuoming | String | 入库说明 | 是 |
6销售表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | xiaoshouzhanghao | String | 销售账号 | 是 |
4 | mima | String | 密码 | 是 |
5 | xiaoshourenming | String | 销售人名 | 是 |
6 | xingbie | String | 性别 | 是 |
7 | dianhua | String | 电话 | 是 |
8 | youxiang | String | 邮箱 | 是 |
9 | shenfenzheng | String | 身份证 | 是 |
10 | zhaopian | String | 照片 | 是 |
11 | dizhi | String | 地址 | 是 |
7管理员表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | username | String | 用户名 | 是 |
3 | password | String | 密码 | 是 |
4 | role | String | 角色 | 是 |
5 | addtime | Date | 新增时间 | 是 |
8服务表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | fuwuzhanghao | String | 服务账号 | 是 |
4 | mima | String | 密码 | 是 |
5 | fuwurenming | String | 服务人名 | 是 |
6 | xingbie | String | 性别 | 是 |
7 | shoujihao | String | 手机号 | 是 |
8 | youxiang | String | 邮箱 | 是 |
9 | shenfenzheng | String | 身份证 | 是 |
10 | zhaopian | String | 照片 | 是 |
11 | dizhi | String | 地址 | 是 |
9部门信息表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | bumenmingcheng | String | 部门名称 | 是 |
4 | bumenfuzeren | String | 部门负责人 | 是 |
5 | lianxidianhua | String | 联系电话 | 是 |
6 | bangongquyu | String | 办公区域 | 是 |
10人事表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | renshizhanghao | String | 人事账号 | 是 |
4 | mima | String | 密码 | 是 |
5 | renshixingming | String | 人事姓名 | 是 |
6 | touxiang | String | 头像 | 是 |
7 | xingbie | String | 性别 | 是 |
8 | zhiwei | String | 职位 | 是 |
9 | shouji | String | 手机 | 是 |
11采购表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | caigouzhanghao | String | 采购账号 | 是 |
4 | mima | String | 密码 | 是 |
5 | caigourenming | String | 采购人名 | 是 |
6 | xingbie | String | 性别 | 是 |
7 | lianxifangshi | String | 联系方式 | 是 |
8 | youxiang | String | 邮箱 | 是 |
9 | shenfenzheng | String | 身份证 | 是 |
10 | zhaopian | String | 照片 | 是 |
11 | dizhi | String | 地址 | 是 |
12商品出库表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | shangpinbianhao | String | 商品编号 | 是 |
4 | shangpinmingcheng | String | 商品名称 | 是 |
5 | shangpinleixing | String | 商品类型 | 是 |
6 | tupian | String | 图片 | 是 |
7 | shuliang | Integer | 数量 | 是 |
8 | jiage | Integer | 价格 | 是 |
9 | chandi | String | 产地 | 是 |
10 | shengchanriqi | String | 生产日期 | 是 |
11 | baozhiqi | String | 保质期 | 是 |
12 | chukushijian | datetime | 出库时间 | 是 |
13 | fuwuzhanghao | String | 服务账号 | 是 |
14 | fuwurenming | String | 服务人名 | 是 |
15 | chukushuoming | String | 出库说明 | 是 |
13商品采购表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
---|---|---|---|---|
1 | Id | Int | id | 否 |
2 | addtime | Date | 创建时间 | 是 |
3 | shangpinbianhao | String | 商品编号 | 是 |
4 | shangpinmingcheng | String | 商品名称 | 是 |
5 | shangpinleixing | String | 商品类型 | 是 |
6 | tupian | String | 图片 | 是 |
7 | caigoushuliang | Integer | 采购数量 | 是 |
8 | jiage | Integer | 价格 | 是 |
9 | zongji | float | 总计 | 是 |
10 | chandi | String | 产地 | 是 |
11 | shengchanriqi | String | 生产日期 | 是 |
12 | baozhiqi | String | 保质期 | 是 |
13 | caigoushijian | datetime | 采购时间 | 是 |
14 | caigouzhanghao | String | 采购账号 | 是 |
15 | caigourenming | String | 采购人名 | 是 |
16 | caigoushuoming | String | 采购说明 | 是 |
17 | sfsh | String | 是否审核 | 是 |
18 | shhf | String | 审核回复 | 是 |
19 | ispay | String | 是否支付 | 是 |
第5章 系统实现
系统实现这个章节的内容主要还是展示系统的功能界面设计效果,在实现系统基本功能,比如修改,比如添加,比如删除等管理功能的同时,也显示出系统各个功能的界面实现效果,该部分内容一方面与前面提到的系统分析,系统设计的内容相呼应,另一方面也是一个实际成果的展示。
5.1 人事信息管理
管理员可以对人事信息进行添加,修改,查询,删除以及批量删除操作。
图5-1 人事信息管理页面
5.2 财务信息管理
管理员可以对财务信息进行添加,修改,查询,删除以及批量删除操作。
图5-2 财务信息管理页面
5.3 销售信息管理
管理员可以对销售信息进行添加,修改,查询,删除以及批量删除操作。
图5-3 销售信息管理页面
5.4 采购信息管理
管理员对采购信息进行添加,修改,查询,删除以及批量删除操作。
图5-4 采购信息管理页面
5.5 服务信息管理
管理员可以对服务信息进行添加,修改,查询,删除以及批量删除操作。
图5-5 服务信息页面
5.6 合作公司管理
管理员可以对合作公司信息进行添加,修改,查询,删除以及批量删除操作。
图5-6 合作公司页面
5.7 部门信息管理
管理员可以对部门信息进行添加,修改,查询,删除以及批量删除操作。
图5-7 部门信息管理页面
5.8 商品信息管理
管理员可以对商品信息进行添加,修改,查询,删除以及批量删除操作。
图5-8 商品信息管理页面
XiaoshouServiceImpl.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.XiaoshouDao;
import com.entity.XiaoshouEntity;
import com.service.XiaoshouService;
import com.entity.vo.XiaoshouVO;
import com.entity.view.XiaoshouView;
@Service("xiaoshouService")
public class XiaoshouServiceImpl extends ServiceImpl<XiaoshouDao, XiaoshouEntity> implements XiaoshouService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<XiaoshouEntity> page = this.selectPage(
new Query<XiaoshouEntity>(params).getPage(),
new EntityWrapper<XiaoshouEntity>()
);
return new PageUtils(page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper<XiaoshouEntity> wrapper) {
Page<XiaoshouView> page =new Query<XiaoshouView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
@Override
public List<XiaoshouVO> selectListVO(Wrapper<XiaoshouEntity> wrapper) {
return baseMapper.selectListVO(wrapper);
}
@Override
public XiaoshouVO selectVO(Wrapper<XiaoshouEntity> wrapper) {
return baseMapper.selectVO(wrapper);
}
@Override
public List<XiaoshouView> selectListView(Wrapper<XiaoshouEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
@Override
public XiaoshouView selectView(Wrapper<XiaoshouEntity> wrapper) {
return baseMapper.selectView(wrapper);
}
}
HezuogongsiController.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.HezuogongsiEntity;
import com.entity.view.HezuogongsiView;
import com.service.HezuogongsiService;
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-31 19:53:19
*/
@RestController
@RequestMapping("/hezuogongsi")
public class HezuogongsiController {
@Autowired
private HezuogongsiService hezuogongsiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,HezuogongsiEntity hezuogongsi,
HttpServletRequest request){
EntityWrapper<HezuogongsiEntity> ew = new EntityWrapper<HezuogongsiEntity>();
PageUtils page = hezuogongsiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, hezuogongsi), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,HezuogongsiEntity hezuogongsi,
HttpServletRequest request){
EntityWrapper<HezuogongsiEntity> ew = new EntityWrapper<HezuogongsiEntity>();
PageUtils page = hezuogongsiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, hezuogongsi), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( HezuogongsiEntity hezuogongsi){
EntityWrapper<HezuogongsiEntity> ew = new EntityWrapper<HezuogongsiEntity>();
ew.allEq(MPUtil.allEQMapPre( hezuogongsi, "hezuogongsi"));
return R.ok().put("data", hezuogongsiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(HezuogongsiEntity hezuogongsi){
EntityWrapper< HezuogongsiEntity> ew = new EntityWrapper< HezuogongsiEntity>();
ew.allEq(MPUtil.allEQMapPre( hezuogongsi, "hezuogongsi"));
HezuogongsiView hezuogongsiView = hezuogongsiService.selectView(ew);
return R.ok("查询合作公司成功").put("data", hezuogongsiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
HezuogongsiEntity hezuogongsi = hezuogongsiService.selectById(id);
return R.ok().put("data", hezuogongsi);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
HezuogongsiEntity hezuogongsi = hezuogongsiService.selectById(id);
return R.ok().put("data", hezuogongsi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody HezuogongsiEntity hezuogongsi, HttpServletRequest request){
hezuogongsi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(hezuogongsi);
hezuogongsiService.insert(hezuogongsi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody HezuogongsiEntity hezuogongsi, HttpServletRequest request){
hezuogongsi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(hezuogongsi);
hezuogongsiService.insert(hezuogongsi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody HezuogongsiEntity hezuogongsi, HttpServletRequest request){
//ValidatorUtils.validateEntity(hezuogongsi);
hezuogongsiService.updateById(hezuogongsi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
hezuogongsiService.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<HezuogongsiEntity> wrapper = new EntityWrapper<HezuogongsiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = hezuogongsiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
ShangpincaigouController.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.ShangpincaigouEntity;
import com.entity.view.ShangpincaigouView;
import com.service.ShangpincaigouService;
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-31 19:53:20
*/
@RestController
@RequestMapping("/shangpincaigou")
public class ShangpincaigouController {
@Autowired
private ShangpincaigouService shangpincaigouService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,ShangpincaigouEntity shangpincaigou,
@RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") Date caigoushijianstart,
@RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") Date caigoushijianend,
HttpServletRequest request){
EntityWrapper<ShangpincaigouEntity> ew = new EntityWrapper<ShangpincaigouEntity>();
if(caigoushijianstart!=null) ew.ge("caigoushijian", caigoushijianstart);
if(caigoushijianend!=null) ew.le("caigoushijian", caigoushijianend);
PageUtils page = shangpincaigouService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpincaigou), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,ShangpincaigouEntity shangpincaigou,
@RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") Date caigoushijianstart,
@RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") Date caigoushijianend,
HttpServletRequest request){
EntityWrapper<ShangpincaigouEntity> ew = new EntityWrapper<ShangpincaigouEntity>();
if(caigoushijianstart!=null) ew.ge("caigoushijian", caigoushijianstart);
if(caigoushijianend!=null) ew.le("caigoushijian", caigoushijianend);
PageUtils page = shangpincaigouService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpincaigou), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( ShangpincaigouEntity shangpincaigou){
EntityWrapper<ShangpincaigouEntity> ew = new EntityWrapper<ShangpincaigouEntity>();
ew.allEq(MPUtil.allEQMapPre( shangpincaigou, "shangpincaigou"));
return R.ok().put("data", shangpincaigouService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(ShangpincaigouEntity shangpincaigou){
EntityWrapper< ShangpincaigouEntity> ew = new EntityWrapper< ShangpincaigouEntity>();
ew.allEq(MPUtil.allEQMapPre( shangpincaigou, "shangpincaigou"));
ShangpincaigouView shangpincaigouView = shangpincaigouService.selectView(ew);
return R.ok("查询商品采购成功").put("data", shangpincaigouView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
ShangpincaigouEntity shangpincaigou = shangpincaigouService.selectById(id);
return R.ok().put("data", shangpincaigou);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
ShangpincaigouEntity shangpincaigou = shangpincaigouService.selectById(id);
return R.ok().put("data", shangpincaigou);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ShangpincaigouEntity shangpincaigou, HttpServletRequest request){
shangpincaigou.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(shangpincaigou);
shangpincaigouService.insert(shangpincaigou);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody ShangpincaigouEntity shangpincaigou, HttpServletRequest request){
shangpincaigou.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(shangpincaigou);
shangpincaigouService.insert(shangpincaigou);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody ShangpincaigouEntity shangpincaigou, HttpServletRequest request){
//ValidatorUtils.validateEntity(shangpincaigou);
shangpincaigouService.updateById(shangpincaigou);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
shangpincaigouService.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<ShangpincaigouEntity> wrapper = new EntityWrapper<ShangpincaigouEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = shangpincaigouService.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<ShangpincaigouEntity> ew = new EntityWrapper<ShangpincaigouEntity>();
List<Map<String, Object>> result = shangpincaigouService.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<ShangpincaigouEntity> ew = new EntityWrapper<ShangpincaigouEntity>();
List<Map<String, Object>> result = shangpincaigouService.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<ShangpincaigouEntity> ew = new EntityWrapper<ShangpincaigouEntity>();
List<Map<String, Object>> result = shangpincaigouService.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);
}
}
logout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
function logout() {
$.ajax({
type: "GET",
url: baseUrl + "users/logout",
beforeSend: function(xhr) {
xhr.setRequestHeader("token", window.sessionStorage.getItem('token'));
},
success: function(res){
if(res.code == 0 || res.code == 401){
window.sessionStorage.clear();
window.location.href="${pageContext.request.contextPath}/jsp/login.jsp"
}else{
alert(res.msg);
}
},
});
}
function toFront() {
window.location.assign(baseUrl+'front');
}
声明
本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。