快递站点管理|基于springboot校园快递站点管理设计与实现(源码+数据库+文档)
- 其他
- 2025-09-15 22:54:01

学校快递站点管理系统目录
目录
基于springboot学校快递站点管理设计与实现
一、前言
二、系统功能设计
三、系统实现
前台功能模块
后台功能角模块
四、数据库设计
1、实体ER图
2、具体的表设计如下所示:
五、核心代码
六、论文参考
七、最新计算机毕设选题推荐
八、源码获取:
博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️
主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。
🍅文末获取源码联系🍅
基于springboot学校快递站点管理设计与实现 一、前言降低快递站的运营人员成本,实现了快递业务的标准化,防止了快递业务的随意管理,管理员:用户管理、校园资讯管理,校园交流论坛管理,快递信息管理、评价管理、寄快递管理、申请接单管理、取快递管理等功能。快递公司信息管理、快递柜管理 工作人员:快递信息、寄快递管理、评价管理、申请接单,学校快递站点管理人员和学生需要对学校快递站点相关的一些信息进行管理的需求,设计了学校快递站点管理系统的框架,给出了学校快递站点管理系统的总体设计,并对学校快递站点管理系统的架构及关键模块的实现过程进行了详细论述。采用JAVA的springboot框架和MySQL数据库技术,基于B/S模式实现了一个完整系统的设计,为大使用者提供了良好的学校快递站点管理的系统。
关键词:学校快递站点管理;JAVA;springboot;MySQL
二、系统功能设计系统的整体架构确定以后,再来看学校快递站点管理系统的主要功能模块图。整体的功能模块包括管理员+快递公司+快递员+学生四个模块,实现了对快递站点相关信息的查询管理,系统功能模块如图所示。
三、系统实现学校快递站点管理系统的详细设计与实现主要是根据前面的学校快递站点管理系统的需求分析和学校快递站点管理系统的总体设计来设计页面并实现业务逻辑。主要从学校快递站点管理系统界面实现、业务逻辑实现这两部分进行介绍。
前台功能模块1、前台首页界面
当进入学校快递站点管理系统的时候,首先映入眼帘的是系统的导航栏、轮播图以及公告信息,在左上角能够看到导航栏,其主界面展示如下图4.1所示。
图4.1 首页界面图
注册界面
不是学校快递站点管理系统中用户的是可以在线进行注册的,当用户点击右上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号后等信息再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可学生注册成功。其用学生注册界面展示如下图4.2所示。
图4.2 学生注册界面图
校园资讯界面
当访客点击学校快递站点管理系统中导航栏上的“校园资讯”后将会进入到该“校园资讯”列表的界面,然后选择想要看的校园资讯,点击进入到详细界面,校园资讯界面如下图4.4 所示。
图4.4校园资讯界面图
交流论坛界面
当学生登录到系统中以后,点击“交流论坛”这一菜单,会显示所有的交流标题,可以查看交流详情进行评论,也可以发布交流内容,同时支持输入关键词对交流论坛信息进行搜索。界面如下图4.5所示。
图4.5交流论坛界面图
我的账户界面
当学生点击右上角“我的”这个按钮,会出现子菜单,点击“我的账户”可以对个人的资料以及登录系统的密码进行设置,我的账户界面如下图4.6所示。
图4.6我的账户界面图
后台功能角模块学校快递站点管理系统的管理员人员包括了管理员、快递公司、快递员以及学生四部分,其中管理员拥有最高的权限,可以对用户信息、系统信息以及学校快递站点信息进行管控。
快递信息界面
快速公司点击“快递信息”会显示出所有的快递信息,支持输入快递单号或者是快递公司对快递信息进行查询,如果想要添加新的快递,点击“添加”按钮,快递单号是自动生成的,然后输入快递公司、快递数量、学生姓名、学生账号、学生电话、快递员。快递员电话、配送时间、公司账号,点击“提交按钮”就可以添加了,同样如果快递信息有错误,可以点击“编辑”对快速信息进行更新,也可以选择某一条快速信息,点击“删除”进行删除。界面如下图4.7所示。
图4.7快递信息界面图
快递配送界面
快递员点击“快速信息”后面的“快递配送”按钮,然后根据提示选择柜号、输入存放时间、取件码,点击“提交”进行快递配送后,就会在快递配送中显示自己提交的快递配送信息。界面如下图4.9所示。
图4.9快递配送界面图
快递取件界面
学生点击“快递配送”后面的“快递取件”按钮,然后根据提示填写好取件备注,点击“提交”进行快递取件后,就会在快递取件中显示自己提交的快递取件信息。界面展示如下图4.10所示。
图4.10快递取件界面图
快递评价界面
学生点击“快递取件”后面的“快递评价”按钮,然后根据提示填写好评价时间、评价详情,点击“提交”进行快递评价后,就会在快递评价中显示自己提交的快递评价信息,界面如下图4.11所示。
图4.11 快递评价界面图
寄快递界面
学生点击“寄快递”会显示出自己曾经提交的所有的寄快递信息,支持输入寄件人或者是寄件电话对快递进行查询,如果想要进行寄快递操作,点击“添加”按钮,输入寄件人、寄件人电话、物品类型、我怕种类、寄件地址,点击“提交”按钮就可以添加了,同样如果快递信息有错误,可以点击“编辑”对快递信息进行更新,也可以选择某一条快递信息,点击“删除”进行删除。界面如下图4.12所示。
图4.12 寄快递界面图
四、数据库设计 1、实体ER图学校快递站点管理系统采用的是MYSQL的数据库进行存储的,数据库里面储存了很多的表信息,在此罗列出来一些主要的数据库E-R模型图。
图3.2 寄快递信息E-R关系图
图3.3 快递取件信息E-R关系图
图3.4 快递物流信息E-R关系图
2、具体的表设计如下所示:数据库系统一旦选定之后,需要根据程序要求在数据库中建立数据库文件,并在已经完成创建的数据库文件里面,为程序运行中产生的数据建立对应的数据表格,数据表结构设计就是对创建的数据表格进行字段设计,字段长度设计,字段类型设计等,当数据表格合理设计完成之后,才能正常存储相关程序运行产生的数据信息。
表3.1 寄快递信息use_express_delivery表
序号
数据库字段
字段类型
字段长度
存储内容
备注
1
use_express_delivery_id
int
11
主键
主键
2
sender
varchar
64
寄件人
可空
3
sender_telephone
varchar
64
寄件人电话
可空
4
`item_type
varchar
64
物品类型
可空
5
article_weight
int
11
物品重量
可空
6
mailing_address
varchar
64
寄件地址
可空
7
recommend
int
11
智能推荐
可空
8
create_time
datetime
创建时间
可空
9
update_time
timestamp
更新时间
可空
(2)表express_pick_up实体用来存快递取件信息中的快递单号、快递公司、快递数量、学生姓名、学生电话、快递员、快递员电话等;
表3.2 快递取件信息express_pick_up表
序号
数据库字段
字段类型
字段长度
存储内容
备注
1
express_pick_up_id
int
11
主键
主键
2
`courier_number`
varchar
64
快递单号
可空
3
`courier_services_company
varchar
64
快递公司
可空
4
express_quantity`
varchar
64
快递数量
可空
5
`student_name
varchar
64
学生姓名
可空
6
student_telephone
varchar
64
学生电话
可空
7
courier
varchar
64
快递员
可空
8
courier_telephone
varchar
64
快递员电话
可空
9
pick_up_time
varchar
64
取件时间
可空
10
`student
varchar
64
学生
可空
11
notes_on_taking_parts
varchar
64
取件备注
可空
12
recommend
int
11
智能推荐
可空
13
create_time
datetime
创建时间
可空
14
update_time
timestamp
更新时间
可空
(3)表express_logistics实体用来存放快递物流信息中的就进入、快递单号、快递公司、发货地、目的地、公司账号等;
表3.3快递物流信息express_logistics表
序号
数据库字段
字段类型
字段长度
存储内容
备注
1
express_logistics_id
int
11
主键
主键
2
sender
varchar
64
寄件人
可空
3
courier_number
varchar
64
快递单号
可空
4
courier_services_company`
varchar
64
快递公司
可空
5
place_of_shipment
varchar
64
发货地
可空
6
destination
varchar
64
目的地
可空
7
company_account_number
int
11
公司账号
可空
8
logistics_information
longtext
物流信息
可空
9
recommend
int
11
智能推荐
可空
10
create_time
datetime
创建时间
可空
11
update_time
timestamp
更新时间
可空
五、核心代码 package com.project.demo.service; import com.project.demo.entity.ExpressCabinet; import com.project.demo.service.base.BaseService; import org.springframework.stereotype.Service; /** * 快递柜:(ExpressCabinet)表服务接口 * */ @Service public class ExpressCabinetService extends BaseService<ExpressCabinet> { } package com.project.demo.service; import com.project.demo.entity.ExpressCharges; import com.project.demo.service.base.BaseService; import org.springframework.stereotype.Service; /** * 快递收取费用:(ExpressCharges)表服务接口 * */ @Service public class ExpressChargesService extends BaseService<ExpressCharges> { } package com.project.demo.service.base; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.project.demo.constant.FindConfig; import lombok.extern.slf4j.Slf4j; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.lang.reflect.ParameterizedType; import java.net.URLDecoder; import java.security.MessageDigest; import java.util.*; /** */ @Slf4j public class BaseService <E>{ @Autowired @PersistenceContext private EntityManager entityManager; Class<E> eClass = (Class<E>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0]; private final String table = humpToLine(eClass.getSimpleName()); public Query runEntitySql(String sql){ return entityManager.createNativeQuery(sql, eClass); } public Query runCountSql(String sql){ return entityManager.createNativeQuery(sql); } 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(); } @Transactional public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){ StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET "); for (Map.Entry<String,Object> entry:body.entrySet()){ Object value = entry.getValue(); if (value instanceof String){ sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(","); }else { sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(","); } } sql.deleteCharAt(sql.length()-1); sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE)))); // sql.append(";"); log.info("[{}] - 更新操作:{}",table,sql); Query query1 = runCountSql(sql.toString()); query1.executeUpdate(); } public Map<String,Object> selectToPage(Map<String,String> query,Map<String,String> config){ Query select = select(query, config); Map<String,Object> map = new HashMap<>(); map.put("list",select.getResultList()); map.put("count",count(query,config).getSingleResult()); return map; } public Map<String,Object> selectToList(Map<String,String> query,Map<String,String> config){ Query select = selectGroupCount(query, config); Map<String,Object> map = new HashMap<>(); map.put("list",select.getResultList()); return map; } public Map<String,Object> selectBarGroup(Map<String,String> query,Map<String,String> config){ Query select = barGroup(query, config); Map<String,Object> map = new HashMap<>(); map.put("list",select.getResultList()); return map; } public Query barGroup(Map<String,String> query,Map<String,String> config){ StringBuffer sql = new StringBuffer(" SELECT "); if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){ sql.append(config.get(FindConfig.GROUP_BY)); if (config.get(FindConfig.FIELD) != null && !"".equals(config.get(FindConfig.FIELD))){ String[] fieldList = config.get(FindConfig.FIELD).split(","); for (int i=0;i<fieldList.length;i++) sql.append(" ,SUM(").append(fieldList[i]).append(")"); } sql.append(" FROM ").append("`").append(table).append("`"); sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE)))); sql.append(" ").append("GROUP BY ").append(config.get(FindConfig.GROUP_BY)); }else { sql.append(" SUM(").append(config.get(FindConfig.GROUP_BY)).append(") FROM ").append("`").append(table).append("`"); sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE)))); } log.info("[{}] - 查询操作,sql: {}",table,sql); return runCountSql(sql.toString()); } public Query selectGroupCount(Map<String,String> query,Map<String,String> config){ StringBuffer sql = new StringBuffer("select COUNT(*) AS count_value, "); sql.append(config.get(FindConfig.GROUP_BY)).append(" "); sql.append("from ").append("`").append(table).append("` "); sql.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(" "); } log.info("[{}] - 查询操作,sql: {}",table,sql); return runCountSql(sql.toString()); } 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()); } @Transactional public void delete(Map<String,String> query,Map<String,String> config){ StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" "); sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY)))); log.info("[{}] - 删除操作:{}",table,sql); Query query1 = runCountSql(sql.toString()); query1.executeUpdate(); } public Query count(Map<String,String> query,Map<String,String> config){ StringBuffer sql = new StringBuffer("SELECT "); // log.info("拼接统计函数前"); if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){ sql.append(config.get(FindConfig.GROUP_BY)).append(" ,COUNT(").append(config.get(FindConfig.GROUP_BY)).append(") FROM ").append("`").append(table).append("`"); sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE)))); // sql.append(" ").append("GROUP BY ").append(config.get(FindConfig.GROUP_BY)); }else { sql.append("COUNT(*) FROM ").append("`").append(table).append("`"); sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE)))); } log.info("[{}] - 统计操作,sql: {}",table,sql); return runCountSql(sql.toString()); } public Query sum(Map<String,String> query,Map<String,String> config){ StringBuffer sql = new StringBuffer(" SELECT "); if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){ sql.append(config.get(FindConfig.GROUP_BY)).append(" ,SUM(").append(config.get(FindConfig.FIELD)).append(") FROM ").append("`").append(table).append("`"); sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE)))); sql.append(" ").append("GROUP BY ").append(config.get(FindConfig.GROUP_BY)); }else { sql.append(" SUM(").append(config.get(FindConfig.FIELD)).append(") FROM ").append("`").append(table).append("`"); sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE)))); } log.info("[{}] - 查询操作,sql: {}",table,sql); return runCountSql(sql.toString()); } public Query avg(Map<String,String> query,Map<String,String> config){ StringBuffer sql = new StringBuffer(" SELECT "); if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){ sql.append(config.get(FindConfig.GROUP_BY)).append(" ,AVG(").append(config.get(FindConfig.FIELD)).append(") FROM ").append("`").append(table).append("`"); sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE)))); sql.append(" ").append("GROUP BY ").append(config.get(FindConfig.GROUP_BY)); }else { sql.append(" AVG(").append(config.get(FindConfig.FIELD)).append(") FROM ").append("`").append(table).append("`"); sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE)))); } log.info("[{}] - 查询操作,sql: {}",table,sql); return runCountSql(sql.toString()); } public String toWhereSql(Map<String,String> query, Boolean like) { if (query.size() > 0) { try { StringBuilder sql = new StringBuilder(" WHERE "); for (Map.Entry<String, String> entry : query.entrySet()) { if (entry.getKey().contains(FindConfig.MIN_)) { String min = humpToLine(entry.getKey()).replace("_min", ""); sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and "); continue; } if (entry.getKey().contains(FindConfig.MAX_)) { String max = humpToLine(entry.getKey()).replace("_max", ""); sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and "); continue; } if (like == true) { sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and "); } else { sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and "); } } sql.delete(sql.length() - 4, sql.length()); sql.append(" "); return sql.toString(); } catch (UnsupportedEncodingException e) { log.info("拼接sql 失败:{}", e.getMessage()); } } return ""; } 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 Map<String,String> readQuery(HttpServletRequest request){ String queryString = request.getQueryString(); if (queryString != null && !"".equals(queryString)) { String[] querys = queryString.split("&"); Map<String, String> map = new HashMap<>(); for (String query : querys) { String[] q = query.split("="); map.put(q[0], q[1]); } map.remove(FindConfig.PAGE); map.remove(FindConfig.SIZE); map.remove(FindConfig.LIKE); map.remove(FindConfig.ORDER_BY); map.remove(FindConfig.FIELD); map.remove(FindConfig.GROUP_BY); map.remove(FindConfig.MAX_); map.remove(FindConfig.MIN_); return map; }else { return new HashMap<>(); } } public Map<String,String> readConfig(HttpServletRequest request){ Map<String,String> map = new HashMap<>(); map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE)); map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE)); map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE)); map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY)); map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD)); map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY)); map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_)); map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_)); return map; } public void importDb(MultipartFile file) throws IOException { if (file.isEmpty()) { return; } List<Map<String,String>> body = new ArrayList<>(); String fileName = file.getOriginalFilename(); if (fileName == null){ return; } String suffix = fileName.substring(fileName.lastIndexOf(".")+1); InputStream ins = file.getInputStream(); Workbook wb = null; if(suffix.equals("xlsx")){ wb = new XSSFWorkbook(ins); }else{ wb = new HSSFWorkbook(ins); } Sheet sheet = wb.getSheetAt(0); if(null != sheet){ for(int line = 0; line <= sheet.getLastRowNum();line++){ Row row = sheet.getRow(line); if(null == row){ continue; } Iterator<Cell> cellIterator = row.cellIterator(); StringBuffer sql = new StringBuffer("INSERT INTO ").append(table).append(" VALUES (null,"); while (cellIterator.hasNext()){ sql.append(cellIterator.next().getStringCellValue()).append(","); } sql.deleteCharAt(sql.length()); sql.append(")"); runCountSql(sql.toString()); } } } public HSSFWorkbook exportDb(Map<String,String> query,Map<String,String> config){ Query select = select(query, config); List<Map<String,String>> resultList = select.getResultList(); HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(table); HSSFCellStyle headerStyle = workbook.createCellStyle(); headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); for (int i = 0; i < resultList.size(); i++) { HSSFRow row = sheet.createRow(i); Map<String,String> map = resultList.get(i); int j = 0; for (Map.Entry<String,String> entry:map.entrySet()){ row.createCell(j).setCellValue(new HSSFRichTextString(entry.getValue())); } } return workbook; } @Transactional public void save(E e){ String s = JSONObject.toJSONString(e); Map map = JSONObject.parseObject(s, Map.class); insert(map); } public E findOne(Map<String, String> map){ try { Query select = select(map, new HashMap<>()); return (E) select.getSingleResult(); }catch (Exception e){ return null; } } public String encryption(String plainText) { String re_md5 = new String(); try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes()); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } re_md5 = buf.toString(); } catch (Exception e) { e.printStackTrace(); } return re_md5; } public static String humpToLine(String str) { if (str == null) { return null; } // 将驼峰字符串转换成数组 char[] charArray = str.toCharArray(); StringBuilder buffer = new StringBuilder(); //处理字符串 for (int i = 0, l = charArray.length; i < l; i++) { if (charArray[i] >= 65 && charArray[i] <= 90) { buffer.append("_").append(charArray[i] += 32); } else { buffer.append(charArray[i]); } } String s = buffer.toString(); if (s.startsWith("_")){ return s.substring(1); }else { return s; } } public JSONObject covertObject(JSONObject object) { if (object == null) { return null; } JSONObject newObject = new JSONObject(); Set<String> set = object.keySet(); for (String key : set) { Object value = object.get(key); if (value instanceof JSONArray) { //数组 value = covertArray(object.getJSONArray(key)); } else if (value instanceof JSONObject) { //对象 value = covertObject(object.getJSONObject(key)); } //这个方法自己写的改成下划线 key = humpToLine(key); newObject.put(key, value); } return newObject; } public JSONArray covertArray(JSONArray array) { if (array == null) { return null; } JSONArray newArray = new JSONArray(); for (int i = 0; i < array.size(); i++) { Object value = array.get(i); if (value instanceof JSONArray) { //数组 value = covertArray(array.getJSONArray(i)); } else if (value instanceof JSONObject) { //对象 value = covertObject(array.getJSONObject(i)); } newArray.add(value); } return newArray; } } 六、论文参考 七、最新计算机毕设选题推荐最新计算机软件毕业设计选题大全-CSDN博客
八、源码获取:大家点赞、收藏、关注、评论啦 、👇🏻获取联系方式在文章末尾👇🏻
快递站点管理|基于springboot校园快递站点管理设计与实现(源码+数据库+文档)由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“快递站点管理|基于springboot校园快递站点管理设计与实现(源码+数据库+文档)”