自定义业务和用户企业项目建立关联
概述:
此节将带领开发者创建自定义扩展模块(报修示例),实现扩展业务对象和平台内置业务对象建立关联关系。
# 1.创建数据库
-- 该示例数据库使用MySql数据库。表结构示例如下:
CREATE TABLE `repair` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`created_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建名字',
`created_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建人id',
`repair_time` datetime(0) NOT NULL COMMENT '报修时间',
`describe` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '问题描述',
`urgency` int(4) NOT NULL COMMENT '紧急程度(1:非常紧急、2:紧急、3:一般)',
`state` int(4) NOT NULL COMMENT '状态(0:待处理、1:处理完成)',
`Timeout` int(4) NOT NULL COMMENT '超时时间',
`handle_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理人id',
`handle_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理名字',
`handle_time` datetime(0) NULL DEFAULT NULL COMMENT '处理时间',
`project_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所属项目',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 2.使用Mybatis-plus 构建
概述:
Mybatis-plus
是一个Mybatis
的增强工具为简化开发、提升效率而诞生代码生成可以使用编译工具IDEA
生成同时也可以使用Java
代码生成(Mybatis-plus 官网 (opens new window))。IDEA 生成示例如下:
# 3.编写后台业务逻辑
Mybatis
现在已经生成完毕接下来将带领开发者编写新增报修、根据项目ID 查询报修数据。
# 3.1新增报修记录
新增报修记录时要校验数据不能为空。
// 检验参数 不能为空
if (ObjectUtil.isNull(repair)){
return Result.fail("不能添加空值");
}
if (StringUtils.isEmpty(repair.getCreatedBy())){
return Result.fail("创建人不能为空");
}
if (StringUtils.isEmpty(repair.getDescribe())){
return Result.fail("问题描述不能为空");
}
if (null == repair.getUrgency()|| repair.getUrgency() == 0){
return Result.fail("紧急程度不能为空");
}
if (null == repair.getTimeout() || repair.getTimeout() == 0){
return Result.fail("超时时间不能为空");
}
if (StringUtils.isEmpty(repair.getProjectId())){
return Result.fail("项目不能为空");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
添加报修状态、报修时间、报修id,并保存报修记录到数据库里面。
// 0 表示待处理
repair.setState(0);
repair.setId(IDUtil.getUUID());
repair.setRepairTime(new Date());
boolean save = this.save(repair);
1
2
3
4
5
2
3
4
5
# 3.2查询报修数据
根据项目ID查询报修记录需要用户的token并校验参数不能为空。
if (projectIds.isEmpty()){
return Result.failKey("项目 id 不能为空");
}
if (StringUtils.isEmpty(token)){
return Result.failKey("token 不能为空");
}
1
2
3
4
5
6
2
3
4
5
6
通过项目ID查询项目下方的报修记录并使用云平台的SDK通过‘项目ID’查询具体的项目信息。
// 查询 报修记录
List<Repair> list = this.lambdaQuery().in(Repair::getProjectId, projectIds).list();
// 通过sdk 查询项目信息
ProjectApi projectApi = new ProjectApi(token);
List<ProjectVo> projectVoList = projectApi.getProjectListByIds(projectIds)
.getData();
1
2
3
4
5
6
2
3
4
5
6
将项目信息转换成【项目id:项目名字】的‘Map键值对’。
Map<String, String> projectMap = projectVoList.stream()
.collect(Collectors.toMap(ProjectVo::getId, p -> p.getName()));
1
2
2
转换超时时间和增加项目id对应的项目名字
// 根据项目ID查询报修记录 示例如下:
List<RepairVO> repairVOList = new ArrayList<>();
for (Repair repair : list) {
if (projectMap.containsKey(repair.getProjectId())){
RepairVO repairVO = new RepairVO();
BeanUtils.copyProperties(repair,repairVO);
repairVO.setProjectName(projectMap.get(repair.getProjectId()));
conversionTime(repair,repairVO);
repairVOList.add(repairVO);
}
}
private void conversionTime(Repair repair,RepairVO repairVO){
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(repair.getRepairTime());
rightNow.add(Calendar.DATE,repair.getTimeout());
repairVO.setExpiration(rightNow.getTime());
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17