• 计算机毕业设计 基于SpringBoot大学生就业服务平台的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试


    🍊作者:计算机编程-吉哥
    🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。
    🍊心愿:点赞 👍 收藏 ⭐评论 📝
    🍅 文末获取源码联系

    👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~
    Java毕业设计项目~热门选题推荐《1000套》

    目录

    1.技术选型

    2.数据库表结构

    3.开发工具

    4.功能

    4.1【角色】

    4.2【前台功能模块】

    4.3【后台功能模块】

    5.项目演示截图

    5.1 首页

    5.2 试卷

    5.3 法律法规

    5.4 论坛

    5.5 新闻资讯

    5.6 个人中心

    5.7 企业功能展示

    5.8 老师功能展示

    5.9 管理员功能展示

    6.数据库文件设计

    7.核心代码 

    7.1 新闻Controller

    7.2 新闻Service

    7.3 新闻ServiceImpl

    7.4 新闻DAO

    8.参考文档


    1.技术选型

    springboot、mybatisplus、vue、elementui、html、css、js、mysql、jdk1.8

    2.数据库表结构

    29张 

    3.开发工具

    idea、navicat

    4.功能

    4.1【角色】

    管理员、用户、企业、老师

    4.2【前台功能模块】

    • 登录注册
    • 首页
    • 试卷
    • 法律法规
    • 论坛
    • 企业
    • 新闻资讯
    • 宣传
    • 职位招聘
    • 个人中心

    4.3【后台功能模块】

    • 登录
    • 首页
    • 个人中心
    • 管理员管理
    • 企业管理
    • 学生管理
    • 老师管理
    • 学生档案管理
    • 法律法规管理
    • 就业分析管理
    • 职位招聘管理
    • 论坛管理
    • 简历管理
    • 简历投递管理
    • 新闻资讯管理
    • 学生信息管理
    • 宣传管理
    • 试卷管理
    • 试题管理
    • 考试管理
    • 基础数据管理
    • 轮播图信息

    5.项目演示截图

    5.1 首页

    5.2 试卷

     

    5.3 法律法规

     

    5.4 论坛

     

    5.5 新闻资讯

     

    5.6 个人中心

     

    5.7 企业功能展示

     

    5.8 老师功能展示

     

    5.9 管理员功能展示

     

    6.数据库文件设计

    1. CREATE TABLE `config` (
    2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    3. `name` varchar(100) NOT NULL COMMENT '配置参数名称',
    4. `value` varchar(100) DEFAULT NULL COMMENT '配置参数值',
    5. PRIMARY KEY (`id`)
    6. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='配置文件';
    7. CREATE TABLE `dangan` (
    8. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
    9. `yonghu_id` int(11) DEFAULT NULL COMMENT '学生',
    10. `dangan_name` varchar(200) DEFAULT NULL COMMENT '学生档案名称 Search111 ',
    11. `dangan_uuid_number` varchar(200) DEFAULT NULL COMMENT '学生档案编号',
    12. `dangan_photo` varchar(200) DEFAULT NULL COMMENT '学生档案照片',
    13. `dangan_types` int(11) DEFAULT NULL COMMENT '学生档案类型 Search111',
    14. `dangan_quxiang` varchar(200) DEFAULT NULL COMMENT '就业去向',
    15. `dangan_content` longtext COMMENT '学生档案介绍 ',
    16. `dangan_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',
    17. `insert_time` timestamp NULL DEFAULT NULL COMMENT '录入时间',
    18. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    19. PRIMARY KEY (`id`)
    20. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='学生档案';
    21. CREATE TABLE `dictionary` (
    22. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    23. `dic_code` varchar(200) DEFAULT NULL COMMENT '字段',
    24. `dic_name` varchar(200) DEFAULT NULL COMMENT '字段名',
    25. `code_index` int(11) DEFAULT NULL COMMENT '编码',
    26. `index_name` varchar(200) DEFAULT NULL COMMENT '编码名字 Search111 ',
    27. `super_id` int(11) DEFAULT NULL COMMENT '父字段id',
    28. `beizhu` varchar(200) DEFAULT NULL COMMENT '备注',
    29. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    30. PRIMARY KEY (`id`)
    31. ) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8 COMMENT='字典';
    32. CREATE TABLE `exampaper` (
    33. `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    34. `exampaper_name` varchar(200) NOT NULL COMMENT '试卷名称 Search111',
    35. `exampaper_date` int(11) DEFAULT NULL COMMENT '考试时长(分钟)',
    36. `exampaper_myscore` int(20) NOT NULL DEFAULT '0' COMMENT '试卷总分数',
    37. `kemu_types` int(11) DEFAULT NULL COMMENT '科目 Search111',
    38. `exampaper_types` int(11) NOT NULL DEFAULT '0' COMMENT '试卷状态 Search111',
    39. `zujuan_types` int(11) DEFAULT NULL COMMENT '组卷方式',
    40. `exampaper_delete` int(255) DEFAULT '0' COMMENT '逻辑删除(1代表未删除 2代表已删除)',
    41. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间 show2 photoShow',
    42. PRIMARY KEY (`id`)
    43. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='试卷';
    44. CREATE TABLE `exampapertopic` (
    45. `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    46. `exampaper_id` int(20) NOT NULL COMMENT '试卷',
    47. `examquestion_id` int(20) NOT NULL COMMENT '试题',
    48. `exampapertopic_number` int(20) NOT NULL COMMENT '试题分数',
    49. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    50. PRIMARY KEY (`id`)
    51. ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COMMENT='试卷选题';
    52. CREATE TABLE `examquestion` (
    53. `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    54. `examquestion_name` varchar(200) DEFAULT NULL COMMENT '试题名称 Search111',
    55. `kemu_types` int(11) DEFAULT NULL COMMENT '科目 Search111',
    56. `examquestion_options` longtext COMMENT '选项,json字符串',
    57. `examquestion_answer` varchar(200) DEFAULT NULL COMMENT '正确答案',
    58. `examquestion_analysis` longtext COMMENT '答案解析',
    59. `examquestion_types` int(20) DEFAULT '0' COMMENT '试题类型 Search111',
    60. `examquestion_sequence` int(20) DEFAULT '100' COMMENT '试题排序,值越大排越前面',
    61. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    62. PRIMARY KEY (`id`)
    63. ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='试题表';
    64. CREATE TABLE `examrecord` (
    65. `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    66. `examrecord_uuid_number` varchar(200) DEFAULT NULL COMMENT '考试编号',
    67. `yonghu_id` int(20) NOT NULL COMMENT '考试用户',
    68. `exampaper_id` int(20) NOT NULL COMMENT '所属试卷id(外键)',
    69. `total_score` int(200) DEFAULT NULL COMMENT '所得总分',
    70. `insert_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '考试时间',
    71. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    72. PRIMARY KEY (`id`)
    73. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='考试记录表';
    74. CREATE TABLE `examredetails` (
    75. `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    76. `examredetails_uuid_number` varchar(200) DEFAULT NULL COMMENT '试卷编号',
    77. `yonghu_id` int(20) NOT NULL COMMENT '用户id',
    78. `examquestion_id` int(20) NOT NULL COMMENT '试题id(外键)',
    79. `examredetails_myanswer` varchar(200) DEFAULT NULL COMMENT '考生答案',
    80. `examredetails_myscore` int(20) NOT NULL DEFAULT '0' COMMENT '试题得分',
    81. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    82. PRIMARY KEY (`id`)
    83. ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='答题详情表';
    84. CREATE TABLE `examrewrongquestion` (
    85. `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    86. `yonghu_id` int(20) NOT NULL COMMENT '用户id',
    87. `exampaper_id` int(20) NOT NULL COMMENT '试卷(外键)',
    88. `examquestion_id` int(20) NOT NULL COMMENT '试题id(外键)',
    89. `examredetails_myanswer` varchar(200) DEFAULT NULL COMMENT '考生作答',
    90. `insert_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
    91. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间 show3',
    92. PRIMARY KEY (`id`)
    93. ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='错题表';
    94. CREATE TABLE `falvfagui` (
    95. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
    96. `falvfagui_name` varchar(200) DEFAULT NULL COMMENT '法律法规名称 Search111 ',
    97. `falvfagui_uuid_number` varchar(200) DEFAULT NULL COMMENT '法律法规编号',
    98. `falvfagui_photo` varchar(200) DEFAULT NULL COMMENT '法律法规照片',
    99. `falvfagui_video` varchar(200) DEFAULT NULL COMMENT '新闻视频',
    100. `falvfagui_types` int(11) DEFAULT NULL COMMENT '法律法规类型 Search111',
    101. `falvfagui_content` longtext COMMENT '法律法规介绍 ',
    102. `falvfagui_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',
    103. `insert_time` timestamp NULL DEFAULT NULL COMMENT '录入时间',
    104. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 photoShow',
    105. PRIMARY KEY (`id`)
    106. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='法律法规';
    107. CREATE TABLE `falvfagui_collection` (
    108. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    109. `falvfagui_id` int(11) DEFAULT NULL COMMENT '法律法规',
    110. `yonghu_id` int(11) DEFAULT NULL COMMENT '学生',
    111. `falvfagui_collection_types` int(11) DEFAULT NULL COMMENT '类型',
    112. `insert_time` timestamp NULL DEFAULT NULL COMMENT '收藏时间',
    113. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 photoShow',
    114. PRIMARY KEY (`id`)
    115. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='法律法规收藏';
    116. CREATE TABLE `falvfagui_liuyan` (
    117. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    118. `falvfagui_id` int(11) DEFAULT NULL COMMENT '法律法规',
    119. `yonghu_id` int(11) DEFAULT NULL COMMENT '学生',
    120. `falvfagui_liuyan_text` longtext COMMENT '留言内容',
    121. `insert_time` timestamp NULL DEFAULT NULL COMMENT '留言时间',
    122. `reply_text` longtext COMMENT '回复内容',
    123. `update_time` timestamp NULL DEFAULT NULL COMMENT '回复时间',
    124. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    125. PRIMARY KEY (`id`)
    126. ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='法律法规留言';
    127. CREATE TABLE `fenxi` (
    128. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
    129. `fenxi_name` varchar(200) DEFAULT NULL COMMENT '就业分析名称 Search111 ',
    130. `fenxi_uuid_number` varchar(200) DEFAULT NULL COMMENT '就业分析编号',
    131. `fenxi_photo` varchar(200) DEFAULT NULL COMMENT '就业分析照片',
    132. `fenxi_types` int(11) DEFAULT NULL COMMENT '就业分析类型 Search111',
    133. `fenxi_quxiang` varchar(200) DEFAULT NULL COMMENT '就业去向',
    134. `fenxi_xinzi` int(11) DEFAULT NULL COMMENT '薪资',
    135. `fenxi_jiuyel` int(11) DEFAULT NULL COMMENT '就业率',
    136. `fenxi_content` longtext COMMENT '就业分析介绍 ',
    137. `fenxi_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',
    138. `insert_time` timestamp NULL DEFAULT NULL COMMENT '录入时间',
    139. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 ',
    140. PRIMARY KEY (`id`)
    141. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='就业分析';
    142. CREATE TABLE `forum` (
    143. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    144. `forum_name` varchar(200) DEFAULT NULL COMMENT '帖子标题 Search111 ',
    145. `yonghu_id` int(11) DEFAULT NULL COMMENT '学生',
    146. `laoshi_id` int(11) DEFAULT NULL COMMENT '老师',
    147. `gongsi_id` int(11) DEFAULT NULL COMMENT '企业',
    148. `users_id` int(11) DEFAULT NULL COMMENT '管理员',
    149. `forum_content` longtext COMMENT '发布内容',
    150. `super_ids` int(11) DEFAULT NULL COMMENT '父id',
    151. `forum_state_types` int(11) DEFAULT NULL COMMENT '帖子状态',
    152. `insert_time` timestamp NULL DEFAULT NULL COMMENT '发帖时间',
    153. `update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间',
    154. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show2',
    155. PRIMARY KEY (`id`)
    156. ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='论坛';
    157. CREATE TABLE `gongsi` (
    158. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
    159. `username` varchar(200) DEFAULT NULL COMMENT '账户 ',
    160. `password` varchar(200) DEFAULT NULL COMMENT '密码 ',
    161. `gongsi_name` varchar(200) DEFAULT NULL COMMENT '企业名称 Search111 ',
    162. `gongsi_types` int(11) DEFAULT NULL COMMENT '企业类型',
    163. `gongsi_phone` varchar(200) DEFAULT NULL COMMENT '联系方式',
    164. `gongsi_email` varchar(200) DEFAULT NULL COMMENT '邮箱',
    165. `gongsi_photo` varchar(200) DEFAULT NULL COMMENT '企业封面',
    166. `gongsi_content` text COMMENT '企业简介 ',
    167. `gongsi_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',
    168. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 photoShow ',
    169. PRIMARY KEY (`id`)
    170. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='企业';
    171. CREATE TABLE `laoshi` (
    172. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    173. `username` varchar(200) DEFAULT NULL COMMENT '账户',
    174. `password` varchar(200) DEFAULT NULL COMMENT '密码',
    175. `laoshi_name` varchar(200) DEFAULT NULL COMMENT '老师姓名 Search111 ',
    176. `laoshi_phone` varchar(200) DEFAULT NULL COMMENT '老师手机号',
    177. `laoshi_id_number` varchar(200) DEFAULT NULL COMMENT '老师身份证号',
    178. `laoshi_photo` varchar(200) DEFAULT NULL COMMENT '老师头像',
    179. `sex_types` int(11) DEFAULT NULL COMMENT '性别',
    180. `laoshi_email` varchar(200) DEFAULT NULL COMMENT '老师邮箱',
    181. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    182. PRIMARY KEY (`id`)
    183. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='老师';
    184. CREATE TABLE `token` (
    185. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    186. `userid` bigint(20) NOT NULL COMMENT '儿童id',
    187. `username` varchar(100) NOT NULL COMMENT '儿童名',
    188. `tablename` varchar(100) DEFAULT NULL COMMENT '表名',
    189. `role` varchar(100) DEFAULT NULL COMMENT '角色',
    190. `token` varchar(200) NOT NULL COMMENT '密码',
    191. `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
    192. `expiratedtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
    193. PRIMARY KEY (`id`)
    194. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='token表';
    195. CREATE TABLE `users` (
    196. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    197. `username` varchar(100) NOT NULL COMMENT '儿童名',
    198. `password` varchar(100) NOT NULL COMMENT '密码',
    199. `role` varchar(100) DEFAULT '管理员' COMMENT '角色',
    200. `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
    201. PRIMARY KEY (`id`)
    202. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='管理员';
    203. CREATE TABLE `xinwen` (
    204. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
    205. `xinwen_name` varchar(200) DEFAULT NULL COMMENT '新闻资讯名称 Search111 ',
    206. `xinwen_uuid_number` varchar(200) DEFAULT NULL COMMENT '新闻资讯编号',
    207. `xinwen_photo` varchar(200) DEFAULT NULL COMMENT '新闻资讯照片',
    208. `xinwen_video` varchar(200) DEFAULT NULL COMMENT '新闻视频',
    209. `xinwen_types` int(11) DEFAULT NULL COMMENT '新闻资讯类型 Search111',
    210. `xinwen_content` longtext COMMENT '新闻资讯介绍 ',
    211. `xinwen_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',
    212. `insert_time` timestamp NULL DEFAULT NULL COMMENT '录入时间',
    213. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 photoShow',
    214. PRIMARY KEY (`id`)
    215. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='新闻资讯';
    216. CREATE TABLE `xinwen_collection` (
    217. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    218. `xinwen_id` int(11) DEFAULT NULL COMMENT '新闻资讯',
    219. `yonghu_id` int(11) DEFAULT NULL COMMENT '学生',
    220. `xinwen_collection_types` int(11) DEFAULT NULL COMMENT '类型',
    221. `insert_time` timestamp NULL DEFAULT NULL COMMENT '收藏时间',
    222. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 photoShow',
    223. PRIMARY KEY (`id`)
    224. ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='新闻资讯收藏';
    225. CREATE TABLE `xinwen_liuyan` (
    226. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    227. `xinwen_id` int(11) DEFAULT NULL COMMENT '新闻资讯',
    228. `yonghu_id` int(11) DEFAULT NULL COMMENT '学生',
    229. `xinwen_liuyan_text` longtext COMMENT '留言内容',
    230. `insert_time` timestamp NULL DEFAULT NULL COMMENT '留言时间',
    231. `reply_text` longtext COMMENT '回复内容',
    232. `update_time` timestamp NULL DEFAULT NULL COMMENT '回复时间',
    233. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    234. PRIMARY KEY (`id`)
    235. ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='新闻资讯留言';
    236. CREATE TABLE `xinxi` (
    237. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
    238. `yonghu_id` int(11) DEFAULT NULL COMMENT '学生',
    239. `xinxi_types` int(11) DEFAULT NULL COMMENT '学生专业 Search111',
    240. `xinxi_banji_types` int(11) DEFAULT NULL COMMENT '学生班级',
    241. `xinxi_xueyuan` varchar(200) DEFAULT NULL COMMENT '学院',
    242. `xinxi_content` longtext COMMENT '学生信息介绍 ',
    243. `xinxi_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',
    244. `insert_time` timestamp NULL DEFAULT NULL COMMENT '录入时间',
    245. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 ',
    246. PRIMARY KEY (`id`)
    247. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='学生信息';
    248. CREATE TABLE `xuanchuan` (
    249. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
    250. `xuanchuan_name` varchar(200) DEFAULT NULL COMMENT '宣传名称 Search111 ',
    251. `xuanchuan_uuid_number` varchar(200) DEFAULT NULL COMMENT '宣传编号',
    252. `xuanchuan_photo` varchar(200) DEFAULT NULL COMMENT '宣传照片',
    253. `xuanchuan_video` varchar(200) DEFAULT NULL COMMENT '宣传视频',
    254. `xuanchuan_content` longtext COMMENT '宣传介绍 ',
    255. `xuanchuan_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',
    256. `insert_time` timestamp NULL DEFAULT NULL COMMENT '录入时间',
    257. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 photoShow',
    258. PRIMARY KEY (`id`)
    259. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='宣传';
    260. CREATE TABLE `yonghu` (
    261. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    262. `username` varchar(200) DEFAULT NULL COMMENT '账户',
    263. `password` varchar(200) DEFAULT NULL COMMENT '密码',
    264. `yonghu_name` varchar(200) DEFAULT NULL COMMENT '学生姓名 Search111 ',
    265. `yonghu_phone` varchar(200) DEFAULT NULL COMMENT '学生手机号',
    266. `yonghu_id_number` varchar(200) DEFAULT NULL COMMENT '学生身份证号',
    267. `yonghu_photo` varchar(200) DEFAULT NULL COMMENT '学生头像',
    268. `sex_types` int(11) DEFAULT NULL COMMENT '性别',
    269. `yonghu_email` varchar(200) DEFAULT NULL COMMENT '学生邮箱',
    270. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    271. PRIMARY KEY (`id`)
    272. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='学生';
    273. CREATE TABLE `zhaopin` (
    274. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
    275. `gongsi_id` int(11) DEFAULT NULL COMMENT '企业',
    276. `zhaopin_name` varchar(200) DEFAULT NULL COMMENT '招聘信息名称 Search111 ',
    277. `zhaopin_photo` varchar(200) DEFAULT NULL COMMENT '招聘信息照片',
    278. `zhaopin_daiyu` varchar(200) DEFAULT NULL COMMENT '薪资待遇',
    279. `zhaopin_address` varchar(200) DEFAULT NULL COMMENT '上班地点',
    280. `lianxiren_name` varchar(200) DEFAULT NULL COMMENT '联系人',
    281. `zhaopin_phone` varchar(200) DEFAULT NULL COMMENT '招聘电话',
    282. `zan_number` int(111) DEFAULT NULL COMMENT '赞',
    283. `cai_number` int(111) DEFAULT NULL COMMENT '踩',
    284. `zhaopin_types` int(11) DEFAULT NULL COMMENT '招聘岗位 Search111',
    285. `leixing_types` int(11) DEFAULT NULL COMMENT '招聘类型 Search111',
    286. `zhaopin_renshu_number` int(11) DEFAULT NULL COMMENT '招聘人数',
    287. `zhaopin_content` text COMMENT '招聘信息详情',
    288. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 photoShow',
    289. PRIMARY KEY (`id`)
    290. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='职位招聘';
    291. CREATE TABLE `zhaopin_collection` (
    292. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    293. `zhaopin_id` int(11) DEFAULT NULL COMMENT '职位',
    294. `yonghu_id` int(11) DEFAULT NULL COMMENT '学生',
    295. `zhaopin_collection_types` int(11) DEFAULT NULL COMMENT '类型',
    296. `insert_time` timestamp NULL DEFAULT NULL COMMENT '收藏时间',
    297. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 photoShow',
    298. PRIMARY KEY (`id`)
    299. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='职位收藏';
    300. CREATE TABLE `zhaopin_liuyan` (
    301. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    302. `zhaopin_id` int(11) DEFAULT NULL COMMENT '职位',
    303. `yonghu_id` int(11) DEFAULT NULL COMMENT '学生',
    304. `zhaopin_liuyan_text` text COMMENT '留言内容',
    305. `reply_text` text COMMENT '回复内容',
    306. `insert_time` timestamp NULL DEFAULT NULL COMMENT '留言时间',
    307. `update_time` timestamp NULL DEFAULT NULL COMMENT '回复时间',
    308. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    309. PRIMARY KEY (`id`)
    310. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='招聘咨询';

    7.核心代码 

    7.1 新闻Controller

    1. package com.controller;
    2. /**
    3. * 新闻资讯
    4. * 后端接口
    5. * @author 计算机编程-吉哥
    6. * @email
    7. */
    8. @RestController
    9. @Controller
    10. @RequestMapping("/xinwen")
    11. public class XinwenController {
    12. private static final Logger logger = LoggerFactory.getLogger(XinwenController.class);
    13. private static final String TABLE_NAME = "xinwen";
    14. @Autowired
    15. private XinwenService xinwenService;
    16. @Autowired
    17. private TokenService tokenService;
    18. @Autowired
    19. private DanganService danganService;//学生档案
    20. @Autowired
    21. private DictionaryService dictionaryService;//字典
    22. @Autowired
    23. private ExampaperService exampaperService;//试卷
    24. @Autowired
    25. private ExampapertopicService exampapertopicService;//试卷选题
    26. @Autowired
    27. private ExamquestionService examquestionService;//试题表
    28. @Autowired
    29. private ExamrecordService examrecordService;//考试记录表
    30. @Autowired
    31. private ExamredetailsService examredetailsService;//答题详情表
    32. @Autowired
    33. private ExamrewrongquestionService examrewrongquestionService;//错题表
    34. @Autowired
    35. private FalvfaguiService falvfaguiService;//法律法规
    36. @Autowired
    37. private FalvfaguiCollectionService falvfaguiCollectionService;//法律法规收藏
    38. @Autowired
    39. private FalvfaguiLiuyanService falvfaguiLiuyanService;//法律法规留言
    40. @Autowired
    41. private FenxiService fenxiService;//就业分析
    42. @Autowired
    43. private ForumService forumService;//论坛
    44. @Autowired
    45. private GongsiService gongsiService;//企业
    46. @Autowired
    47. private JianliService jianliService;//简历
    48. @Autowired
    49. private LaoshiService laoshiService;//老师
    50. @Autowired
    51. private ToudiService toudiService;//简历投递
    52. @Autowired
    53. private XinwenCollectionService xinwenCollectionService;//新闻资讯收藏
    54. @Autowired
    55. private XinwenLiuyanService xinwenLiuyanService;//新闻资讯留言
    56. @Autowired
    57. private XinxiService xinxiService;//学生信息
    58. @Autowired
    59. private XuanchuanService xuanchuanService;//宣传
    60. @Autowired
    61. private YonghuService yonghuService;//学生
    62. @Autowired
    63. private ZhaopinService zhaopinService;//职位招聘
    64. @Autowired
    65. private ZhaopinCollectionService zhaopinCollectionService;//职位收藏
    66. @Autowired
    67. private ZhaopinLiuyanService zhaopinLiuyanService;//招聘咨询
    68. @Autowired
    69. private UsersService usersService;//管理员
    70. /**
    71. * 后端列表
    72. */
    73. @RequestMapping("/page")
    74. public R page(@RequestParam Map params, HttpServletRequest request){
    75. logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
    76. String role = String.valueOf(request.getSession().getAttribute("role"));
    77. if(false)
    78. return R.error(511,"永不会进入");
    79. else if("学生".equals(role))
    80. params.put("yonghuId",request.getSession().getAttribute("userId"));
    81. else if("企业".equals(role))
    82. params.put("gongsiId",request.getSession().getAttribute("userId"));
    83. else if("老师".equals(role))
    84. params.put("laoshiId",request.getSession().getAttribute("userId"));
    85. params.put("xinwenDeleteStart",1);params.put("xinwenDeleteEnd",1);
    86. CommonUtil.checkMap(params);
    87. PageUtils page = xinwenService.queryPage(params);
    88. //字典表数据转换
    89. List list =(List)page.getList();
    90. for(XinwenView c:list){
    91. //修改对应字典表字段
    92. dictionaryService.dictionaryConvert(c, request);
    93. }
    94. return R.ok().put("data", page);
    95. }
    96. /**
    97. * 后端详情
    98. */
    99. @RequestMapping("/info/{id}")
    100. public R info(@PathVariable("id") Long id, HttpServletRequest request){
    101. logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
    102. XinwenEntity xinwen = xinwenService.selectById(id);
    103. if(xinwen !=null){
    104. //entity转view
    105. XinwenView view = new XinwenView();
    106. BeanUtils.copyProperties( xinwen , view );//把实体数据重构到view中
    107. //修改对应字典表字段
    108. dictionaryService.dictionaryConvert(view, request);
    109. return R.ok().put("data", view);
    110. }else {
    111. return R.error(511,"查不到数据");
    112. }
    113. }
    114. /**
    115. * 后端保存
    116. */
    117. @RequestMapping("/save")
    118. public R save(@RequestBody XinwenEntity xinwen, HttpServletRequest request){
    119. logger.debug("save方法:,,Controller:{},,xinwen:{}",this.getClass().getName(),xinwen.toString());
    120. String role = String.valueOf(request.getSession().getAttribute("role"));
    121. if(false)
    122. return R.error(511,"永远不会进入");
    123. Wrapper queryWrapper = new EntityWrapper()
    124. .eq("xinwen_name", xinwen.getXinwenName())
    125. .eq("xinwen_video", xinwen.getXinwenVideo())
    126. .eq("xinwen_types", xinwen.getXinwenTypes())
    127. .eq("xinwen_delete", 1)
    128. ;
    129. logger.info("sql语句:"+queryWrapper.getSqlSegment());
    130. XinwenEntity xinwenEntity = xinwenService.selectOne(queryWrapper);
    131. if(xinwenEntity==null){
    132. xinwen.setXinwenDelete(1);
    133. xinwen.setInsertTime(new Date());
    134. xinwen.setCreateTime(new Date());
    135. xinwenService.insert(xinwen);
    136. return R.ok();
    137. }else {
    138. return R.error(511,"表中有相同数据");
    139. }
    140. }
    141. /**
    142. * 后端修改
    143. */
    144. @RequestMapping("/update")
    145. public R update(@RequestBody XinwenEntity xinwen, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
    146. logger.debug("update方法:,,Controller:{},,xinwen:{}",this.getClass().getName(),xinwen.toString());
    147. XinwenEntity oldXinwenEntity = xinwenService.selectById(xinwen.getId());//查询原先数据
    148. String role = String.valueOf(request.getSession().getAttribute("role"));
    149. // if(false)
    150. // return R.error(511,"永远不会进入");
    151. if("".equals(xinwen.getXinwenPhoto()) || "null".equals(xinwen.getXinwenPhoto())){
    152. xinwen.setXinwenPhoto(null);
    153. }
    154. if("".equals(xinwen.getXinwenVideo()) || "null".equals(xinwen.getXinwenVideo())){
    155. xinwen.setXinwenVideo(null);
    156. }
    157. xinwenService.updateById(xinwen);//根据id更新
    158. return R.ok();
    159. }
    160. /**
    161. * 删除
    162. */
    163. @RequestMapping("/delete")
    164. public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
    165. logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
    166. List oldXinwenList =xinwenService.selectBatchIds(Arrays.asList(ids));//要删除的数据
    167. ArrayList list = new ArrayList<>();
    168. for(Integer id:ids){
    169. XinwenEntity xinwenEntity = new XinwenEntity();
    170. xinwenEntity.setId(id);
    171. xinwenEntity.setXinwenDelete(2);
    172. list.add(xinwenEntity);
    173. }
    174. if(list != null && list.size() >0){
    175. xinwenService.updateBatchById(list);
    176. }
    177. return R.ok();
    178. }
    179. /**
    180. * 批量上传
    181. */
    182. @RequestMapping("/batchInsert")
    183. public R save( String fileName, HttpServletRequest request){
    184. logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
    185. Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
    186. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    187. //.eq("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))
    188. try {
    189. List xinwenList = new ArrayList<>();//上传的东西
    190. Map> seachFields= new HashMap<>();//要查询的字段
    191. Date date = new Date();
    192. int lastIndexOf = fileName.lastIndexOf(".");
    193. if(lastIndexOf == -1){
    194. return R.error(511,"该文件没有后缀");
    195. }else{
    196. String suffix = fileName.substring(lastIndexOf);
    197. if(!".xls".equals(suffix)){
    198. return R.error(511,"只支持后缀为xls的excel文件");
    199. }else{
    200. URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
    201. File file = new File(resource.getFile());
    202. if(!file.exists()){
    203. return R.error(511,"找不到上传文件,请联系管理员");
    204. }else{
    205. List> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
    206. dataList.remove(0);//删除第一行,因为第一行是提示
    207. for(List data:dataList){
    208. //循环
    209. XinwenEntity xinwenEntity = new XinwenEntity();
    210. xinwenList.add(xinwenEntity);
    211. //把要查询是否重复的字段放入map中
    212. //新闻资讯编号
    213. if(seachFields.containsKey("xinwenUuidNumber")){
    214. List xinwenUuidNumber = seachFields.get("xinwenUuidNumber");
    215. xinwenUuidNumber.add(data.get(0));//要改的
    216. }else{
    217. List xinwenUuidNumber = new ArrayList<>();
    218. xinwenUuidNumber.add(data.get(0));//要改的
    219. seachFields.put("xinwenUuidNumber",xinwenUuidNumber);
    220. }
    221. }
    222. //查询是否重复
    223. //新闻资讯编号
    224. List xinwenEntities_xinwenUuidNumber = xinwenService.selectList(new EntityWrapper().in("xinwen_uuid_number", seachFields.get("xinwenUuidNumber")).eq("xinwen_delete", 1));
    225. if(xinwenEntities_xinwenUuidNumber.size() >0 ){
    226. ArrayList repeatFields = new ArrayList<>();
    227. for(XinwenEntity s:xinwenEntities_xinwenUuidNumber){
    228. repeatFields.add(s.getXinwenUuidNumber());
    229. }
    230. return R.error(511,"数据库的该表中的 [新闻资讯编号] 字段已经存在 存在数据为:"+repeatFields.toString());
    231. }
    232. xinwenService.insertBatch(xinwenList);
    233. return R.ok();
    234. }
    235. }
    236. }
    237. }catch (Exception e){
    238. e.printStackTrace();
    239. return R.error(511,"批量插入数据异常,请联系管理员");
    240. }
    241. }
    242. /**
    243. * 个性推荐
    244. */
    245. @IgnoreAuth
    246. @RequestMapping("/gexingtuijian")
    247. public R gexingtuijian(@RequestParam Map params, HttpServletRequest request){
    248. logger.debug("gexingtuijian方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
    249. CommonUtil.checkMap(params);
    250. List returnXinwenViewList = new ArrayList<>();
    251. //查看收藏
    252. Map params1 = new HashMap<>(params);params1.put("sort","id");params1.put("yonghuId",request.getSession().getAttribute("userId"));
    253. PageUtils pageUtils = xinwenCollectionService.queryPage(params1);
    254. List collectionViewsList =(List)pageUtils.getList();
    255. Map typeMap=new HashMap<>();//购买的类型list
    256. for(XinwenCollectionView collectionView:collectionViewsList){
    257. Integer xinwenTypes = collectionView.getXinwenTypes();
    258. if(typeMap.containsKey(xinwenTypes)){
    259. typeMap.put(xinwenTypes,typeMap.get(xinwenTypes)+1);
    260. }else{
    261. typeMap.put(xinwenTypes,1);
    262. }
    263. }
    264. List typeList = new ArrayList<>();//排序后的有序的类型 按最多到最少
    265. typeMap.entrySet().stream().sorted((o1, o2) -> o2.getValue() - o1.getValue()).forEach(e -> typeList.add(e.getKey()));//排序
    266. Integer limit = Integer.valueOf(String.valueOf(params.get("limit")));
    267. for(Integer type:typeList){
    268. Map params2 = new HashMap<>(params);params2.put("xinwenTypes",type);
    269. PageUtils pageUtils1 = xinwenService.queryPage(params2);
    270. List xinwenViewList =(List)pageUtils1.getList();
    271. returnXinwenViewList.addAll(xinwenViewList);
    272. if(returnXinwenViewList.size()>= limit) break;//返回的推荐数量大于要的数量 跳出循环
    273. }
    274. //正常查询出来商品,用于补全推荐缺少的数据
    275. PageUtils page = xinwenService.queryPage(params);
    276. if(returnXinwenViewList.size()//返回数量还是小于要求数量
    277. int toAddNum = limit - returnXinwenViewList.size();//要添加的数量
    278. List xinwenViewList =(List)page.getList();
    279. for(XinwenView xinwenView:xinwenViewList){
    280. Boolean addFlag = true;
    281. for(XinwenView returnXinwenView:returnXinwenViewList){
    282. if(returnXinwenView.getId().intValue() ==xinwenView.getId().intValue()) addFlag=false;//返回的数据中已存在此商品
    283. }
    284. if(addFlag){
    285. toAddNum=toAddNum-1;
    286. returnXinwenViewList.add(xinwenView);
    287. if(toAddNum==0) break;//够数量了
    288. }
    289. }
    290. }else {
    291. returnXinwenViewList = returnXinwenViewList.subList(0, limit);
    292. }
    293. for(XinwenView c:returnXinwenViewList)
    294. dictionaryService.dictionaryConvert(c, request);
    295. page.setList(returnXinwenViewList);
    296. return R.ok().put("data", page);
    297. }
    298. /**
    299. * 前端列表
    300. */
    301. @IgnoreAuth
    302. @RequestMapping("/list")
    303. public R list(@RequestParam Map params, HttpServletRequest request){
    304. logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
    305. CommonUtil.checkMap(params);
    306. PageUtils page = xinwenService.queryPage(params);
    307. //字典表数据转换
    308. List list =(List)page.getList();
    309. for(XinwenView c:list)
    310. dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
    311. return R.ok().put("data", page);
    312. }
    313. /**
    314. * 前端详情
    315. */
    316. @RequestMapping("/detail/{id}")
    317. public R detail(@PathVariable("id") Long id, HttpServletRequest request){
    318. logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
    319. XinwenEntity xinwen = xinwenService.selectById(id);
    320. if(xinwen !=null){
    321. //entity转view
    322. XinwenView view = new XinwenView();
    323. BeanUtils.copyProperties( xinwen , view );//把实体数据重构到view中
    324. //修改对应字典表字段
    325. dictionaryService.dictionaryConvert(view, request);
    326. return R.ok().put("data", view);
    327. }else {
    328. return R.error(511,"查不到数据");
    329. }
    330. }
    331. /**
    332. * 前端保存
    333. */
    334. @RequestMapping("/add")
    335. public R add(@RequestBody XinwenEntity xinwen, HttpServletRequest request){
    336. logger.debug("add方法:,,Controller:{},,xinwen:{}",this.getClass().getName(),xinwen.toString());
    337. Wrapper queryWrapper = new EntityWrapper()
    338. .eq("xinwen_name", xinwen.getXinwenName())
    339. .eq("xinwen_uuid_number", xinwen.getXinwenUuidNumber())
    340. .eq("xinwen_video", xinwen.getXinwenVideo())
    341. .eq("xinwen_types", xinwen.getXinwenTypes())
    342. .eq("xinwen_delete", xinwen.getXinwenDelete())
    343. // .notIn("xinwen_types", new Integer[]{102})
    344. ;
    345. logger.info("sql语句:"+queryWrapper.getSqlSegment());
    346. XinwenEntity xinwenEntity = xinwenService.selectOne(queryWrapper);
    347. if(xinwenEntity==null){
    348. xinwen.setXinwenDelete(1);
    349. xinwen.setInsertTime(new Date());
    350. xinwen.setCreateTime(new Date());
    351. xinwenService.insert(xinwen);
    352. return R.ok();
    353. }else {
    354. return R.error(511,"表中有相同数据");
    355. }
    356. }
    357. }

    7.2 新闻Service

    1. package com.service;
    2. import com.baomidou.mybatisplus.service.IService;
    3. import com.utils.PageUtils;
    4. import com.entity.XinwenEntity;
    5. import java.util.Map;
    6. import javax.servlet.http.HttpServletRequest;
    7. import org.springframework.lang.Nullable;
    8. import java.util.List;
    9. /**
    10. * 新闻资讯 服务类
    11. */
    12. public interface XinwenService extends IService {
    13. /**
    14. * @param params 查询参数
    15. * @return 带分页的查询出来的数据
    16. */
    17. PageUtils queryPage(Map params);
    18. }

    7.3 新闻ServiceImpl

    1. package com.service.impl;
    2. /**
    3. * 新闻资讯 服务实现类
    4. */
    5. @Service("xinwenService")
    6. @Transactional
    7. public class XinwenServiceImpl extends ServiceImpl implements XinwenService {
    8. @Override
    9. public PageUtils queryPage(Map params) {
    10. Page page =new Query(params).getPage();
    11. page.setRecords(baseMapper.selectListView(page,params));
    12. return new PageUtils(page);
    13. }
    14. }

    7.4 新闻DAO

    1. package com.dao;
    2. import com.entity.XinwenEntity;
    3. import com.baomidou.mybatisplus.mapper.BaseMapper;
    4. import java.util.List;
    5. import java.util.Map;
    6. import com.baomidou.mybatisplus.plugins.pagination.Pagination;
    7. import org.apache.ibatis.annotations.Param;
    8. import com.entity.view.XinwenView;
    9. /**
    10. * 新闻资讯 Dao 接口
    11. *
    12. * @author
    13. */
    14. public interface XinwenDao extends BaseMapper {
    15. List selectListView(Pagination page,@Param("params")Map params);
    16. }

    8.参考文档

    你可能还有感兴趣的项目👇🏻👇🏻👇🏻

    更多项目推荐:计算机毕业设计项目

    如果大家有任何疑虑,请在下方咨询或评论

  • 相关阅读:
    超详细教程,一文入门Istio架构原理及实战应用
    12.JVM
    gRPC入门学习之旅(八)
    报错问题解决办法:Decryption error sun.security.rsa.RSAPadding.unpadV15
    大专三年总结2019-2022
    [深度学习]使用python转换pt并部署yolov10的tensorrt模型封装成类几句完成目标检测加速任务
    Git(SourceTree)变基操作使用
    uni-app--》基于小程序开发的电商平台项目实战(二)
    Apache IoTDB 分布式架构三部曲(二)分片与负载均衡
    Xilinx FPGA平台DDR3设计详解(一):DDR SDRAM系统框架
  • 原文地址:https://blog.csdn.net/weixin_51966461/article/details/134096423