学校快递站点管理|基于springboot学校快递站点管理设计与实现(源码+数据库+文档)

学校快递站点管理系统目录

目录

基于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 || || 更新时间 || 可空 |||

五、核心代码

java 复制代码
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博客

八、源码获取:

大家点赞、收藏、关注、评论 啦 、👇🏻获取联系方式在文章末尾👇🏻

相关推荐
苏渡苇1 分钟前
Spring Cloud Alibaba:将 Sentinel 熔断限流规则持久化到 Nacos 配置中心
数据库·spring boot·mysql·spring cloud·nacos·sentinel·持久化
小马爱打代码19 分钟前
Spring源码 第九篇:Spring 5 源码深度拆解 - Spring 事件驱动模型
java·后端·spring
ForgeAI码匠1 小时前
ForgeAdmin|Spring Boot 3 后台框架的自动配置设计:少写配置,多做组合
java·spring boot·后端
tongluowan0071 小时前
Redisson的参数及工作原理
java·redis·lua·分布式锁
仙俊红2 小时前
Integer\int对比,equals()\hashcode面试
java·面试·职场和发展
WiChP2 小时前
【V0.1B10】从零开始的2D游戏引擎开发之路
java·数据库·游戏引擎
云烟成雨TD2 小时前
Spring AI Alibaba 1.x 系列【60】检查点机制原理与全流程剖析
java·人工智能·spring
ForgeAI码匠2 小时前
Maven 多模块项目如何避免越写越乱?Forge Admin 的模块边界实践
java·人工智能·开源·maven
z落落2 小时前
C# 数组 最终完整版全套笔记(一维+多维+交错+引用类型+对象数组)
java·笔记·c#
Access开发易登软件2 小时前
Access 和 SQLite,根本不在一个赛道上
java·jvm·数据库·sqlite·excel·vba·access开发