如何使用ssm实现小工程预算

236 篇文章 0 订阅
135 篇文章 0 订阅

@TOC

ssm769小工程预算+jsp

第一章 绪论

1.1 选题背景

目前整个社会发展的速度,严重依赖于互联网,如果没有了互联网的存在,市场可能会一蹶不振,严重影响经济的发展水平,影响人们的生活质量。计算机的发展,不管是从硬件还是软件,都有很多技术储备,每年都有很多的技术和软件产生,纵观各个领域,无一不用互联网软件,办公用的还是电脑居多,但是人手一台智能设备已经变成了现在人们的生活日常,哪怕的普通的老百姓都成了上知天文下知地理的所在,这些都依赖于互联网技术。互联网技术在信息的传播方面是巨大的,而信息的处理就变成了各种产业管理者和维护者的重任。人们已经习惯了互联网的存在,所以经常操作一些互联网产品变成了日常,所以开发一个小工程预算系统,让人们使用是没有一点问题的,并且在这个过程中不仅能够规范小工程预算信息管理的使用流程还有信息处理流程,也能让整个信息的传播处理,都存在一种可控制的范围,最重要的是,计算机在小工程预算信息管理方面可以给管理者提供更好的帮助。

1.2 选题意义

当开发软件变成了一个潮流之后,会发现不管任何行业都能开发适合自己的软件,不管是内部员工管理,还是财务管理,甚至业务管理都可以数据化,并且可以对这些数据集中处理,进而根据数据处理结果就自然而然的提高了管理水平,最重要的是,开发一个软件投入使用,开发过程其实就是梳理行业痛点的过程,就是让软件来弥补行业的管理漏洞,不断的优化事物的处理流程。小工程预算系统就是一款专门开发的软件,通过Web技术,让使用者可以在任何一台智能设备上面通过浏览器进行操作使用,对数据的处理不在局限于地域距离,只要软件开发到位,使用起来方便,达到预期目的,会发现有软件和没有软件的区别是很大的,有了这款软件之后,会发现数据的存储安全方面,比起之前的满屋寻找记录的优势是多么的巨大。

1.3 研究内容

本文将从分析,设计,实现,测试等角度来阐述本系统。

绪论:介绍本系统开发的背景,意义;

开发环境:介绍本系统的配置环境以及开发技术;

系统分析:介绍本系统的功能,性能以及可行性;

系统设计:介绍本系统的数据库的设计以及功能结构的设计;

系统实现:介绍本系统的实现界面以及实现的功能;

系统测试:介绍本系统的功能测试以及测试结果;

第二章 开发环境

开发本系统需要配置开发环境,除了需要开发者安装相应的软件外,也需要对开发中运用的技术进行了解和掌握。

2.1 Java语言

Java语言是目前最流行的语言之一,不仅可以做桌面窗口形式的程序,还可以做浏览器访问的程序,目前最流行的就是用Java语言作为基础,做各种程序的后台处理。Java语言是操作变量的语言,而变量则是Java对于数据存在形式的定义,变量用来操作内存,而内存则牵扯到计算机安全问题,这样Java语言反而有了免疫直接针对用Java语言开发出来的程序的病毒,有效的提高了Java语言开发出来程序的生存能力。Java是具有动态运行能力的一种语言,Java的类不仅仅可以用Java核心提供的基础类,还可以进行重写,这样会让Java的功能变得更加丰富,甚至可以编写一些功能模块进行封装,然后其他项目如果需要用到这些可以复用的功能,完全可以直接引用,然后在用得地方调用方法即可。Java是一种开源的语言,可以对Java里面的各种类以及引用方法进行追溯,甚至可以对已经编译过的语言进行反编译,这样不仅仅提高学习的效率,并且可以学习其他从业者提供的优雅的编程方式。Java语言发展到现在,已经在各个行业扎根,学习Java可以从事的行业很多,并且学习的方法很多,网上有很多免费的教程,甚至有些高深的知识也只需要付费就可以进行学习,而不是像Java语言之初,每一个编程人员都需要用记事本进行手动编码,现在有很多集成开发环境帮助Java从业者。选择Java语言进行编程,是一种很好的解决问题的方式。

2.2 MYSQL数据库

一般学习程序开发的人员如果学习数据库的话,肯定是要学习MySQL数据库,MySQL数据库通过这么多年的不断发展,社区版本都是免费的,最重要的是小巧,占用电脑空间比较小,让更多的开发人员可以不需要更换更高级的电脑就可以进行学习。学习只是一个方面,最重要的是MySQL市场占有率是世界第一,基本上十个公司就有七八个用得MySQL数据库。MySQL的优点不只是这么粗浅,MySQL首先是开源的,只要不是商用就不用花钱,并且大型的数据也是支持的,只要是市面上存在的操作系统,MySQL都可以有对应的版本可供使用。因为MySQL是开源的,如果有对MySQL有特殊需求的甚至可以自己修改源码,达到符合自己使用的目的。MySQL数据库好处多多,最重要的一点符合本设计的开发需求,可以说本设计只用到了MySQL的一些基础功能,而这点基础功能就完全够用。MySQL学习的教程网上很多,许多关于入门的教程就完全可以达到普通程序员的开发水平,只需要把基本的知识学会了,到公司里面也只是根据不同的业务逻辑进行不同的语句编写而已。

2.3 Eclipse开发工具

Eclipse是开源免费的,仅仅这样理解也许会给人一种免费没有好货的感觉,其实不是这样的。Eclipse是一个开发源代码的开发工具,这样会很安全,因为是开源的,如果对使用者的电脑有害,肯定能找到原因所在,所以这一点安全方面是不用担心的。Eclipse是不用安装的,这样就不用对系统盘增加压力,可以放到任何一个盘里,使用的时候打开,不用的时候关闭,不会偷偷的在后台运行,不需要增加注册表负担,启动还必须依靠Java的JDK才可以启动,有效的避免了一些病毒入侵,如果病毒入侵改变了源代码,就不能运行了,只能重新删除文件夹重新解压一份新的Eclipse即可,用起来很安全。Eclipse发展到现在,已经可以支持其他的开发语言了,家族越来越强大,功能越来越多,最重要的还是没有收费,这一点就让新手开发者省下很多的资金用来培养自己的学习,而不用花钱买了开发软件才发现自己不适合进行开发,永远免费的策略可以永远让人有想使用的机会。最重要的是Eclipse并不是免费功能就不够用,恰恰相反,不仅功能强大,用起来完全符合本设计的开发需求,所以选用了Eclipse作为开发工具。

2.4 SSM框架

首先SSM框架是指的三个框架,第一个S是Spring MVC的首字母,主要是作为控制视图层的一种框架,第二个S是Spring框架的意思,主要是用来作为Web层,这一层主要是用来获取浏览器提交的一些信息并且把提交的信息处理后反馈给Spring MVC来控制不同的显示页面和内容;第三个M是的意思是MyBatis框架,主要是做为持久层用得,把数据对象转换成数据库表里的值,或者从数据库获取相应的数据转换成对应的Java对象让程序可以有效的进行转换和处理。三个框架可以有效的进行结合,实现不同的作用,起到了承上启下的作用。

第三章 系统分析

这个阶段,需要依靠大量的资料作为研究本系统的基础数据,除了分析系统开发可行问题之外,还要再通过调查本系统针对的目标人群的需求来确定本系统功能,并在本系统的性能上做出进一步分析。

3.1可行性分析

在项目进行开发之前,必须要有可行性分析报告,分别从技术角度,经济角度,操作角度上面进行分析,经过可行性分析是实现科学开发的必要步骤。

3.1.1技术可行性

从技术的角度出发,目前采用开发的技术完全能满足系统开发需要。目前市场上有现成的软件开发工具和开发技术,这些可以保证系统开发的顺利进展。

3.1.2操作可行性

小工程预算系统是根据用户经常使用的页面操作流程来进行设计的,并且页面保证统一,从视觉角度和操作角度上都能达到使用要求。

3.1.3经济可行性

在本次开发过程中,因为需要通过电脑来进行配置开发的环境,通过对技术的分析,发现目前正在使用的电脑是可以满足开发需要的,并不需要太多的金钱对电脑进行更换。所以,从经济角度上分析,可以满足开发要求。

从以上三个角度来进行分析论证,证明了小工程预算系统是可以正常开发并且使用的。

3.2系统流程分析

从系统的角色上分析,每个用户角色都代表了不同的账号身份,而不同的身份则代表着功能的异同,所以首先要区分用户的角色身份问题。设置用户登录需要输入账号和密码,输入的信息必须与数据库里已经存在的账号密码信息进行比对,只有正确的账号和密码才可以进行下一步的页面显示操作,如果不正确的账号密码,则拒绝用户登录,也代表着用户没有继续访问的权限,系统是无法继续提供服务的。

图3-1 操作流程图

任何一个系统都有一个操作流程,本设计里面,对于任何数据的存储都有一定的合法要求,只有符合设定要求的数据才可以进行存储。具体步骤参考下图。

图3-2 添加信息流程图

数据的存储并不是一成不变的,当需要对已经存在的数据进行改变的时候,同样也遵循着操作流程,想更改数据首先要确定更改之前的数据是什么,然后输入新的数据是否合法,都要符合流程,只有合法数据才可以被更新到数据库里存储。具体步骤参考下图。

图3-3 修改信息流程图

删除操作,在数据存储方面是一件比较慎重的事件,很有可能会产生失误操作,所以一般删除操作的时候都要提示是否删除,确定删除才会更新数据库内容,实现删除目的。具体步骤参考下图。

图3-4 删除信息流程图

3.3系统性能分析

系统在使用过程中,用户会享受到系统带来的便利。那么如何保持在长时间的使用过程中,不出现乱七八糟的问题,让使用系统变成一种操作上的享受,使用上的便捷,这就是需要考虑的问题。以下主要从系统的性能分析上面进行描述,从数据完整以及数据安全,包括系统的可扩展等方面进行介绍。

3.3.1系统安全性

注册用户与游客用户的区别就在于是否有账号,如果有账号,那么就有相关的注册用户权限,有账号就有密码,密码是保证账号安全性的前提,游客只能浏览一些公共性信息,如果需要用户登录才能观看的信息,那么也需要使用账号登录的。对于系统安全性上面,主要考虑角色的密码加密问题,这样可以防止有效的密码数据拦截后的破解工作。一般密码如果有安全性要求的话,是可以考虑加密存储。密码的加密存储大致有两种设计方法,一种是密码在前台提交后就用Java Script进行MD5加密,然后直接提交密文,这样的好处是密文传输的安全性,另一种是提交密码后在后台处理的过程中对密码进行加密或者解密,这样会增加后台的处理负担。一般都居中考虑,如果登录的话会把密码在后台进行加密与数据库密码进行对比。目前常用的加密方式是MD5加密方式。

3.3.2数据完整性

系统进行开发的最重要的目的就是数据的处理,计算机有其擅长数据的存储以及处理工作,所以数据的完整性是必须保证的,不然系统的存在是没有必要的。数据不管是设计还是存储,都必须完整,从数据的输入就从各个方面保证数据的合法性,违规数据不能直接提交的。数据处理逻辑也会保证数据的加工正常,进而进行数据存储,也会保证数据设计的合理,这些都是有数据设定要求的。目前对数据的存储采用的关系型数据库,关系型数据库有多年的历史,功能强大,迁移备份以及无人值守都可以进行自动备份的。

3.3.3系统可扩展性

系统是有必要存在扩展性的。在设计之初就要考虑可能存在的业务,所以对系统的设计就要模块化设计,这样需要进行扩展的时候,只要在对应模块进行增加,对应逻辑进行调试即可。系统可扩展性的提升会让系统增加不必要的工作量,让程序设计更加符合规范。

3.4系统功能分析

本系统在功能分析上,主要是根据目标用户群的角度进行分析,为了便于展示分析结果,这里就使用用例图进行功能展示。

管理员用例图的绘制结果见图3-5。管理员登录进入本系统操作的功能包括增删改查装修材料,工程信息,材料分类信息,管理材料订单以及工程订单,管理用户。

图3-5 管理员用例图

用户用例图的绘制结果见图3-6。用户登录进入本系统操作的功能包括购买装修材料,支付装修材料订单,对工程下单,审核管理员对工程订单提供的报价信息,支付工程订单。

图3-6 用户用例图

第四章 系统设计

到目前为止,市面上已经存在了各种各样的软件系统,从系统的分类着手,主要应用范围倾向于办公系统,娱乐系统,社交系统,然后下面有很多比较细的分支系统。很多系统已经经过了市场的考验,针对不同的业务场景已经开始出现了业务模块化,程序员减代码化的各种设计方式。到目前为止,当要设计一个系统的时候,首先根据业务模型基本上都可以在网上找到类似的模板,然后根据具体业务具体分析,进而实现具体功能,大众的就是最好的,毕竟符合市场主流的就代表着肯定符合常规操作流程。

4.1 系统设计目标

系统设计的时候,就要制定需要达成的目标。在功能上,要严格符合设计需求,不仅仅要减少操作步骤,也要符合预期。因此,在规范化的今天设计出符合项目要求的系统,必须要达到下面设定的目标。

第一个目标就是友好性:友好性主要体现在用户使用过程中,不会对系统的操作产生一种不满,减少操作者的愤怒,这是相当重要的一个体现。前几年好多软件在这个友好性方面失去了市场,就是因为在友好性这方面没有做好。国内互联网发展初期,软件设计的目的就是能用就行,至于友好性的对比,那是不存在的,因为硬件效率比较低,计算机属于新兴行业,所以大哥不说二哥,都是不友好的。随着计算机硬件的提升,很多开发者开始注意到要牺牲一定的计算器性能来提升友好性,因为计算机发展到现在,第一印象很重要,一个软件设计的不好看,会让大部分人对其产生质疑,所以要在友好性上面下很大功夫进行雕琢。

第二个目标就是安全性:安全性其实贯穿着整个软件行业的发展史,计算机就是为解决人类重复性计算以及数据存储的目的而诞生的,很多行业都需要计算机来进行计算,减少出错几率,并且把数据保留,可以实时查询,所以数据的安全性也很重要。

只要保证数据安全性的前提,开发出符合功能需求的友好界面操作,那么就达到了系统设计的目的。

4.2功能结构设计

本系统主要是基于数据的增加,修改,删除等操作,使用者能够通过提前设定的登录功能进入指定的操作区,这里对使用者设计的功能进行结构展示。

管理员功能结构图的绘制结果见图4-1。管理员登录进入本系统操作的功能包括增删改查装修材料,工程信息,材料分类信息,管理材料订单以及工程订单,管理用户。

图4-1 管理员功能结构图

用户功能结构图的绘制结果见图4-2。用户登录进入本系统操作的功能包括购买装修材料,支付装修材料订单,对工程下单,审核管理员对工程订单提供的报价信息,支付工程订单。

图4-2 用户功能结构图

4.3数据库设计

如果说设计系统的功能很重要,那么设计该系统的数据库将更重要,毕竟系统服务于用户,数据库服务于系统,用户访问系统,操作系统的所有数据都要依赖于数据库,而系统的数据几乎都是保存在数据库中的,所以,一个高质量的程序,必然拥有一个安全,快速响应,稳定可靠的数据库。本系统的MySQL数据库可以通过SQL语言来实现对系统数据的管理,包括在指定表中插入数据,在规定的表中更改数据,以及删除指定表中的部分数据等操作。一般来说,像MySQL这样的关系型数据库,对于结构化查询语言SQL都能很好的进行支持。在编程中,通过合理运用SQL语言便能操作数据库的各种数据,真是非常方便快捷!

4.3.1 数据库概念设计

本节内容主要是使用图形的方式来描述数据库中的实体,每个实体的相应属性,还有实体之间的相互联系,常用的Visio工具即可满足绘制E-R图的需求。E-R图是由矩形,椭圆,菱形等图形元素组成,矩形框中主要写实体的名称,椭圆框中主要是登记该实体的属性,而菱形框中主要是登记实体之间的联系名称,最后使用实心线段把这些图形元素进行连接,即可完成E-R图的绘制。当初步得到一个E-R图时,需要进行检查,使用分析的方式去修改,重构E-R图,以达到消除数据冗余,或者是消除实体间联系冗余的目的。从而保持数据库的完整性,以及降低数据库维护上面的难度。

(1)使用Visio这样的常用的实体属性图绘制工具来绘制用户实体属性图,绘制结果见图4-3。

图4-3 用户实体属性图

(2)使用Visio这样的常用的实体属性图绘制工具来绘制装修材料实体属性图,绘制结果见图4-4。

图4-4 装修材料实体属性图

(3)使用Visio这样的常用的实体属性图绘制工具来绘制管理员实体属性图,绘制结果见图4-5。

图4-5 管理员实体属性图

(4)使用Visio这样的常用的实体属性图绘制工具来绘制工程实体属性图,绘制结果见图4-6。

图4-6 工程实体属性图

(5)绘制的上述实体间存在的联系见图4-7。

图4-7 实体间关系E-R图

4.3.2 数据库物理设计

本系统数据在数据库中都是通过各种二维表进行记录保存的,在数据库中设计这样的二维表也是比较重要的内容,因为它影响着数据的存储效率。在设计二维表也就是关系模型之前,一些有关二维表方面的常用概念需要进行充分了解。

关系:一张具体的数据表即表示关系,关系的名称与数据表的名称保持一致;

元组:数据表中,每行显示的数据即代表元组;

属性:数据表中,每列表示的数据即代表属性;

关键字:数据表中,为了与其他数据表进行区分,则需要在每张表中进行主键的设置;

通过上节内容可以知晓数据库中的各个实体,并通过一定方式把这些实体表示的内容进行数据表的转换,通常来说,每个实体都会对应一张具体的数据表,在本系统指定的数据库中创建命名好的数据库,才可以对数据表进行创建与设计。小工程预算系统数据表设计结果展示如下:

表4-1 材料分类表

字段注释类型
id (主键)主键bigint(20)
addtime创建时间timestamp
cailiaofenlei材料分类varchar(200)

表4-2 订单信息表

字段注释类型
id (主键)主键bigint(20)
addtime创建时间timestamp
dingdanbianhao订单编号varchar(200)
cailiaomingcheng材料名称varchar(200)
cailiaoleixing材料类型varchar(200)
jiage价格float
shuliang数量int(11)
zongjiage总价格float
xiadanshijian下单时间datetime
yonghuming用户名varchar(200)
xingming姓名varchar(200)
shouji手机varchar(200)
dizhi地址varchar(200)
ispay是否支付varchar(200)

表4-3 工程信息评论表

字段注释类型
id (主键)主键bigint(20)
addtime创建时间timestamp
refid关联表idbigint(20)
userid用户idbigint(20)
nickname用户名varchar(200)
content评论内容longtext
reply回复内容longtext

表4-4 装修材料评论表

字段注释类型
id (主键)主键bigint(20)
addtime创建时间timestamp
refid关联表idbigint(20)
userid用户idbigint(20)
nickname用户名varchar(200)
content评论内容longtext
reply回复内容longtext

表4-5 工程订单表

字段注释类型
id (主键)主键bigint(20)
addtime创建时间timestamp
dingdanbianhao订单编号varchar(200)
gongchengmingcheng工程名称varchar(200)
mianji面积varchar(200)
baojia报价float
xiadanshijian下单时间datetime
yonghuming用户名varchar(200)
xingming姓名varchar(200)
shouji手机varchar(200)
sfsh是否审核varchar(200)
shhf审核回复longtext
ispay是否支付varchar(200)

表4-6 工程信息表

字段注释类型
id (主键)主键bigint(20)
addtime创建时间timestamp
gongchengmingcheng工程名称varchar(200)
tupian图片varchar(200)
gongchengmianji工程面积varchar(200)
zhuangxiujiancai装修建材longtext
gongchengjieshao工程介绍longtext

表4-7 公告资讯表

字段注释类型
id (主键)主键bigint(20)
addtime创建时间timestamp
title标题varchar(200)
introduction简介longtext
picture图片varchar(200)
content内容longtext

表4-8 收藏表

字段注释类型
id (主键)主键bigint(20)
addtime创建时间timestamp
userid用户idbigint(20)
refid收藏idbigint(20)
tablename表名varchar(200)
name收藏名称varchar(200)
picture收藏图片varchar(200)
type类型(1:收藏,21:赞,22:踩)varchar(200)
inteltype推荐类型varchar(200)

表4-9 管理员表

字段注释类型
id (主键)主键bigint(20)
username用户名varchar(100)
password密码varchar(100)
role角色varchar(100)
addtime新增时间timestamp

表4-10 用户表

字段注释类型
id (主键)主键bigint(20)
addtime创建时间timestamp
yonghuming用户名varchar(200)
mima密码varchar(200)
xingming姓名varchar(200)
xingbie性别varchar(200)
touxiang头像varchar(200)
youxiang邮箱varchar(200)
shouji手机varchar(200)

表4-11 装修材料表

字段注释类型
id (主键)主键bigint(20)
addtime创建时间timestamp
cailiaobianhao材料编号varchar(200)
cailiaomingcheng材料名称varchar(200)
cailiaofenlei材料分类varchar(200)
tupian图片varchar(200)
jiage价格float
shuliang数量int(11)
danwei单位varchar(200)
cailiaojieshao材料介绍longtext

打开新的 phpMyAdmin 窗口

第五章 系统实现

这里主要是对系统设计实现进行描述,通过系统的设计和数据库的设计,通过编码后变成了可以进行操作的界面,让一切想法变成了结果,通过文字和具体程序操作界面的截图之间的配合,可以把功能更直观的描述起来。

5.1管理员功能实现

5.1.1 装修材料管理

管理员进入如图5-1所示的装修材料管理界面之后,管理员点击信息显示栏中最右侧的修改,查看评论,删除按钮可依次完成装修材料信息的修改,查看用户对装修材料的评论,删除等操作。装修材料信息包括材料名称,价格,数量等信息。

图5-1 装修材料管理界面

5.1.2 订单信息管理

管理员进入如图5-2所示的订单信息管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成订单信息的修改,删除等操作,订单信息是用户购买装修材料产生的信息,其中包括材料名称,下单时间,价格,地址,是否支付等信息。

图5-2 订单信息管理界面

5.1.3 工程信息管理

管理员进入如图5-3所示的工程信息管理界面之后,管理员点击信息显示栏中最右侧的修改,查看评论,删除按钮可依次完成工程信息的修改,查看用户对工程信息提交的评论,删除等操作,工程信息包括工程名称,图片,工程面积,装修建材等信息。

图5-3 工程信息管理界面

5.1.4 工程订单管理

管理员进入如图5-4所示的工程订单管理界面之后,管理员点击信息显示栏中最右侧的查看,修改,删除按钮可依次完成工程订单信息的查看,修改,删除等操作。工程订单是用户对工程下单之后产生的信息,需要用户提交面积信息,然后由管理员对工程进行报价,最后用户审核管理员的报价。

图5-4 工程订单管理界面

5.1.5 材料分类管理

管理员进入如图5-5所示的材料分类管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成材料分类信息的修改,删除等操作。

图5-5 材料分类管理界面

5.2 用户功能实现

5.2.1 装修材料

用户进入如图5-6所示的装修材料界面之后,用户点击购买按钮则可以购买装修材料,用户在装修材料界面下方的评论区域可以参与对装修材料的评论。

图5-6 装修材料界面

5.2.2 工程信息

用户进入如图5-7所示的工程信息界面之后,用户点击下单按钮可以对工程进行下单,下单时需要提交面积信息才可以提交工程订单。

图5-7 工程信息界面

5.2.3 工程下单

用户进入如图5-8所示的工程下单界面之后,用户需要登记面积信息,报价信息是管理员登记的内容,用户不可以填写,最后提交工程订单。

图5-8 工程下单界面

5.2.4 订单信息管理

用户进入如图5-9所示的订单信息管理界面之后,用户购买装修材料之后,需要到后台的订单信息管理界面支付订单。

图5-9 订单信息管理界面

5.2.5 工程订单管理

用户进入如图5-10所示的工程订单管理界面之后,用户对工程下单,管理员就对用户的工程订单进行报价,用户就需要审核管理员的报价,合适的话,用户就可以支付工程订单。

图5-10 工程订单管理界面

GongchengdingdanController.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.transaction.annotation.Transactional;
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.GongchengdingdanEntity;
import com.entity.view.GongchengdingdanView;

import com.service.GongchengdingdanService;
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-04-22 23:08:13
 */
@RestController
@RequestMapping("/gongchengdingdan")
public class GongchengdingdanController {
    @Autowired
    private GongchengdingdanService gongchengdingdanService;



    


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

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

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(GongchengdingdanEntity gongchengdingdan){
        EntityWrapper< GongchengdingdanEntity> ew = new EntityWrapper< GongchengdingdanEntity>();
 		ew.allEq(MPUtil.allEQMapPre( gongchengdingdan, "gongchengdingdan")); 
		GongchengdingdanView gongchengdingdanView =  gongchengdingdanService.selectView(ew);
		return R.ok("查询工程订单成功").put("data", gongchengdingdanView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        GongchengdingdanEntity gongchengdingdan = gongchengdingdanService.selectById(id);
        return R.ok().put("data", gongchengdingdan);
    }

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



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

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

        gongchengdingdanService.insert(gongchengdingdan);
        return R.ok();
    }

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

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        gongchengdingdanService.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<GongchengdingdanEntity> wrapper = new EntityWrapper<GongchengdingdanEntity>();
		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("yonghuming", (String)request.getSession().getAttribute("username"));
		}

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





}

CailiaofenleiServiceImpl.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.CailiaofenleiDao;
import com.entity.CailiaofenleiEntity;
import com.service.CailiaofenleiService;
import com.entity.vo.CailiaofenleiVO;
import com.entity.view.CailiaofenleiView;

@Service("cailiaofenleiService")
public class CailiaofenleiServiceImpl extends ServiceImpl<CailiaofenleiDao, CailiaofenleiEntity> implements CailiaofenleiService {


    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<CailiaofenleiEntity> page = this.selectPage(
                new Query<CailiaofenleiEntity>(params).getPage(),
                new EntityWrapper<CailiaofenleiEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<CailiaofenleiEntity> wrapper) {
		  Page<CailiaofenleiView> page =new Query<CailiaofenleiView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}
    
    @Override
	public List<CailiaofenleiVO> selectListVO(Wrapper<CailiaofenleiEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public CailiaofenleiVO selectVO(Wrapper<CailiaofenleiEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<CailiaofenleiView> selectListView(Wrapper<CailiaofenleiEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public CailiaofenleiView selectView(Wrapper<CailiaofenleiEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}


}

CommonController.java
package com.controller;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
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.annotation.IgnoreAuth;
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import com.baidu.aip.util.Base64Util;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.CommonService;
import com.service.ConfigService;
import com.utils.BaiduUtil;
import com.utils.FileUtil;
import com.utils.R;
/**
 * 通用接口
 */
@RestController
public class CommonController{
	@Autowired
	private CommonService commonService;

    private static AipFace client = null;
    
    @Autowired
    private ConfigService configService;    
	/**
	 * 获取table表中的column列表(联动接口)
	 * @param table
	 * @param column
	 * @return
	 */
	@RequestMapping("/option/{tableName}/{columnName}")
	@IgnoreAuth
	public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,String level,String parent) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		if(StringUtils.isNotBlank(level)) {
			params.put("level", level);
		}
		if(StringUtils.isNotBlank(parent)) {
			params.put("parent", parent);
		}
		List<String> data = commonService.getOption(params);
		return R.ok().put("data", data);
	}
	
	/**
	 * 根据table中的column获取单条记录
	 * @param table
	 * @param column
	 * @return
	 */
	@RequestMapping("/follow/{tableName}/{columnName}")
	@IgnoreAuth
	public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		params.put("columnValue", columnValue);
		Map<String, Object> result = commonService.getFollowByOption(params);
		return R.ok().put("data", result);
	}
	
	/**
	 * 修改table表的sfsh状态
	 * @param table
	 * @param map
	 * @return
	 */
	@RequestMapping("/sh/{tableName}")
	public R sh(@PathVariable("tableName") String tableName, @RequestBody Map<String, Object> map) {
		map.put("table", tableName);
		commonService.sh(map);
		return R.ok();
	}
	
	/**
	 * 获取需要提醒的记录数
	 * @param tableName
	 * @param columnName
	 * @param type 1:数字 2:日期
	 * @param map
	 * @return
	 */
	@RequestMapping("/remind/{tableName}/{columnName}/{type}")
	@IgnoreAuth
	public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("table", tableName);
		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));
			}
		}
		
		int count = commonService.remindCount(map);
		return R.ok().put("count", count);
	}
	
	/**
	 * 单列求和
	 */
	@RequestMapping("/cal/{tableName}/{columnName}")
	@IgnoreAuth
	public R cal(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		Map<String, Object> result = commonService.selectCal(params);
		return R.ok().put("data", result);
	}
	
	/**
	 * 分组统计
	 */
	@RequestMapping("/group/{tableName}/{columnName}")
	@IgnoreAuth
	public R group(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		List<Map<String, Object>> result = commonService.selectGroup(params);
		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/{tableName}/{xColumnName}/{yColumnName}")
	@IgnoreAuth
	public R value(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("xColumn", xColumnName);
		params.put("yColumn", yColumnName);
		List<Map<String, Object>> result = commonService.selectValue(params);
		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);
	}

	/**
 	 * (按值统计)时间统计类型
 	 */
	@IgnoreAuth
	@RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}/{timeStatType}")
	public R valueDay(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("xColumn", xColumnName);
		params.put("yColumn", yColumnName);
		params.put("timeStatType", timeStatType);
		List<Map<String, Object>> result = commonService.selectTimeStatValue(params);
		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);
	}
	
    /**
     * 人脸比对
     * 
     * @param face1 人脸1
     * @param face2 人脸2
     * @return
     */
    @RequestMapping("/matchFace")
    @IgnoreAuth
    public R matchFace(String face1, String face2,HttpServletRequest request) {
        if(client==null) {
            /*String AppID = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "AppID")).getValue();*/
            String APIKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "APIKey")).getValue();
            String SecretKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "SecretKey")).getValue();
            String token = BaiduUtil.getAuth(APIKey, SecretKey);
            if(token==null) {
                return R.error("请在配置管理中正确配置APIKey和SecretKey");
            }
            client = new AipFace(null, APIKey, SecretKey);
            client.setConnectionTimeoutInMillis(2000);
            client.setSocketTimeoutInMillis(60000);
        }
        JSONObject res = null;
        try {
            File file1 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face1);
            File file2 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face2);
            String img1 = Base64Util.encode(FileUtil.FileToByte(file1));
            String img2 = Base64Util.encode(FileUtil.FileToByte(file2));
            MatchRequest req1 = new MatchRequest(img1, "BASE64");
            MatchRequest req2 = new MatchRequest(img2, "BASE64");
            ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();
            requests.add(req1);
            requests.add(req2);
            res = client.match(requests);
            System.out.println(res.get("result"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return R.error("文件不存在");
        } catch (IOException e) {
            e.printStackTrace();
        } 
        return R.ok().put("score", com.alibaba.fastjson.JSONObject.parse(res.getJSONObject("result").get("score").toString()));
    }
}

info.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>

<head>
	<%@ include file="../../static/head.jsp"%>
	<link href="http://www.bootcss.com/p/bootstrap-datetimepicker/bootstrap-datetimepicker/css/datetimepicker.css" rel="stylesheet">
	<script type="text/javascript" charset="utf-8">
	    window.UEDITOR_HOME_URL = "${pageContext.request.contextPath}/resources/ueditor/"; //UEDITOR_HOME_URL、config、all这三个顺序不能改变
	</script>
	<script type="text/javascript" charset="utf-8" src="${pageContext.request.contextPath}/resources/ueditor/ueditor.config.js"></script>
	<script type="text/javascript" charset="utf-8" src="${pageContext.request.contextPath}/resources/ueditor/ueditor.all.min.js"></script>
	<script type="text/javascript" charset="utf-8" src="${pageContext.request.contextPath}/resources/ueditor/lang/zh-cn/zh-cn.js"></script>
</head>
<style>

</style>
<body>
	<!-- Pre Loader -->
	<div class="loading">
		<div class="spinner">
			<div class="double-bounce1"></div>
			<div class="double-bounce2"></div>
		</div>
	</div>
	<!--/Pre Loader -->
	<div class="wrapper">
		<!-- Page Content -->
		<div id="content">
				<!-- Top Navigation -->
				<%@ include file="../../static/topNav.jsp"%>
				<!-- Menu -->
				<div class="container menu-nav">
					<nav class="navbar navbar-expand-lg lochana-bg text-white">
						<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
						 aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
							<span class="ti-menu text-white"></span>
						</button>
				
						<div class="collapse navbar-collapse" id="navbarSupportedContent">
							<!-- <div class="z-navbar-nav-title">$template2.back.menu.title.text</div> -->
							<ul class="navbar-nav mr-auto" id="navUl">
							
							</ul>
						</div>
					</nav>
				</div>
				<!-- /Menu -->
				<!-- Breadcrumb -->
				<!-- Page Title -->
				<div class="container mt-0">
					<div class="row breadcrumb-bar">
						<div class="col-md-6">
							<h3 class="block-title">编辑工程订单</h3>
						</div>
						<div class="col-md-6">
							<ol class="breadcrumb">
								<li class="breadcrumb-item">
									<a href="${pageContext.request.contextPath}/index.jsp">
										<span class="ti-home"></span>
									</a>
								</li>
								<li class="breadcrumb-item"><span>工程订单管理</span></li>
								<li class="breadcrumb-item active"><span>编辑工程订单</span></li>
							</ol>
						</div>
					</div>
				</div>
			<!-- /Page Title -->

			<!-- /Breadcrumb -->
			<!-- Main Content -->
			<div class="container">

				<div class="row">
					<!-- Widget Item -->
					<div class="col-md-12">
						<div class="widget-area-2 lochana-box-shadow">
							<h3 class="widget-title">工程订单信息</h3>
							<form id="addOrUpdateForm">
								<div class="form-row">
									<input id="updateId" name="id" type="hidden">
									<div class="form-group col-md-6">
									<label>订单编号</label>

									<input id="dingdanbianhao" name="dingdanbianhao" class="form-control" v-model="ruleForm.dingdanbianhao" readonly>
									</div>
									<div class="form-group col-md-6">
									<label>工程名称</label>

									<input id="gongchengmingcheng" name="gongchengmingcheng" class="form-control" v-model="ruleForm.gongchengmingcheng" readonly>
									</div>
									<div class="form-group col-md-6">
									<label>面积</label>

									<input id="mianji" name="mianji" class="form-control" v-model="ruleForm.mianji" readonly>
									</div>
									<div class="form-group col-md-6">
									<label>报价</label>

									<input id="baojia" name="baojia" class="form-control" v-model="ruleForm.baojia" readonly>
									</div>
									<div class="form-group col-md-6">
									<label>下单时间</label>

									<input id="xiadanshijian" name="xiadanshijian" class="form-control" v-model="ruleForm.xiadanshijian" readonly>
									</div>
									<div class="form-group col-md-6">
									<label>用户名</label>

									<input id="yonghuming" name="yonghuming" class="form-control" v-model="ruleForm.yonghuming" readonly>
									</div>
									<div class="form-group col-md-6">
									<label>姓名</label>

									<input id="xingming" name="xingming" class="form-control" v-model="ruleForm.xingming" readonly>
									</div>
									<div class="form-group col-md-6">
									<label>手机</label>

									<input id="shouji" name="shouji" class="form-control" v-model="ruleForm.shouji" readonly>
									</div>
									<div class="form-group col-md-6">
									<label>是否审核</label>

									<input id="sfsh" name="sfsh" class="form-control" v-model="ruleForm.sfsh" readonly>
									</div>

									<div class="form-group col-md-6">
									<label>是否支付</label>

									<input id="ispay" name="ispay" class="form-control" v-model="ruleForm.ispay" readonly>
									</div>

									<div class="form-group  col-md-12">
										<label>审核回复</label>
										<script id="shhfEditor" type="text/plain" style="width:800px;height:230px;"></script>
										<script type="text/javascript">
										    //建议使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例
										   //相见文档配置属于你自己的编译器
										 var shhfUe = UE.getEditor('shhfEditor', {
											toolbars: [
													[
														'undo', //撤销
														'bold', //加粗
														'redo', //重做
														'underline', //下划线
														'horizontal', //分隔线
														'inserttitle', //插入标题
														'cleardoc', //清空文档
														'fontfamily', //字体
														'fontsize', //字号
														'paragraph', //段落格式
														'inserttable', //插入表格
														'justifyleft', //居左对齐
														'justifyright', //居右对齐
														'justifycenter', //居中对
														'justifyjustify', //两端对齐
														'forecolor', //字体颜色
														'fullscreen', //全屏
														'edittip ', //编辑提示
														'customstyle', //自定义标题
														 ]
												]
										});
										</script>
										<input type="hidden" name="shhf" id="shhf-input">
									</div>
									<div class="form-group-1 col-md-6 mb-3" style="display: flex;flex-wrap: wrap;">
										<button id="exitBtn" type="button" class="btn btn-primary btn-lg">返回</button>
									</div>
								</div>
							</form>
						</div>
					</div>
					<!-- /Widget Item -->
				</div>
			</div>
			<!-- /Main Content -->
		</div>
		<!-- /Page Content -->
	</div>
	<!-- Back to Top -->
	<a id="back-to-top" href="#" class="back-to-top">
		<span class="ti-angle-up"></span>
	</a>
	<!-- /Back to Top -->
	<%@ include file="../../static/foot.jsp"%>
	<script src="${pageContext.request.contextPath}/resources/js/vue.min.js"></script>
	<script src="${pageContext.request.contextPath}/resources/js/jquery.ui.widget.js"></script>
	<script src="${pageContext.request.contextPath}/resources/js/jquery.form.js"></script>

	<script>
		<%@ include file="../../utils/menu.jsp"%>
		<%@ include file="../../static/setMenu.js"%>
		<%@ include file="../../utils/baseUrl.jsp"%>   	

		var tableName = "gongchengdingdan";
		var pageType = "add-or-update";
		var updateId = "";		

		var ruleForm = {};
		var vm = new Vue({
		  el: '#addOrUpdateForm',
		  data:{
			  ruleForm : {},
			},
		  beforeCreate: function(){
			  var id = window.sessionStorage.getItem("id");
				if(id != null && id != "" && id != "null"){
					$.ajax({ 
		                type: "GET",
		                url: baseUrl + "gongchengdingdan/info/" + id,
		                beforeSend: function(xhr) {xhr.setRequestHeader("token", window.sessionStorage.getItem('token'));},
		                success: function(res){               	
		                	if(res.code == 0){
		                		vm.ruleForm = res.data;
				    		}else if(res.code == 401) {
				    			<%@ include file="../../static/toLogin.jsp"%>    
				    		}else{ alert(res.msg)}
		                },
		            });
				}
			},
			methods: { }
	  	});		

		// 填充富文本框
		function setContent(){
			if(ruleForm.shhf != null && ruleForm.shhf != 'null' && ruleForm.shhf != ''){
				var mes = '' + ruleForm.shhf;
				var shhfUeditor = UE.getEditor('shhfEditor');
				shhfUeditor.ready(function() {
					shhfUeditor.setContent(mes);
					shhfUeditor.setDisabled('fullscreen');
				});
			}
		}  

		// 获取当前详情
		function getDetails() {
			var id = window.sessionStorage.getItem("id");
			if(id != null && id != "" && id != "null"){
				$("#submitBtn").addClass("修改");
				updateId = id;
				window.sessionStorage.removeItem('id');
				$.ajax({ 
	                type: "GET",
	                url: baseUrl + "gongchengdingdan/info/" + id,
	                beforeSend: function(xhr) {xhr.setRequestHeader("token", window.sessionStorage.getItem('token'));},
	                success: function(res){           
	                	if(res.code == 0){
	                		ruleForm = res.data
							showImg();
							setContent();		
							setMediaUrl();	
							setDownloadBtn();
			    		}else if(res.code ==401){
			    			 <%@ include file="../../static/toLogin.jsp"%>	
			    		}else{
							 alert(res.msg);
						}
	                },
	            });
			}else{
				$("#submitBtn").addClass("新增");
			}
		}	

		//图片显示
		function showImg(){
		}		
		function exit(){
			window.sessionStorage.removeItem("id");
			window.location.href = "list.jsp";
		}			
		// 下载
		function download(fileName){
			var url = baseUrl+fileName;
			window.open(url);
		}	
		//设置下载
		function setDownloadBtn(){
		}			
		//设置音视频播放链接
		function setMediaUrl(){
		}	
		//打开新窗口播放媒体
		function mediaPlay(url){
			//var url = baseUrl + "upload/" + fileName;
			window.open(baseUrl+url);
		}		
		$(document).ready(function() { 
			//设置右上角用户名
            $('.dropdown-menu h5').html(window.sessionStorage.getItem('username')+'('+window.sessionStorage.getItem('role')+')')
			//设置项目名
			$('.sidebar-header h3 a').html(projectName)
			setMenu();
			$('#exitBtn').on('click', function(e) {
			    e.preventDefault();
				exit();
			});
			getDetails();
			<%@ include file="../../static/myInfo.js"%>
		});			
		// 用户登出
        <%@ include file="../../static/logout.jsp"%>	
	</script>
</body>

</html>

声明

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值