乡村养老服务管理系统

@TOC

springboot549乡村养老服务管理系统pf

绪论

1.1 研究背景

现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化,也让时间变得更加地宝贵化,因为每天的每分钟,每秒钟这些时间都能让人们处理大批量的日常事务,这些场景,是之前的手工模式无法与之相抗衡的。对于生活照料管理信息的管理来说,传统的通过纸质文档记录信息的方式已经落后了,依靠手工管理生活照料管理信息,不仅花费较长的工作时间,在对记录各种信息的文档进行信息查询以及信息核对操作时,也不能及时保证信息的准确性,基于这样的办公低效率环境下,对于生活照料管理信息的处理就要提出新的解决方案。因为这个时代的信息一直都在高速发展,要是不抱着发展的观念看待事情,极有可能被这个市场快速遗忘,甚至被无情地淘汰掉。所以尽早开发一款乡村养老服务管理系统登录进行信息的快速处理,既跟上了时代的发展脚步,也能让自己的核心竞争力有所提升。

1.2目的和意义

互联网加的时代一方面是加快信息的发展,另一方面也是对传统行业进行筛选,能够继续发展的,肯定是那些能够充分运用互联网技术进行自身升级改革的行业。那些停步不前的行业只能就此结束,进而被大家所遗忘。这次设计出来的乡村养老服务管理系统登录,它不仅能够让管理人员在信息增加,信息的编辑等事务处理上,节省很多的时间,也会砍掉一部分的人工成本,节省不必要开支的资金。另外,此系统的操作界面是可视化的界面,管理人员无需付费培训就能尽快上手。乡村养老服务管理系统登录的开发意义如下:

1、管理人员再也不用在查询信息上花费大量宝贵的时间了,通过信息关键词字段就可以在几秒内获取需要的信息,在各种突发事件面前管理人员也不用慌张,可以从容淡定地处理各种相关信息。

2、该系统在每天的24小时期间都是不会停止服务的,只要有信息操作的需要,管理人员都能使用常用的360浏览器,或者百度浏览器,或者谷歌浏览器,2345浏览器等大众浏览器都能登录系统,然后操作对应的功能。

3、有了这款信息管理类操作软件,所有需要进行处理的数据不用在纸质版本的文档上进行记载,而是基于电脑进行信息录入。

4、生活照料管理方面的信息都是通过网站进行显示,其实质是这些信息都保存在网站对应的数据库里面。只要操作员不去恶意删除信息,那么这些信息将会永久保存。

1.3 论文结构安排

编写乡村养老服务管理系统登录相对应的论文,其实就是对开发完成的程序进行再次解读的过程。本论文从七个方面的内容讲解了开发的程序,具体内容如下:

第一个部分:就是论文的绪论,这个部分就是介绍在什么样的背景下开发的程序,以及这个程序开发出来具有什么意义等内容。

第二个部分:就是介绍开发这个程序使用了什么技术,使用什么数据库保存程序的数据信息,程序开发的语言是使用的什么语言等内容。

第三个部分:就是介绍这个程序开发在现实生活的可行性问题,也讲述了程序开发需要设置什么功能等内容。

第四个部分:就是已经知晓程序的大致功能,需要对程序的功能进行更为严格的细分,也需要出具相应的功能结构图,同时,也要设计程序对应的数据库,包括数据库里面的数据表的设计等内容。

第五个部分:就是在系统的编码阶段,需要使用编程语言完成程序的功能,完成程序的界面设计,最终以界面实现的效果图展示设计成果等内容。

第六个部分:就是程序已经完成了开发的前提之下,需要检测程序的各个模块是否衔接正常,程序各个功能能否在网络等一切外部条件正常的情况下运行,这期间要是出现任何错误都需要及时记录并在后期进行修补完善。

第七个部分:就是论文最后的总结部分,描述遇到的问题,采用的解决思路等内容。

2 相关技术

2.1 B/S架构介绍

在早期的程序开发中,使用得最多的莫过于C/S架构了,现在的生活中软件在生活的各个方面落地,使用了C/S架构开发出来的软件也是不在少数的,比如企业日常办公使用到的微软的OFFICE软件,我国自己研发的文档处理软件WPS,还有娱乐软件腾讯的QQ,腾讯的微信,以及电脑上安装的杀毒软件金山杀毒软件,瑞金杀毒软件等都是C/S架构。但是在Internet网络盛行之后,鉴于大家对数据信息共享的需求,在原来的C/S架构上进行了升级改进之后,有了现在的主流架构B/S架构,B/S架构就是在C/S架构上多了一个浏览器,让原来的直接访问服务器的方式,变成了通过浏览器去访问服务器。充分运用到了当下不断成熟的浏览器技术。也让软件的开发成本以及维护成本降低了。可以说B/S这种新型的架构模式让软件的开发变得便利化。图2.2描述了B/S架构的工作原理。详细见下图。

图2.2 B/S架构的工作原理图

2.2 Mysql数据库介绍

有了程序功能的操作,也需要对程序操作的各个功能所产生的数据信息存放在一个固定的仓库里面,这个所谓的仓库就是大家最熟悉的程序开发需要使用的数据库了,数据库能够发展到至今的模样,其实也是经历了很多的变化历程的,在最开始由于数据信息处理的需要开始推出最低级的数据管理,这个阶段也是数据库早期的人工管理的阶段,后来也经历了文件管理的阶段,这个阶段的数据管理因为信息不能够进行共享,加上管理的数据对配套的程序产生了较强的依赖性,在数据信息管理上也存在很多数据的重复记载造成数据冗余等问题。所以为了解决上述一系列文件管理阶段所产生的数据管理的问题,对数据管理方式进行了全方位的升级改造,也就让数据管理进入了一个全新的阶段——数据库系统的阶段。这个阶段也是数据库管理数据的一个全新的相当高级的阶段。

说到数据库,也不得不说数据库的模型,数据库拥有的数据模型有网状,还有层次,以及关系型这三样数据库模型。网状的结构就是把记录的每条信息都比喻成一个点,点跟点之间也有联系,最终就形成了一个像网一样的结构,就是所谓的网状数据模型。也有对数据记录使用树状结构的方式进行数据保存,这个就是层次数据模型,关系数据库模型运用在现在市面上常见的数据库当中了,像本系统开发使用的MySQL数据库,还有安装过程比较复杂的Sqlserver数据库,也有一些比较小巧的关系型数据库,像Access数据库,FoxPro数据库等数据库。这样的关系型数据库将数据表里面的行还有列进行相互关联形成一个二维矩阵的方式来保存程序所产生的数据信息。

本次之所以选择MySQL数据库来当程序数据存放的仓库,则是因为此数据库安装不用费时,也不需要各种百度信息去解决安装过程中出现的任何问题,而且由于自己的电脑内存比较小,才4个G,为了更好的开发项目程序,针对低配置的电脑选择MySQL数据库也是情理之中。图2.3展示了数据列设计中需要使用的列类型。

图2.3数据列类型图

2.3 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.4就是 Java技术原理图。

图2.4 Java技术原理图

3 系统分析

3.1系统可行性分析

需要使用大部分精力开发的乡村养老服务管理系统登录为了充分降低开发风险,特意在开发之前进行可行性分析这个验证系统开发是否可行的步骤。本文就会从技术角度,经济角度,还有用户使用的程序的运行角度进行综合阐述。

3.1.1 技术可行性分析

开发程序选择的是面向对象的,功能强大的,简单易用的Java程序设计语言,数据库的开发工具使用到了Mysql数据库,由于自己之前接触过一些简单的程序开发方面的设计作品,所以对Myeclipse工具的使用比较熟练,对于数据库的操作技巧也有一定的积累。另外,程序开发需要在自己电脑上安装的软件并不多,在win7操作系统的大环境下,能够完全搭建好程序开发的操作环境,比如Myeclipse工具,Mysql数据库工具,游览器,以及处理程序图片的Photoshop工具等都能安装在自己的电脑上。总的说来,开发这个程序在技术上是可以实现的。

3.1.2 经济可行性分析

开发出来的程序并不是朝着商业程序的方向进行设计开发的,它只是作为一个毕业设计项目进行开发,主要用于检验学生在学校所学知识的一个检验,也锻炼学生运用网络,图书等工具进行自学的能力。所以开发这个程序软件并不会涉及到经济上面的开销,在开发软件的选择上也不会额外付费安装软件,在开发软件的官网上面就可以下载需要的软件,并根据提示的安装步骤安装软件到自己的电脑上面。总的说来,开发这个程序在经济上也不存在经费支出。

3.1.3 运行可行性分析

因为这个程序软件从开始开发到开发截止都是根据用户的需求进行定制,考虑到此程序软件是面向广大普通操作用户,鉴于他们的知识文化水平,特意开发出一个可操作性强的,能够很容易让使用用户上手的,具有可视化操作界面的一个程序软件。总的说来,这个程序站在用户运行程序的角度上分析,是不存在操作难的问题的。用户只要打开程序就可以免去专人培训进行程序功能操作。

经过上面从技术的角度,从经济的角度,从程序运行的角度这三个角度分析现打算开发的程序,可以得出该程序软件是可以进行开发操作的。

3.2系统性能分析

3.2.1 系统安全性

程序在使用中是不允许其他访问者随意窃取程序里面的隐秘信息,也不允许其他操作者越权操作其他管理用户操作的功能,要真正杜绝这些现象就必须在程序开发之前把程序的安全性给考虑进去。

比如现在很多程序都会把用户注册的功能给考虑进去,让用户在注册页面功能区填写自己的个人信息,这些数据信息涵盖了用户本人的姓名,用户对程序登录设置的密码,用户经常使用的邮箱,用户的常用联系方式还有用户的所住地址等信息,这些信息都是设计到用户本人的隐私,那么这些信息在传输给程序后台时,是需要进行管理并保存至对应的数据库文件里面。要是有人恶意窃取程序的数据信息,也就会让那些注册了此程序软件的用户的个人隐秘信息都会遭到泄露。这些信息落入其他不法分子手里,他们极有可能根据用户的隐私信息去骚扰用户,并把这些信息用于各种商业用途谋取其他非法的利益。所以数据安全性是一个系统能不能使用的首要标准。

3.2.2 数据完整性

数据完整性是确保数据信息是否具有可靠性,是否具有参考价值的一个重要因素,数据信息只描述一部分,或者必有的数据信息反而为空等现象都是代表着这个数据信息不完整,有数据缺陷,这是个很严肃的问题,因为这样的数据信息跟垃圾信息没什么两样。

说到数据完整性,不得不提最常用的程序表单功能。这些表单主要就是提取广大用户的数据信息的,需要广大用户根据表单上的要求,填写自己的姓名信息,以及自己的联系方式信息,有些也会有额外的信息填写要求,有必须要填的选项,也有不需要必填的选项。假如广大用户为了保护自己的隐私,或者不想受到其他人的骚扰,不填写必填项等信息,广大用户在最后提交此表单的时候,往往都是提交不了的。

数据完整性不仅仅限于登记的数据要完整,它也需要程序里面的所有数据信息之间存在关联,而且这种联系也是要求不能出差错的。

由于数据表之间也会存在一定的联系,所以同一个数据也会出现在另一个表格里面,那么这两个表格记录的同一个数据应该是一样的。不能够是同样的数据信息在不同表中不一样。

3.2.3系统可扩展性

一切事物都是一直在发展,程序员开发软件也需要带着发展的思维去进行软件开发操作,这样的话,开发出来的程序在应对管理所需时,也会相对应的进行程序升级与更新。不论是功能完善还是数据库升级都能在原来的基础上对原有程序进行迭代升级。让开发出来的程序能够走得越来越远。这也是广大用户对程序软件的使用要求。

3.3系统流程分析

管理员假如要操作系统提供的功能,那么管理员就要在系统的登录界面,填写管理员登录的账号信息,填写相应的密码信息,管理员需要保证这两者能够验证身份的账号以及密码信息的正确性,这样管理员就可以通过登录界面进入系统后台操作界面。图3.1就是开发的程序软件乡村养老服务管理系统登录它的操作流程图。

图3.1 系统操作流程图

3.3.1系统登录流程

乡村养老服务管理系统登录的登录流程,针对的角色就是操作员的操作角色。在登录界面需要的必填信息就是账号信息,配上登录的密码信息就能登录乡村养老服务管理系统登录,需要注意的就是必填的账号信息和登录密码信息,都需要进行验证,系统会判断账号还有填写的密码信息的正确性,只有这两者信息都正确了,就能成功登录乡村养老服务管理系统登录了。系统登录流程图如下图。

图3.2 系统登录流程图

3.3.2信息添加流程

用户在添加信息的界面填写的任何数据信息也是需要验证的,系统会判断用户填写信息的格式还有数据信息是不是合法信息,如果用户填写的信息是合法内容,系统就会在数据库对应的数据表里面添加信息。添加信息流程如下图。

图3.3 添加信息流程图

3.3.3信息删除流程

对于那些已经失效的信息,需要用户及时进行删除,这样有利于腾出空间存放其他信息。删除信息也是先从数据库对应数据表里面删除数据,接着就是更新数据表的信息。这样删除的数据,在用户操作界面就查看不到了。信息删除流程如下图所示。

图3.4 信息删除流程图

3.4系统功能分析

乡村养老服务管理系统登录具有管理员角色,用户角色,这几个操作权限。

乡村养老服务管理系统登录针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理生活照料管理信息,管理医疗信息等内容。

乡村养老服务管理系统登录针对用户设置的功能有:查看并修改个人信息,查看生活照料管理信息,查看医疗信息等内容。

4 系统设计

4.1系统概要设计

乡村养老服务管理系统登录并没有使用C/S结构,而是基于网络浏览器的方式去访问服务器,进而获取需要的数据信息,这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的B/S结构,图4.1就是开发出来的程序工作原理图。

图4.1 程序工作的原理图

4.2系统功能结构设计

乡村养老服务管理系统登录针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理生活照料管理信息,管理医疗信息等内容。

乡村养老服务管理系统登录针对用户设置的功能有:查看并修改个人信息,查看生活照料管理信息,查看医疗信息等内容。

4.3数据库设计

结构设计图

4.3.1数据库E-R图设计

程序设计是离不开对应数据库的设计操作的,这样的做法就是减少数据对程序的依赖性,所以数据库的设计也是需要花费大量的日常时间来进行设计的,在设计中对程序开发需要存储的数据信息进行实体划分,先确认实体,然后设计实体的属性等操作,这种设计就是数据库设计里面不能少的必须有的E-R模型设计。为了降低程序设计的对应的数据库设计难度,开发人员也可以使用相应的工具来进行E-R模型设计,现在市面上设计E-R模型的工具有PowerDesigner建模工具,Navicat制作工具,还有微软的Visio绘图工具。为了简便起见,本程序在设计E-R模型的时候,就选用了微软的Visio这款功能强大,操作便利的绘图工具。

(1)下图是生活照料订单实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\生活照料订单.jpg 生活照料订单实体属性图

(2)下图是医疗人员实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\医疗人员.jpg 医疗人员实体属性图

(3)下图是乡村志愿者实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\乡村志愿者.jpg 乡村志愿者实体属性图

(4)下图是健康档案实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\健康档案.jpg 健康档案实体属性图

(5)下图是生活照料实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\生活照料.jpg 生活照料实体属性图

(6)下图是文娱活动实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\文娱活动.jpg 文娱活动实体属性图

(7)下图是老人实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\老人.jpg 老人实体属性图

(8)下图是土地承包实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\土地承包.jpg 土地承包实体属性图

(9)下图是土地实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\土地.jpg 土地实体属性图

(10)下图是活动报名实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\活动报名.jpg 活动报名实体属性图

(11)下图是医疗保健实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\医疗保健.jpg 医疗保健实体属性图

4.3.2 数据库表结构设计

本次程序开发选用的数据库管理工具是Mysql数据管理工具,使用它存放数据也需要创建程序对应的数据库文件,并命名刚创建的数据库文件,有了数据库也需要创建各种数据表来充实数据库,在数据表的创建中,不仅需要对数据表命名,也需要对数据表的字段进行设计,包括每个数据表里面需要设置的字段名称,字段对应的数据类型信息,字段的主键设置这个也是不可缺少的,因为每个数据表里面的主键就是标记着这个数据表跟其他数据表相区分的唯一标志。就相当于生活中的每个人都有姓名,但是上网搜索自己的名字,会发现全国上下有很多人的名字跟自己的名字一模一样,包括姓氏以及名字,区分每个人的唯一信息就是每个人的身份证号信息,主键在数据表里面也是起着这样的重要作用。下面就介绍本次开发的程序乡村养老服务管理系统登录的数据表结构信息。

表4.1医疗保健表

序号列名数据类型说明允许空
1IdIntid
2yiliao_idInteger医疗人员
3laoren_idInteger老人
4baojian_nameString医疗保健名称
5baojian_uuid_numberString医疗保健编号
6baojian_photoString医疗保健照片
7baojian_addressString医疗保健地点
8baojian_typesInteger医疗保健类型
9baojian_contentString注意事项
10baojian_deleteInteger逻辑删除
11insert_timeDate录入时间
12create_timeDate创建时间

表4.2字典表

序号列名数据类型说明允许空
1IdIntid
2dic_codeString字段
3dic_nameString字段名
4code_indexInteger编码
5index_nameString编码名字
6super_idInteger父字段id
7beizhuString备注
8create_timeDate创建时间

表4.3文娱活动表

序号列名数据类型说明允许空
1IdIntid
2huodong_nameString文娱活动名称
3huodong_uuid_numberString文娱活动编号
4huodong_photoString文娱活动照片
5huodong_addressString文娱活动地点
6huodong_typesInteger文娱活动类型
7huodong_contentString文娱活动结束
8huodong_deleteInteger逻辑删除
9insert_timeDate录入时间
10create_timeDate创建时间

表4.4活动报名表

序号列名数据类型说明允许空
1IdIntid
2huodong_yuyue_uuid_numberString报名编号
3huodong_idInteger活动
4laoren_idInteger老人
5huodong_yuyue_textString报名理由
6huodong_yuyue_yesno_typesInteger报名状态
7huodong_yuyue_yesno_textString审核回复
8huodong_yuyue_shenhe_timeDate审核时间
9insert_timeDate活动报名时间
10create_timeDate创建时间

表4.5健康档案表

序号列名数据类型说明允许空
1IdIntid
2yiliao_idInteger医疗人员
3laoren_idInteger老人
4jiankang_nameString健康档案名称
5jiankang_uuid_numberString健康档案编号
6jiankang_photoString健康档案照片
7jiankang_addressString健康档案地点
8jiankang_typesInteger身体情况
9jiankang_contentString注意事项
10jiankang_deleteInteger逻辑删除
11insert_timeDate录入时间
12create_timeDate创建时间

表4.6老人表

序号列名数据类型说明允许空
1IdIntid
2laoren_nameString老人名称
3laoren_phoneString联系方式
4laoren_emailString邮箱
5new_moneyBigDecimal余额
6laoren_contentString老人介绍
7laoren_deleteInteger逻辑删除
8create_timeDate创建时间

表4.7生活照料表

序号列名数据类型说明允许空
1IdIntid
2laoren_idInteger老人
3shenghuo_nameString生活照料名称
4shenghuo_uuid_numberString生活照料编号
5shenghuo_photoString生活照料照片
6shenghuo_addressString生活照料地点
7shenghuo_typesInteger生活照料类型
8shenghuo_contentString生活照料介绍
9shenghuo_deleteInteger逻辑删除
10insert_timeDate录入时间
11create_timeDate创建时间

表4.8生活照料订单表

序号列名数据类型说明允许空
1IdIntid
2shenghuo_order_uuid_numberString订单编号
3shenghuo_idInteger生活照料
4yonghu_idInteger用户
5shenghuo_order_typesInteger订单类型
6insert_timeDate订单创建时间
7create_timeDate创建时间

表4.9土地表

序号列名数据类型说明允许空
1IdIntid
2laoren_idInteger商家
3tudi_nameString土地名称
4tudi_uuid_numberString土地编号
5tudi_photoString土地照片
6tudi_addressString土地地点
7tudi_typesInteger土地类型
8tudi_kucun_numberInteger多少亩
9tudi_new_moneyBigDecimal价格/年
10tudi_contentString土地介绍
11tudi_deleteInteger逻辑删除
12insert_timeDate录入时间
13create_timeDate创建时间

表4.10土地承包表

序号列名数据类型说明允许空
1IdIntid
2tudi_order_uuid_numberString订单编号
3tudi_idInteger土地
4yonghu_idInteger用户
5buy_numberInteger
6tudi_order_typesInteger订单类型
7insert_timeDate订单创建时间
8create_timeDate创建时间

表4.11医疗人员表

序号列名数据类型说明允许空
1IdIntid
2yiliao_nameString医疗人员名称
3yiliao_phoneString联系方式
4yiliao_emailString邮箱
5yiliao_contentString医疗人员介绍
6yiliao_deleteInteger逻辑删除
7create_timeDate创建时间

表4.12乡村志愿者表

序号列名数据类型说明允许空
1IdIntid
2yonghu_nameString志愿者姓名
3yonghu_phoneString志愿者手机号
4yonghu_id_numberString志愿者身份证号
5yonghu_photoString志愿者头像
6new_moneyBigDecimal余额
7yonghu_emailString志愿者邮箱
8create_timeDate创建时间

表4.13管理员表

序号列名数据类型说明允许空
1IdIntid
2usernameString儿童名
3passwordString密码
4roleString角色
5addtimeDate新增时间

5 系统实现

5.1管理员功能介绍

5.1.1管理员登录

系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。下图就是管理员登录页面。

图5.1 管理员登录页面

5.1.2 生活照料管理管理

项目管理页面提供的功能操作有:查看生活照料管理,删除生活照料管理操作,新增生活照料管理操作,修改生活照料管理操作。下图就是生活照料管理管理页面。

图5.2 生活照料管理管理页面

5.1.3 医疗信息管理

医疗信息管理页面提供的功能操作有:新增医疗,修改医疗,删除医疗操作。下图就是医疗信息管理页面。

图5.3 医疗信息管理页面

5.1.4医疗类型管理

医疗类型管理页面显示所有医疗类型,在此页面既可以让管理员添加新的医疗信息类型,也能对已有的医疗类型信息执行编辑更新,失效的医疗类型信息也能让管理员快速删除。下图就是医疗类型管理页面。

图5.4 医疗类型列表页面

系统

TudiController.java

package com.controller;import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;/*** 土地* 后端接口* @author* @email
*/
@RestController
@Controller
@RequestMapping("/tudi")
public class TudiController {private static final Logger logger = LoggerFactory.getLogger(TudiController.class);private static final String TABLE_NAME = "tudi";@Autowiredprivate TudiService tudiService;@Autowiredprivate TokenService tokenService;@Autowiredprivate BaojianService baojianService;//医疗保健@Autowiredprivate DictionaryService dictionaryService;//字典@Autowiredprivate HuodongService huodongService;//文娱活动@Autowiredprivate HuodongYuyueService huodongYuyueService;//活动报名@Autowiredprivate JiankangService jiankangService;//健康档案@Autowiredprivate LaorenService laorenService;//老人@Autowiredprivate ShenghuoService shenghuoService;//生活照料@Autowiredprivate ShenghuoOrderService shenghuoOrderService;//生活照料订单@Autowiredprivate TudiOrderService tudiOrderService;//土地承包@Autowiredprivate YiliaoService yiliaoService;//医疗人员@Autowiredprivate YonghuService yonghuService;//乡村志愿者@Autowiredprivate UsersService usersService;//管理员/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永不会进入");else if("乡村志愿者".equals(role))params.put("yonghuId",request.getSession().getAttribute("userId"));else if("老人".equals(role))params.put("laorenId",request.getSession().getAttribute("userId"));else if("医疗人员".equals(role))params.put("yiliaoId",request.getSession().getAttribute("userId"));params.put("tudiDeleteStart",1);params.put("tudiDeleteEnd",1);CommonUtil.checkMap(params);PageUtils page = tudiService.queryPage(params);//字典表数据转换List<TudiView> list =(List<TudiView>)page.getList();for(TudiView c:list){//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put("data", page);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id, HttpServletRequest request){logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);TudiEntity tudi = tudiService.selectById(id);if(tudi !=null){//entity转viewTudiView view = new TudiView();BeanUtils.copyProperties( tudi , view );//把实体数据重构到view中//级联表 老人//级联表LaorenEntity laoren = laorenService.selectById(tudi.getLaorenId());if(laoren != null){BeanUtils.copyProperties( laoren , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "laorenId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表view.setLaorenId(laoren.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody TudiEntity tudi, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,tudi:{}",this.getClass().getName(),tudi.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");else if("老人".equals(role))tudi.setLaorenId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));Wrapper<TudiEntity> queryWrapper = new EntityWrapper<TudiEntity>().eq("laoren_id", tudi.getLaorenId()).eq("tudi_name", tudi.getTudiName()).eq("tudi_address", tudi.getTudiAddress()).eq("tudi_types", tudi.getTudiTypes()).eq("tudi_kucun_number", tudi.getTudiKucunNumber()).eq("tudi_delete", 1);logger.info("sql语句:"+queryWrapper.getSqlSegment());TudiEntity tudiEntity = tudiService.selectOne(queryWrapper);if(tudiEntity==null){tudi.setTudiDelete(1);tudi.setInsertTime(new Date());tudi.setCreateTime(new Date());tudiService.insert(tudi);return R.ok();}else {return R.error(511,"表中有相同数据");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody TudiEntity tudi, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug("update方法:,,Controller:{},,tudi:{}",this.getClass().getName(),tudi.toString());TudiEntity oldTudiEntity = tudiService.selectById(tudi.getId());//查询原先数据String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("老人".equals(role))
//            tudi.setLaorenId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));if("".equals(tudi.getTudiPhoto()) || "null".equals(tudi.getTudiPhoto())){tudi.setTudiPhoto(null);}tudiService.updateById(tudi);//根据id更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids, HttpServletRequest request){logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());List<TudiEntity> oldTudiList =tudiService.selectBatchIds(Arrays.asList(ids));//要删除的数据ArrayList<TudiEntity> list = new ArrayList<>();for(Integer id:ids){TudiEntity tudiEntity = new TudiEntity();tudiEntity.setId(id);tudiEntity.setTudiDelete(2);list.add(tudiEntity);}if(list != null && list.size() >0){tudiService.updateBatchById(list);}return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save( String fileName, HttpServletRequest request){logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {List<TudiEntity> tudiList = new ArrayList<>();//上传的东西Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段Date date = new Date();int lastIndexOf = fileName.lastIndexOf(".");if(lastIndexOf == -1){return R.error(511,"该文件没有后缀");}else{String suffix = fileName.substring(lastIndexOf);if(!".xls".equals(suffix)){return R.error(511,"只支持后缀为xls的excel文件");}else{URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径File file = new File(resource.getFile());if(!file.exists()){return R.error(511,"找不到上传文件,请联系管理员");}else{List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行,因为第一行是提示for(List<String> data:dataList){//循环TudiEntity tudiEntity = new TudiEntity();
//                            tudiEntity.setLaorenId(Integer.valueOf(data.get(0)));   //商家 要改的
//                            tudiEntity.setTudiName(data.get(0));                    //土地名称 要改的
//                            tudiEntity.setTudiUuidNumber(data.get(0));                    //土地编号 要改的
//                            tudiEntity.setTudiPhoto("");//详情和图片
//                            tudiEntity.setTudiAddress(data.get(0));                    //土地地点 要改的
//                            tudiEntity.setTudiTypes(Integer.valueOf(data.get(0)));   //土地类型 要改的
//                            tudiEntity.setTudiKucunNumber(Integer.valueOf(data.get(0)));   //多少亩 要改的
//                            tudiEntity.setTudiNewMoney(data.get(0));                    //价格/年 要改的
//                            tudiEntity.setTudiContent("");//详情和图片
//                            tudiEntity.setTudiDelete(1);//逻辑删除字段
//                            tudiEntity.setInsertTime(date);//时间
//                            tudiEntity.setCreateTime(date);//时间tudiList.add(tudiEntity);//把要查询是否重复的字段放入map中//土地编号if(seachFields.containsKey("tudiUuidNumber")){List<String> tudiUuidNumber = seachFields.get("tudiUuidNumber");tudiUuidNumber.add(data.get(0));//要改的}else{List<String> tudiUuidNumber = new ArrayList<>();tudiUuidNumber.add(data.get(0));//要改的seachFields.put("tudiUuidNumber",tudiUuidNumber);}}//查询是否重复//土地编号List<TudiEntity> tudiEntities_tudiUuidNumber = tudiService.selectList(new EntityWrapper<TudiEntity>().in("tudi_uuid_number", seachFields.get("tudiUuidNumber")).eq("tudi_delete", 1));if(tudiEntities_tudiUuidNumber.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(TudiEntity s:tudiEntities_tudiUuidNumber){repeatFields.add(s.getTudiUuidNumber());}return R.error(511,"数据库的该表中的 [土地编号] 字段已经存在 存在数据为:"+repeatFields.toString());}tudiService.insertBatch(tudiList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,"批量插入数据异常,请联系管理员");}}/*** 个性推荐*/@IgnoreAuth@RequestMapping("/gexingtuijian")public R gexingtuijian(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("gexingtuijian方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));CommonUtil.checkMap(params);List<TudiView> returnTudiViewList = new ArrayList<>();//查询订单Map<String, Object> params1 = new HashMap<>(params);params1.put("sort","id");params1.put("yonghuId",request.getSession().getAttribute("userId"));PageUtils pageUtils = tudiOrderService.queryPage(params1);List<TudiOrderView> orderViewsList =(List<TudiOrderView>)pageUtils.getList();Map<Integer,Integer> typeMap=new HashMap<>();//购买的类型listfor(TudiOrderView orderView:orderViewsList){Integer tudiTypes = orderView.getTudiTypes();if(typeMap.containsKey(tudiTypes)){typeMap.put(tudiTypes,typeMap.get(tudiTypes)+1);}else{typeMap.put(tudiTypes,1);}}List<Integer> typeList = new ArrayList<>();//排序后的有序的类型 按最多到最少typeMap.entrySet().stream().sorted((o1, o2) -> o2.getValue() - o1.getValue()).forEach(e -> typeList.add(e.getKey()));//排序Integer limit = Integer.valueOf(String.valueOf(params.get("limit")));for(Integer type:typeList){Map<String, Object> params2 = new HashMap<>(params);params2.put("tudiTypes",type);PageUtils pageUtils1 = tudiService.queryPage(params2);List<TudiView> tudiViewList =(List<TudiView>)pageUtils1.getList();returnTudiViewList.addAll(tudiViewList);if(returnTudiViewList.size()>= limit) break;//返回的推荐数量大于要的数量 跳出循环}//正常查询出来商品,用于补全推荐缺少的数据PageUtils page = tudiService.queryPage(params);if(returnTudiViewList.size()<limit){//返回数量还是小于要求数量int toAddNum = limit - returnTudiViewList.size();//要添加的数量List<TudiView> tudiViewList =(List<TudiView>)page.getList();for(TudiView tudiView:tudiViewList){Boolean addFlag = true;for(TudiView returnTudiView:returnTudiViewList){if(returnTudiView.getId().intValue() ==tudiView.getId().intValue()) addFlag=false;//返回的数据中已存在此商品}if(addFlag){toAddNum=toAddNum-1;returnTudiViewList.add(tudiView);if(toAddNum==0) break;//够数量了}}}else {returnTudiViewList = returnTudiViewList.subList(0, limit);}for(TudiView c:returnTudiViewList)dictionaryService.dictionaryConvert(c, request);page.setList(returnTudiViewList);return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));CommonUtil.checkMap(params);PageUtils page = tudiService.queryPage(params);//字典表数据转换List<TudiView> list =(List<TudiView>)page.getList();for(TudiView c:list)dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段return R.ok().put("data", page);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id, HttpServletRequest request){logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);TudiEntity tudi = tudiService.selectById(id);if(tudi !=null){//entity转viewTudiView view = new TudiView();BeanUtils.copyProperties( tudi , view );//把实体数据重构到view中//级联表LaorenEntity laoren = laorenService.selectById(tudi.getLaorenId());if(laoren != null){BeanUtils.copyProperties( laoren , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段view.setLaorenId(laoren.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody TudiEntity tudi, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,tudi:{}",this.getClass().getName(),tudi.toString());Wrapper<TudiEntity> queryWrapper = new EntityWrapper<TudiEntity>().eq("laoren_id", tudi.getLaorenId()).eq("tudi_name", tudi.getTudiName()).eq("tudi_uuid_number", tudi.getTudiUuidNumber()).eq("tudi_address", tudi.getTudiAddress()).eq("tudi_types", tudi.getTudiTypes()).eq("tudi_kucun_number", tudi.getTudiKucunNumber()).eq("tudi_delete", tudi.getTudiDelete())
//            .notIn("tudi_types", new Integer[]{102});logger.info("sql语句:"+queryWrapper.getSqlSegment());TudiEntity tudiEntity = tudiService.selectOne(queryWrapper);if(tudiEntity==null){tudi.setTudiDelete(1);tudi.setInsertTime(new Date());tudi.setCreateTime(new Date());tudiService.insert(tudi);return R.ok();}else {return R.error(511,"表中有相同数据");}}}
BaiduUtil.java
package com.utils;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.json.JSONObject;/**
* @author yangliyuan
* @version 创建时间:2020年2月7日 下午9:37:05
* 类说明 : 
*/public class BaiduUtil {/*** 根据经纬度获得省市区信息* @param lon 纬度* @param lat 经度* @param coordtype 经纬度坐标系* @return*/public static Map<String, String> getCityByLonLat(String key, String lng, String lat) {String location = lat + "," + lng;try {//拼装urlString url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak="+key+"&output=json&coordtype=wgs84ll&location="+location;String result = HttpClientUtils.doGet(url);JSONObject o = new JSONObject(result);Map<String, String> area = new HashMap<>();area.put("province", o.getJSONObject("result").getJSONObject("addressComponent").getString("province"));area.put("city", o.getJSONObject("result").getJSONObject("addressComponent").getString("city"));area.put("district", o.getJSONObject("result").getJSONObject("addressComponent").getString("district"));area.put("street", o.getJSONObject("result").getJSONObject("addressComponent").getString("street"));return area;}catch (Exception e) {e.printStackTrace();}return null;}/*** 获取API访问token* 该token有一定的有效期,需要自行管理,当失效时需重新获取.* @param ak - 百度云官网获取的 API Key* @param sk - 百度云官网获取的 Securet Key* @return assess_token*/public static String getAuth(String ak, String sk) {// 获取token地址String authHost = "https://aip.baidubce.com/oauth/2.0/token?";String getAccessTokenUrl = authHost// 1. grant_type为固定参数+ "grant_type=client_credentials"// 2. 官网获取的 API Key+ "&client_id=" + ak// 3. 官网获取的 Secret Key+ "&client_secret=" + sk;try {URL realUrl = new URL(getAccessTokenUrl);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();connection.setRequestMethod("GET");connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : map.keySet()) {System.err.println(key + "--->" + map.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String result = "";String line;while ((line = in.readLine()) != null) {result += line;}/*** 返回结果示例*/System.err.println("result:" + result);org.json.JSONObject jsonObject = new org.json.JSONObject(result);String access_token = jsonObject.getString("access_token");return access_token;} catch (Exception e) {System.err.printf("获取token失败!");e.printStackTrace(System.err);}return null;}}
YiliaoServiceImpl.java
package com.service.impl;import com.utils.StringUtil;
import com.service.DictionaryService;
import com.utils.ClazzDiff;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import com.dao.YiliaoDao;
import com.entity.YiliaoEntity;
import com.service.YiliaoService;
import com.entity.view.YiliaoView;/*** 医疗人员 服务实现类*/
@Service("yiliaoService")
@Transactional
public class YiliaoServiceImpl extends ServiceImpl<YiliaoDao, YiliaoEntity> implements YiliaoService {@Overridepublic PageUtils queryPage(Map<String,Object> params) {Page<YiliaoView> page =new Query<YiliaoView>(params).getPage();page.setRecords(baseMapper.selectListView(page,params));return new PageUtils(page);}}
validate.js
/*** 邮箱* @param {*} s*/
export function isEmail (s) {return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
}/*** 手机号码* @param {*} s*/
export function isMobile (s) {return /^1[0-9]{10}$/.test(s)
}/*** 电话号码* @param {*} s*/
export function isPhone (s) {return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
}/*** URL地址* @param {*} s*/
export function isURL (s) {return /^http[s]?:\/\/.*/.test(s)
}/*** 匹配数字,可以是小数,不可以是负数,可以为空* @param {*} s */
export function isNumber(s){return  /(^-?[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?$)|(^$)/.test(s);
}
/*** 匹配整数,可以为空* @param {*} s */
export function isIntNumer(s){return  /(^-?\d+$)|(^$)/.test(s);
}
/*** 身份证校验*/
export function checkIdCard(idcard) {const regIdCard = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;if (!regIdCard.test(idcard)) {return false;} else {return true;}
}

声明

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405966.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读33】Deep learning optoacoustic tomography with sparse data

Deep learning optoacoustic tomography with sparse data 论文题目:基于稀疏数据的深度学习光声断层扫描 论文链接:Deep learning optoacoustic tomography with sparse data | Nature Machine Intelligence 代码链接:GitHub - ndavoudi/sparse_artefact_unet 数据链接…

「C++系列」vector 容器

文章目录 一、vector 容器1. 基本特性2. 基本操作3. 注意事项 二、应用场景1. 应用场景2. 案例案例一&#xff1a;存储动态大小的数据集合案例二&#xff1a;实现栈 三、相关链接 一、vector 容器 C 中的 vector 是一个非常常用的容器&#xff08;container&#xff09;&#…

comfyUI工作流-Flux大模型应用/黑神话悟空角色生成(附lora)

​ 是什么让悟空开始搬砖&#xff0c;这莫不是新的副本 其实我们用AI就能生成这种黑神话悟空的衍生图片 让悟空做ceo&#xff0c;做老师&#xff0c;上工地搬砖 七十二变&#xff0c;体验人生百态 操作很简单&#xff0c;只需要一个comfyUI工作流&#xff0c;你就能任意生成…

嵌入式day31

mplayer项目问题分析&#xff1a; 知识短时间内可以获取到 能力的提升一定需要练习 IPC 进程间通信方式 共享内存 //最高效的进程间通信方式 共享内存&#xff1a; 1.是一块 内核预留的空间 2.最高效的通信方式 //避免了用户空间到内核空间的数据拷贝 操作&#xff1a; …

<数据集>航拍牧场牛羊识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1021张 标注数量(xml文件个数)&#xff1a;1021 标注数量(txt文件个数)&#xff1a;1021 标注类别数&#xff1a;3 标注类别名称&#xff1a;[cattle, cow, sheep] 序号类别名称图片数框数1cattle29741282cow6740…

Zookeeper服务注册及心跳机制详解

ZooKeeper提供了一种类似于文件目录的结构来保存key值&#xff0c;其提供了四种key类型&#xff0c;分别是持久节点&#xff0c;临时节点&#xff0c;持久有序节点&#xff0c;临时有序节点。其中临时节点的特性是当创建此节点的会话断开时&#xff0c;节点也会被删除。这一特性…

Hive SQL语言

目录 Hive SQL之数据库与建库 create database :创建数据库 use database :选择特定的数据库 drop database :删除数据库 Hive SQL之表与建表 create table : 创建表 分隔符指定语法 Hive SQL-DML-Load加载数据 Load语法功能 语法规则之filepath 语法规则之LOCAL …

区块链变革:Web3时代的数字化前沿

随着科技的飞速发展&#xff0c;数字化正在深刻影响着我们生活的方方面面。区块链技术作为一种新兴的去中心化技术&#xff0c;正成为推动这一变革的重要力量。特别是在Web3时代&#xff0c;区块链的作用不仅仅局限于加密货币&#xff0c;而是延伸到了各个领域&#xff0c;成为…

VMware虚拟机nat无法联通主机

VMware在nat模式下主机无法ping通虚拟机 原因&#xff1a; 虚拟机和对应的网卡不在一个网段 虚拟机开启了防火墙 解决方法: 首先判断虚拟机的网络ip是否和网卡在一个网段上 判断虚拟机使用的网卡 nat模式在VMware虚拟机中一般只有一个对应的网卡 如图笔者的nat网卡为VM…

【机器学习】全景指南:从基础概念到实战流程的全面解析

文章目录 1.引言1.1机器学习的重要性1.2机器学习的应用范围1.3本文的内容结构 2. 机器学习的基本概念与分类2.1 机器学习的定义2.2 机器学习的分类 4. 强化学习&#xff08;Reinforcement Learning&#xff09; 3. 机器学习的工作流程3.1 数据收集与准备1. 数据源与类型2. 数据…

26.删除有序数组中的重复项---力扣

题目链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-duplicates-from-sorted-array/descript…

STM32新建项目

一、学习背景 需要做一个机械臂项目&#xff0c;打算用STM32做微控制器&#xff0c;所以需要学习STM32的相关应用&#xff0c;再将其应用到机械臂上。 二、相关硬件与软件 硬件&#xff1a;STM32F103&#xff1b;显示屏&#xff1b;stlink&#xff1b;传感器模块&#xff1b…

深入理解 C# 中的 dynamic 类型详解与示例

文章目录 1. 什么是 dynamic 类型&#xff1f;2. dynamic 的工作原理3. dynamic 类型的使用4. 使用 dynamic 的场景5. dynamic 的优缺点6. dynamic 类型的注意事项7. 总结 在 C# 编程中&#xff0c;dynamic 类型是一个非常特殊的类型&#xff0c;它在编译时并不会进行类型检查&…

SOL项目开发代币DApp的基本要求、模式创建与海外宣发策略

Solana&#xff08;SOL&#xff09;作为一个高性能区块链平台&#xff0c;以其快速的交易速度和低交易成本吸引了大量开发者和投资者。基于Solana开发的去中心化应用程序&#xff08;DApp&#xff09;和代币项目正逐步成为区块链领域的重要组成部分。要成功开发并推广一个SOL项…

VM相关配置及docker

NAT——VMnet8网卡 桥接——WLAN/网线 仅主机——VMnet1网卡 docker与虚拟机的区别 启动docker服务 systemctl start docker 重启 systemctl start docker关闭docker服务 systemctl stop docker.servicedocker的两大概念 镜像&#xff1a;images&#xff0c;应用程序的静态文…

Agentic Security:一款针对LLM模型的模糊测试与安全检测工具

关于Agentic Security Agentic Security是一款针对LLM模型的模糊测试与安全检测工具&#xff0c;该工具可以帮助广大研究人员针对任意LLM执行全面的安全分析与测试。 请注意 Agentic Security 是作为安全扫描工具设计的&#xff0c;而不是万无一失的解决方案。它无法保证完全防…

魔珐科技出席WWEC教育者大会,给出AI时代教培行业精细化运营赋能方案

AI与教育的结合&#xff0c;已经成为教育行业发展的关键增长点。头部机构纷纷寻求AI技术与产品融合&#xff0c;以增强市场竞争力&#xff0c;希望在这场技术引发的行业洗牌中保持领先。 喜忧之中&#xff0c;展望未来&#xff0c;教培机构如何继续找准航向&#xff0c;贴近政…

零基础5分钟上手亚马逊云科技 - 网络安全分析最佳实践

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

Zotero 常用插件介绍

1. Zotero 插件安装方法 下载以 .xpi 结尾的插件&#xff1b;打开 Zotero → 工具 → 插件 → 右上小齿轮图标 → Install Add-on From File ... → 选择下载好的 .xpi 插件安装 → 重启 Zotero 2. 常用插件介绍 2.1. Scholaread - 靠岸学术 Zotero 英文文献相关插件&#xf…

前端调用后端,出现跨域报错怎么办

我前端是vue&#xff0c;后端是其他同事写的python&#xff0c;因为部署在不同的机器上&#xff0c;我前端如果直接调用他的python&#xff0c;axios请求就会出现跨域报错&#xff0c;如下 blocked by CORS policy 云云 怎么办呢&#xff0c;网上探索了一下午&#xff0c;才找…