操作文档
首页
  • 智能网关系列入门
  • 配置软件使用说明
  • 智能网关系列入门(新)
  • 配置软件使用说明(新)
  • 云平台使用说明
  • 云组态使用说明
  • 数据分析使用说明
  • Box系列使用说明
  • MQTT接入
  • BOXConfig使用教程(新)
  • 云平台使用教程
  • 报表设计器使用教程
  • BOXConfig使用教程
开发者平台
  • 硬件相关
  • 配置软件相关
  • 平台相关
  • 远程编程相关
  • 组态设计相关
  • 报表相关
  • 第三方BOX相关
  • BoxConfig相关
私有化平台
更新记录
首页
  • 智能网关系列入门
  • 配置软件使用说明
  • 智能网关系列入门(新)
  • 配置软件使用说明(新)
  • 云平台使用说明
  • 云组态使用说明
  • 数据分析使用说明
  • Box系列使用说明
  • MQTT接入
  • BOXConfig使用教程(新)
  • 云平台使用教程
  • 报表设计器使用教程
  • BOXConfig使用教程
开发者平台
  • 硬件相关
  • 配置软件相关
  • 平台相关
  • 远程编程相关
  • 组态设计相关
  • 报表相关
  • 第三方BOX相关
  • BoxConfig相关
私有化平台
更新记录
  • 新手指引
  • 平台简介

  • 开发者后台

  • API文档

  • 示例教程

    • 综合示例
    • 平台内置前端代码开发
    • 更改内置界面风格样式
    • 更改内置菜单名称和位置
    • 搭建并上传自定义前端代码
    • 自定义接口配置代理及应用
    • 自定义业务和用户企业项目建立关联
      • 1.创建数据库
      • 2.使用Mybatis-plus 构建
      • 3.编写后台业务逻辑
        • 3.1新增报修记录
        • 3.2查询报修数据
    • 添加自定义系统菜单及获取用户token信息
    • 添加自定义项目菜单及获取项目信息
    • 使用webhook拦截系统业务事件
    • 响应数据推送事件
    • 手动获取超级管理员token及应用
    • 系统菜单前端添加自定义页面按钮权限
    • 项目菜单前端添加自定义页面按钮权限
    • 添加自定义操作日志到平台
  • 常见问题

  • 开发者平台
  • 示例教程
2022-09-20
目录

自定义业务和用户企业项目建立关联

概述:

此节将带领开发者创建自定义扩展模块(报修示例),实现扩展业务对象和平台内置业务对象建立关联关系。

# 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.使用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

添加报修状态、报修时间、报修id,并保存报修记录到数据库里面。

    // 0 表示待处理
    repair.setState(0);
    repair.setId(IDUtil.getUUID());
    repair.setRepairTime(new Date());
    boolean save = this.save(repair);
1
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

通过项目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

将项目信息转换成【项目id:项目名字】的‘Map键值对’。

    Map<String, String> projectMap = projectVoList.stream()
                .collect(Collectors.toMap(ProjectVo::getId, p -> p.getName()));
1
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

源码下载 (opens new window)

自定义接口配置代理及应用
添加自定义系统菜单及获取用户token信息

← 自定义接口配置代理及应用 添加自定义系统菜单及获取用户token信息→

最近更新
01
菜单栏里找不到“BOX配置”如何处理
06-06
02
购买了新型号的BOX,在配置软件里找不到该型号
06-06
03
部分电脑安装BoxConfig后无法运行
06-06
更多文章>
Copyright © 2021-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式