-
系统实现
-
用户登录的实现
用户登录页面,该页面有一个权限区分,主要用于区分系统管理员和用户的登录。当登录的账号是系统管理员时,管理员可以进行后台管理,而普通用户只能进行用户端的操作,普通用户只有在注册登录以后方可进入中华非遗传承网站。如果用户还没有登录的账号和密码,必须先在系统上注册一个。在登录后,可以进入操作。
已登录的用户可以查看、修改个人信息以及密码修改等操作。用户信息的查看功能在yonghuzhuce_updt.aspx.cs页面中实现。用户信息,和密码修改功能在系统窗口中实现的。
登录界面如下图所示。
图5-1登录界面
登录系统主要代码如下。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
-
-
系统前台主要功能实现
-
首页的实现
用户界面要尽量简洁大方,使用户能够方便找到需要的功能入口,浏览非遗资讯、购买商品等,且要易于修改和维护,同时还要保证用户合法和系统安全。
首页界面如下图所示。
图5-1首页界面
-
-
-
用户注册的实现
主要用于用户注册,在这个页面中用户要填写用户名,密码,姓名,地址和Email等信息,并且各项信息都不能为空。用户也可以点击修改个人资料和密码。系统管理员对已注册用户的信息可进行确认,可将用户列为正式用户,也可以将其删除。一般注册了的用户默认都是正是用户,前提是管理员没有删除该账号。用户在注册成功以后,才可登录系统。模块的功能是在yonghuzhuce.aspx.cs页面中实现的。
用户注册界面如下所示。
图5-2用户注册界面
用户注册的关键代码如下。
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
-
-
-
个人中心的实现
通过内容列表可以获取
昵称、图像、密码
等信息
可
进行
增、删、改
或查看
等
操作
,如下图所示:
图5-3个人中心页面
个人中心主要代码如下。
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
-
-
-
交流论坛的实现
在交流论坛的页面用户可在论坛帖子里进行发布内容或对帖子收藏、点赞、评论、交流和回复,交流论坛界面如下图所示。
图5-4交流论坛的界面图
交流论坛主要代码如下。
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
-
-
-
非遗文化
用户可查看所有非遗文化的文章详情(如:文化特征、文化意义、文化类型、发布人、发布时间等),也可对非遗文化进行评论、点赞、收藏、评论,非遗文化界面如下图所示。
图5-5非遗文化列表界面
非遗文化主要代码如下。
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
-
-
系统后台主要功能实现
-
管理员的实现
管理员登录,管理员通过输入账号,密码,权限等信息进入中华非遗传承网站,如下图所示。
图5-6管理员信息界面图
管理员登录进入中华非遗传承网站可以查看首页、个人中心的实现、轮播管理、公告管理、交流管理、模块管理、用户管理、资源管理、模块管理等内容,如图5-7所示。
管理员界面如下图所示。
图5-
7
管理
员
界面
管理员的逻辑代码如下。
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return success(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
-
-
-
用户管理的实现
在用户列表可以查看用户名、用户姓名、密码、联系电话、身份证等信息,并可根据需要进行编辑或删除操作,如下图所示。。
图5-8用户管理界面
用户管理主要代码如下。
@RequestMapping(value = {"/sum_group", "/sum"})
public Map<String, Object> sum(HttpServletRequest request) {
Query count = service.sum(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
-
-
-
政策法规的实现
可以对所有的政策法规文章详情进行查询、重置、添加、删除等进行操作;
法政法规界面如下图所示。
图5-9政策法规界面
政策法规主要代码如下。
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
Query select = service.select(service.readQuery(request), service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
public Query select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return runEntitySql(sql.toString());
}
此时项目已经完成,即使实施的时间不是很长,但是这个过程中需要准备很长的一段时间去对系统设计开发所相关技术进行学习。在学习的过程中,我逐渐认识得到了我自身存在的一些不足。从该系统中,系统的分析和设计的调查数据,并且已经经历和努力了几个月,最终完成了系统。很显然,该系统仍有很多不成熟的地方,在系统设计过程中有许多技术缺陷存在。在设计的过程中也涉及到了很多自己无法解决的问题,主要通过咨询老师解决这些问题,对于毕业设计的圆满完成,需要感谢老师们的指导。系统的开发环境和配置都是可以自行安装的,系统使用Java开发工具,使用比较成熟的Mysql数据库进行对系统前台及后台的数据交互,根据技术语言对数据库,结合需求进行修改维护,可以使得系统运行更具有稳定性和安全性,从而完成实现系统的开发。
[4]韩瑜,潘斐. 留住文化之根 传承非遗之魂[N]. 呼伦贝尔日报,2022-06-25(003).DOI:10.28351/n.cnki.nhlbe.2022.001041.
[6]王春燕. 让非遗更好传承中华文明[N]. 中国档案报,2022-06-02(001).DOI:10.28057/n.cnki.ncdab.2022.000237.
[7]王晶晶. 非遗拓展新疆旅游新边界[N]. 新疆日报(汉),2022-05-20(004).DOI:10.28887/n.cnki.nxjrb.2022.001764.
[9]朱廷宇,李雨衡. “非遗”视域下内江王家拳传承发展研究[C]//.保护·研究·传承——2021年中国体育非物质文化遗产国际会议书面交流论文集.,2021:408.DOI:10.26914/c.cnkihy.2021.053118.
[10]兰双. 体育类非遗资源在南宁市初中体育教育的应用现状与策略研究[D].广州体育学院,2021.DOI:10.27042/d.cnki.ggztc.2021.000253.
[11]仇琛. 非物质文化遗产与旅游产业耦合机理与实证研究[D].中国矿业大学,2021.DOI:10.27623/d.cnki.gzkyu.2021.002898.
[13]喻佳,吴丹新.基于SpringBoot的Web快速开发框架[J].电脑编程技巧与维护,2021(09):31-33.DOI:10.16184/j.cnki.comprg.2021.09.013.
[14]李墨. 文化自信视域下吉林省非遗文化保护研究[D].吉林农业大学,2021.DOI:10.27163/d.cnki.gjlnu.2021.000548.
[15]王淑贤. 新媒体时代非遗题材纪录片的叙事维度与传播路径研究[D].天津工业大学,2020.DOI:10.27357/d.cnki.gtgyu.2020.000761.
[16]Hongmei Xia,Tong Chen,Guanghui Hou. Study on Collaboration Intentions and Behaviors of Public Participation in the Inheritance of ICH Based on an Extended Theory of Planned Behavior[J]. Sustainability,2020,12(11).
[17]Proulx Stephen R,Dey Snigdhadip,Guzella Thiago,Teotónio Henrique. How differing modes of non-genetic inheritance affect population viability in fluctuating environments.[J]. Ecology letters,2019,22(11).
[18]Burgess Darren J. Testing the generality of non-genetic inheritance.[J]. Nature reviews. Genetics,2019,20(1).
[19]王挚. 我国17省市非物质文化遗产网站民族传统体育信息资源分析[D].云南师范大学,2017.
[20]李建阁. 非遗网络信息资源评价系统可视化设计研究[D].大连理工大学,2016.
首先要感谢我的指导老师,谢谢您在设计和论文中给我的指导。在您的细心指导下我才能快速的掌握系统的相关功能,在您的大力帮助下我才能将课本上的知识与自己的项目结合,真正的做到学以致用。感谢您经常牺牲自己的休息时间,利用其丰富的教学和项目经验对我进行指导。
感谢我的同学们,对我的大力支持及帮助,正是你们不断的帮助、鼓励,给我带来了极大的动力,最终系统可以顺利的运行。我们在交流、谈论的这段时间,将是我未来的财富,我要深深地感谢你们!