在分析了项目开发的背景、意义以及其开发的可行性后,接下来就是探讨项目的功能划分,以及具体实现的时候对项目数据库各种表的设计,在本章会做一个系统的介绍。
-
-
系统功能模块设计
系功能模块的设计就是把系统具体要实现哪些功能,功能如何划分做一个系统的架构,以模块图的方式展示出来,方便我们进行功能得罗列以及涉及。在系统的功能方面,项目分成了管理员+系统用户两个模块,每个模块登录进去对应相应的功能,具体的功能模块图如图3.1所示。
图3.1 物流车辆管理系统功能模块图
-
-
数据库设计
数据库的设计承载者系统的各种数据,在一个系统中各种数据都需要一个专门的容器,数据库就是这个容器,在建立数据库的时候,主要是数据库模型的设计以及各个数据库表的设计两部分。
-
-
-
数据库概念结构设计
下面是整个物流车辆管理系统中主要的数据库表总E-R实体关系图。
图3.2 物流车辆管理系统总E-R关系图
-
-
-
数据库逻辑结构设计
通过前面E-R关系图可以看到项目需要创建很多个数据表。以下是项目中的主要数据库表的关系模型:
表approval_rejection (审批驳回)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
approval_rejection_id |
int |
10 |
0 |
N |
Y |
|
审批驳回ID |
2 |
vehicle_model_number |
varchar |
64 |
0 |
Y |
N |
|
车型编号 |
3 |
vehicle_classification |
varchar |
64 |
0 |
Y |
N |
|
车辆分类 |
4 |
vehicle_brand |
varchar |
64 |
0 |
Y |
N |
|
车辆品牌 |
5 |
vehicle_load |
varchar |
64 |
0 |
Y |
N |
|
车辆载重 |
6 |
application_quantity |
varchar |
64 |
0 |
Y |
N |
|
申请数量 |
7 |
user_name |
int |
10 |
0 |
Y |
N |
0 |
用户姓名 |
8 |
job_no |
varchar |
64 |
0 |
Y |
N |
|
工号 |
9 |
reason_for_rejection |
text |
65535 |
0 |
Y |
N |
|
驳回原因 |
10 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
11 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
12 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表approved (审批通过)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
approved_id |
int |
10 |
0 |
N |
Y |
|
审批通过ID |
2 |
vehicle_model_number |
varchar |
64 |
0 |
Y |
N |
|
车型编号 |
3 |
vehicle_classification |
varchar |
64 |
0 |
Y |
N |
|
车辆分类 |
4 |
vehicle_brand |
varchar |
64 |
0 |
Y |
N |
|
车辆品牌 |
5 |
vehicle_load |
varchar |
64 |
0 |
Y |
N |
|
车辆载重 |
6 |
application_quantity |
varchar |
64 |
0 |
Y |
N |
|
申请数量 |
7 |
user_name |
int |
10 |
0 |
Y |
N |
0 |
用户姓名 |
8 |
job_no |
varchar |
64 |
0 |
Y |
N |
|
工号 |
9 |
approval_content |
text |
65535 |
0 |
Y |
N |
|
批示内容 |
10 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
11 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
12 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表auth (用户权限管理)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
auth_id |
int |
10 |
0 |
N |
Y |
|
授权ID: |
2 |
user_group |
varchar |
64 |
0 |
Y |
N |
|
用户组: |
3 |
mod_name |
varchar |
64 |
0 |
Y |
N |
|
模块名: |
4 |
table_name |
varchar |
64 |
0 |
Y |
N |
|
表名: |
5 |
page_title |
varchar |
255 |
0 |
Y |
N |
|
页面标题: |
6 |
path |
varchar |
255 |
0 |
Y |
N |
|
路由路径: |
7 |
position |
varchar |
32 |
0 |
Y |
N |
|
位置: |
8 |
mode |
varchar |
32 |
0 |
N |
N |
_blank |
跳转方式: |
9 |
add |
tinyint |
3 |
0 |
N |
N |
1 |
是否可增加: |
10 |
del |
tinyint |
3 |
0 |
N |
N |
1 |
是否可删除: |
11 |
set |
tinyint |
3 |
0 |
N |
N |
1 |
是否可修改: |
12 |
get |
tinyint |
3 |
0 |
N |
N |
1 |
是否可查看: |
13 |
field_add |
text |
65535 |
0 |
Y |
N |
|
添加字段: |
14 |
field_set |
text |
65535 |
0 |
Y |
N |
|
修改字段: |
15 |
field_get |
text |
65535 |
0 |
Y |
N |
|
查询字段: |
16 |
table_nav_name |
varchar |
500 |
0 |
Y |
N |
|
跨表导航名称: |
17 |
table_nav |
varchar |
500 |
0 |
Y |
N |
|
跨表导航: |
18 |
option |
text |
65535 |
0 |
Y |
N |
|
配置: |
19 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间: |
20 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间: |
表general_management_users (普管用户)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
general_management_users_id |
int |
10 |
0 |
N |
Y |
|
普管用户ID |
2 |
name_of_general_manager |
varchar |
64 |
0 |
N |
N |
|
普管姓名 |
3 |
examine_state |
varchar |
16 |
0 |
N |
N |
已通过 |
审核状态 |
4 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
5 |
user_id |
int |
10 |
0 |
N |
N |
0 |
用户ID |
6 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
7 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表logistics_tasks (物流任务)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
logistics_tasks_id |
int |
10 |
0 |
N |
Y |
|
物流任务ID |
2 |
vehicle_model_number |
varchar |
64 |
0 |
Y |
N |
|
车型编号 |
3 |
vehicle_classification |
varchar |
64 |
0 |
Y |
N |
|
车辆分类 |
4 |
vehicle_brand |
varchar |
64 |
0 |
Y |
N |
|
车辆品牌 |
5 |
vehicle_load |
varchar |
64 |
0 |
Y |
N |
|
车辆载重 |
6 |
application_quantity |
varchar |
64 |
0 |
Y |
N |
|
申请数量 |
7 |
user_name |
int |
10 |
0 |
Y |
N |
0 |
用户姓名 |
8 |
job_no |
varchar |
64 |
0 |
Y |
N |
|
工号 |
9 |
task_name |
varchar |
64 |
0 |
Y |
N |
|
任务名称 |
10 |
progress_status |
varchar |
64 |
0 |
Y |
N |
|
进行状态 |
11 |
task_details |
text |
65535 |
0 |
Y |
N |
|
任务详情 |
12 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
13 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
14 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表maintenance_information (维护信息)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
maintenance_information_id |
int |
10 |
0 |
N |
Y |
|
维护信息ID |
2 |
vehicle_model_number |
varchar |
64 |
0 |
N |
N |
|
车型编号 |
3 |
vehicle_classification |
varchar |
64 |
0 |
Y |
N |
|
车辆分类 |
4 |
vehicle_brand |
varchar |
64 |
0 |
Y |
N |
|
车辆品牌 |
5 |
maintenance_content |
varchar |
64 |
0 |
Y |
N |
|
维护内容 |
6 |
maintenance_date |
date |
10 |
0 |
Y |
N |
|
维护日期 |
7 |
maintenance_staff |
int |
10 |
0 |
Y |
N |
0 |
维护人员 |
8 |
maintenance_details |
text |
65535 |
0 |
Y |
N |
|
维护详情 |
9 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
10 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
11 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表return_record (还车记录)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
return_record_id |
int |
10 |
0 |
N |
Y |
|
还车记录ID |
2 |
vehicle_model_number |
varchar |
64 |
0 |
Y |
N |
|
车型编号 |
3 |
vehicle_classification |
varchar |
64 |
0 |
Y |
N |
|
车辆分类 |
4 |
vehicle_brand |
varchar |
64 |
0 |
Y |
N |
|
车辆品牌 |
5 |
vehicle_load |
varchar |
64 |
0 |
Y |
N |
|
车辆载重 |
6 |
user_name |
int |
10 |
0 |
Y |
N |
0 |
用户姓名 |
7 |
job_no |
varchar |
64 |
0 |
Y |
N |
|
工号 |
8 |
number_of_returns |
int |
10 |
0 |
Y |
N |
0 |
还车数量 |
9 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
10 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
11 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表system_users (系统用户)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
system_users_id |
int |
10 |
0 |
N |
Y |
|
系统用户ID |
2 |
user_name |
varchar |
64 |
0 |
N |
N |
|
用户姓名 |
3 |
job_no |
varchar |
64 |
0 |
Y |
N |
|
工号 |
4 |
examine_state |
varchar |
16 |
0 |
N |
N |
已通过 |
审核状态 |
5 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
6 |
user_id |
int |
10 |
0 |
N |
N |
0 |
用户ID |
7 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表tourist_users (游客用户)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
tourist_users_id |
int |
10 |
0 |
N |
Y |
|
游客用户ID |
2 |
tourist_name |
varchar |
64 |
0 |
N |
N |
|
游客姓名 |
3 |
examine_state |
varchar |
16 |
0 |
N |
N |
已通过 |
审核状态 |
4 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
5 |
user_id |
int |
10 |
0 |
N |
N |
0 |
用户ID |
6 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
7 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表vehicle_application (车辆申请)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
vehicle_application_id |
int |
10 |
0 |
N |
Y |
|
车辆申请ID |
2 |
vehicle_model_number |
varchar |
64 |
0 |
Y |
N |
|
车型编号 |
3 |
vehicle_classification |
varchar |
64 |
0 |
Y |
N |
|
车辆分类 |
4 |
vehicle_brand |
varchar |
64 |
0 |
Y |
N |
|
车辆品牌 |
5 |
vehicle_load |
varchar |
64 |
0 |
Y |
N |
|
车辆载重 |
6 |
application_quantity |
int |
10 |
0 |
Y |
N |
0 |
申请数量 |
7 |
user_name |
int |
10 |
0 |
Y |
N |
0 |
用户姓名 |
8 |
job_no |
varchar |
64 |
0 |
Y |
N |
|
工号 |
9 |
application_purpose |
text |
65535 |
0 |
Y |
N |
|
申请用途 |
10 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
11 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
12 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表vehicle_classification (车辆分类)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
vehicle_classification_id |
int |
10 |
0 |
N |
Y |
|
车辆分类ID |
2 |
classification_name |
varchar |
64 |
0 |
Y |
N |
|
分类名称 |
3 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
4 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
5 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表vehicle_information (车辆信息)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
vehicle_information_id |
int |
10 |
0 |
N |
Y |
|
车辆信息ID |
2 |
vehicle_diagram |
varchar |
255 |
0 |
Y |
N |
|
车辆图 |
3 |
vehicle_model_number |
varchar |
64 |
0 |
N |
N |
|
车型编号 |
4 |
vehicle_classification |
varchar |
64 |
0 |
Y |
N |
|
车辆分类 |
5 |
vehicle_brand |
varchar |
64 |
0 |
Y |
N |
|
车辆品牌 |
6 |
vehicle_load |
varchar |
64 |
0 |
Y |
N |
|
车辆载重 |
7 |
remaining_quantity |
int |
10 |
0 |
Y |
N |
0 |
剩余数量 |
8 |
vehicle_details |
text |
65535 |
0 |
Y |
N |
|
车辆详情 |
9 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
10 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
11 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
管理员、系统用户在登录界面输入账号+密码,点击“登录”按钮,系统在用户数据库表中会对管理员和系统用户的账号进行匹配,账号+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,其主界面展示如下图4.1所示。
图4.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, "账号或密码不正确");
}
}
-
- 系统用户管理模块
管理员可以对系统中所有的用户角色进行管控,包含了管理员以及系统用户这两种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户,这里以管理员用户为例。界面如下图4.2所示。
图4.2系统用户界面图
系统用户关键代码如下所示。
@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();
}
-
- 权限管理模块
管理员点击“权限管理”按钮可以分配系统中用户的所拥有的权限。界面如下图4.3所示。
图4.3权限管理界面图
-
- 车辆信息模块
点击“车辆信息”这个菜单,可以查看到系统中所有添加的车辆信息,支持通过车辆品牌或者车辆分类对车辆信息进行查询,如果想要了解某一车辆的详细信息,点击后面的“详情”会进入详情界面,用户和管理员如果想要选择某一车辆,点击“车辆申请/维护车辆”按钮,根据提示填写对应的信息,点击“提交”按钮,信息没有错误在数据库就会提交成功,申请/维护成功。界面如下图4.4所示。
图4.4 车辆信息界面图
车辆信息关键代码如下。
@RequestMapping(value = {"/count_group", "/count"})
public Map<String, Object> count(HttpServletRequest request) {
Query count = service.count(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
-
- 车辆申请模块
点击“车辆申请”这个按钮可以查看到自己提交的车辆申请,支持通过车型编号或者车辆分类进行查询车辆申请,如果想要了解某一车辆申请的详细信息,点击后面的“查看”会进入详情界面,也支持对自己选择的车辆申请进行删除;管理员可以对用户提交的车辆进行申请添加,选择某一车辆申请,点击后面的“审批通过/审批驳回”按钮,根据提示输入对应的信息,点击“提交”后,审批通过/审批驳回就录入成功了。界面如下图4.5所示。
图4.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());
}
-
- 审批驳回模块
管理员和用户点击“审批驳回”这个按钮可以查看到系统中的审批驳回信息,支持通过车型编号遇车辆分类进行查询审批驳回信息,如果想要添加新的审批驳回信息,点击“添加”按钮然后根据提示输入审批驳回信息,点击“提交”后,在审批驳回界面就会显示新增的审批驳回信息,可以点击某一审批驳回信息查看审批驳回信息的详情,也可以直接点击“删除”进行删除审批驳回。界面如下图4.6所示。
图4.6 审批驳回界面图
审批驳回关键代码如下所示。
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
return success(1);
}
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 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<>();
}
}
@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))));
log.info("[{}] - 更新操作:{}",table,sql);
Query query1 = runCountSql(sql.toString());
query1.executeUpdate();
}
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 "";
}
-
- 物流任务模块
点击“物流任务”这个菜单,可以查看到系统中所有添加的物流任务,支持通过车型编号或者车辆分类对物流任务进行查询,如果想要了解某一物流任务的详细信息,点击后面的“详情”会进入详情界面,用户和管理员如果想要选择某一任务,点击“还车”按钮,根据提示填写对应的信息,点击“提交”按钮,信息没有错误在数据库就会提交成功,还车成功。界面如下图4.7所示。
图4.7物流任务界面图
-
- 还车记录模块
点击“还车记录”这个按钮可以查看到系统中的还车记录信息,支持通过车型编号或者车辆分类进行查询还车记录信息,如果想要添加新的还车记录信息,点击“添加”按钮然后根据提示输入还车记录信息,点击“提交”后,在还车记录界面就会显示新增的还车记录信息,可以点击某一还车记录信息查看还车记录信息的详情,也可以直接点击“删除”进行删除还车记录。界面如下图4.8所示。
图4.8 还车记录界面图
还车记录关键代码如下所示。
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
@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();
}
-
- 维护信息模块
点击“维护信息”这个按钮可以查看到系统中的维护信息,支持通过维护内容或者维护日期进行查询维护信息,如果想要添加新的维护信息,点击“添加”按钮然后根据提示输入维护信息,点击“提交”后,在维护信息界面就会显示新增的维护信息,可以点击某一维护信息查看维护信息的详情,也可以直接点击“删除”进行删除维护信息。界面如下图4.9所示。
图4.9 维护信息界面图
[2]林秀强,荆志强,董占龙. 一种数字物流车辆管理系统[P]. 河北省:CN115860624A,2023-03-28.
[3]赵将.Java语言在计算机软件开发中的应用[J].数字技术与应用,2023,41(03):160-162.DOI:10.19695/j.cnki.cn12-1369.2023.03.46.
[4]刘丹青,李超,王青海.基于Java技术的藏汉双语学前教育云平台设计与实现[J].信息技术,2023,47(02):17-23.DOI:10.13274/j.cnki.hdzj.2023.02.004.
[5]苏佳旭,白燕,温晓东.基于Web前端与MySQL数据库的自然灾害应急信息共享平台设计与实现[J].电脑知识与技术,2023,19(05):74-77.DOI:10.14004/j.cnki.ckt.2023.0274.
[6]佟羽齐,刘德华,张栎柯,李剑波,张俊杰.基于SpringBoot框架的钻前管理系统的设计与实现[J].信息与电脑(理论版),2023,35(02):111-113.
[7]杨一帆.服务于MySQL数据库的在线监测系统设计[J].自动化技术与应用,2022,41(10):179-182.DOI:10.20033/j.1003-7241.(2022)10-0179-04.
[8]林佳一.混合式教学在高职MySQL数据库课程的实践研究[J].电脑知识与技术,2022,18(26):133-135.DOI:10.14004/j.cnki.ckt.2022.1737.
[9]李楠.供应物流车辆一体管理系统的研究实现[J].软件,2022,43(06):106-108.
[10]王曼维,杨荻,李岩,及松洁.基于SpringBoot框架的智慧医疗问诊系统设计与实现[J].中国医学装备,2022,19(03):133-136.
[11]陈光年. 船舶企业物流车辆管理系统的设计与实现[C]//中国造船工程学会.2021年数字化造船学术交流会议论文集.2021年数字化造船学术交流会议论文集,2021:120-123.DOI:10.26914/c.cnkihy.2021.076919.
[12]何会齐,任璐璐,邢永建等. 入厂物流交付车辆管理系统新思路[C]//河南省汽车工程学会.第十八届河南省汽车工程科技学术研讨会论文集.第十八届河南省汽车工程科技学术研讨会论文集,2021:15-16.DOI:10.26914/c.cnkihy.2021.062040.
[13]朱先涛,薛亮.基于北斗卫星导航的物流车辆管理信息系统设计[J].软件工程,2021,24(08):60-62+59.DOI:10.19644/j.cnki.issn2096-1472.2021.08.014.
[14]韩雪娜,李晖.基于RFID技术的食品物流车辆管理系统设计[J].包装与食品机械,2021,39(03):73-77.
[15]Fuyuan Cheng. Talent Recruitment Management System for Small and Micro Enterprises Based on Springboot Framework[J]. Advances in Educational Technology and Psychology,2021,5(2).
[16]柳杨. 物流车辆管理系统的设计与实现[D].杭州电子科技大学,2021.DOI:10.27075/d.cnki.ghzdc.2021.000731.
[17]Jian Chen,Chen Jian,Pan Hailan. Design of Man Hour Management Information System on SpringBoot Framework[J]. Journal of Physics: Conference Series,2020,1646(1).
[18]周杰,席兵,张治中,范云珂.基于物联网的物流车辆管理系统的设计[J].信息通信,2018(03):61-64.