分布式开发医疗挂号系统数据字典模块前后端实现

目录
  • 一、后端接口
    • 1.数据库表设计
    • 2.编写三层调用
      • Controller层
      • Service层
      • Mapper层
  • 二、前端页面
    • 1.添加路由
    • 2.添加跳转页面
    • 3.页面表格渲染
  • 三、标准Debug流程

数据字典可以管理系统常用的分类数据或 固定数据,例如:省市区三级联动数据、民族数据、行业数据、学历数据等。由于我们的 分布式医疗挂号系统 大量使用这种数据,所有我们要做一个数据管理,方便管理系统数据,并且在一般的系统中基本都会做数据管理。

数据字典主要功能:使系统中的各项数据变的更加的严格,这样有利于降低因为数据问题而导致的bug。

一、后端接口

1.数据库表设计

数据字典的数据库表字段和对应的实体类的属性应该是一一对应的,但要注意下面两个地方:

添加上@TableLogic表示为逻辑删除,后续删除操作会自动变为修改操作。为了实现页面上单击展开子节点的功能,额外使用@TableField(exist = false)加入ha’s’Children属性。

2.编写三层调用

根据下图总结的三层调用关系,我们需要分别编写好Controlller层、Service层、Mapper层的代码。

Controller层

通过url:/admin/cmn/dict/findChildData/{id} 访问资源到达控制层后,控制层调用服务层的findChildData(Long id)方法。

@Api(tags = "数据字典接口")
@RestController
@RequestMapping("/admin/cmn/dict")
@CrossOrigin
public class DictController {
    @Autowired
    private DictService dictService;
    @ApiOperation(value = "根据id查询子数据列表")
    @GetMapping("findChildData/{id}")
    public Result findChildData(@PathVariable Long id) {
        List<Dict> list = dictService.findChildData(id);
        return Result.ok(list);
    }
}

Service层

在服务层根据id查询子数据列表,调用数据层的查询方法查到子数据集合后,将集合遍历,遍历过程中为每条记录的hasChildren属性赋值。具体业务逻辑详见下面的代码:

Service接口继承IService<T>接口:

public interface DictService extends IService<Dict> {
    /**
     * 根据id查询子数据列表
     * @param id
     * @return list
     */
    List<Dict> findChildData(Long id);
}

Service实现类继承ServiceImpl<TMapper, T>类:

@Service
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements DictService {
    /**
     * 根据id查询子数据列表
     * @param id
     * @return list
     */
    @Override
    public List<Dict> findChildData(Long id) {
        QueryWrapper<Dict> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("parent_id", id);
        List<Dict> dictList = baseMapper.selectList(queryWrapper);
        for (Dict dict : dictList) {
            // 得到每一条记录的id值
            Long dictId = dict.getId();
            // 调用hasChildren方法判断是否包含子节点
            boolean flag = this.hasChildren(dictId);
            // 为每条记录设置hasChildren属性
            dict.setHasChildren(flag);
        }
        return dictList;
    }
    /**
     * 判断id下面是否有子结点
     * @param id
     * @return true:有子结点,false:无子结点
     */
    private boolean hasChildren(Long id) {
        QueryWrapper<Dict> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("parent_id", id);
        Integer count = baseMapper.selectCount(queryWrapper);
        return count > 0;
    }
}

Mapper层

Mapper接口继承了BaseMapper<T>接口。由于服务层调用的方法是BaseMapper自带的方法,所以在数据层,我们并没有给出具体的方法。

public interface DictMapper extends BaseMapper<Dict> {
}

由于在数据字典模块中配置类、配置文件不是我们主要研究的内容,所以这里不再给出,具体可参考github仓库代码。至此,数据字典模块的后端接口已经完成:

二、前端页面

1.添加路由

由于数据管理中的数据字典是一个全新的页面,我们可以将数据字典的路由设置为/cmn/list,路由到/cmn/list后,会跳转到/views/dict/list.js资源。

  // 数据字典路由
  {
    path: '/cmn',
    component: Layout,
    redirect: '/cmn/list',
    name: '数据管理',
    meta: { title: '数据管理', icon: 'example' },
    // 如果只有一级会仅显示子按钮,添加alwaysShow=true 可以使父按钮也显示
    alwaysShow:true,
    children: [
      {
        path: 'list',
        name: '数据字典',
        component: () => import('@/views/dict/list'),
        meta: { title: '数据字典', icon: 'table' }
      }
    ]
  },

2.添加跳转页面

路由后,跳转到/views/dict/list.js页面,下面给出此页面的逻辑片段代码和其调用的api接口代码:

3.页面表格渲染

表格渲染我们使用elementUI提供开发文档:树形数据与懒加载表格组件

修改后的代码如下:

:data=“list”

查出来的数据。

:load=“getChildrens”

加载getChildrens方法。

:tree-props="{ children: ‘children’, hasChildren: ‘hasChildren’ }"

树的属性值,通过属性值来判断hasChildren中的值是true还是false。

<template>
  <div class="app-container">
    <el-table
      :data="list"
      :load="getChildrens"
      :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
      style="width: 100%"
      row-key="id"
      border
      lazy>
      <el-table-column label="名称" width="230" align="left">
        <template slot-scope="scope">
          <span>{{ scope.row.name }}</span>
        </template>
      </el-table-column>
      <el-table-column label="编码" width="220">
        <template slot-scope="{ row }">
          {{ row.dictCode }}
        </template>
      </el-table-column>
      <el-table-column label="值" width="230" align="left">
        <template slot-scope="scope">
          <span>{{ scope.row.value }}</span>
        </template>
      </el-table-column>
      <el-table-column label="创建时间" align="center">
        <template slot-scope="scope">
          <span>{{ scope.row.createTime }}</span>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

三、标准Debug流程

目前数据字典模块的前后端已经开发完成了,但是此刻如果允许程序,页面并不会加载到后端传过来的数据。因为不同的访问请求访问到不同的服务器中,我们为数据字典模块设置端口是8202,而前端config/dev.env.js中,配置的是之前医院设置模块中的8201端口。

我们可以加入Nginx暂时解决,后期也会加入路由来替换掉Nginx,不过仅为了展示效果,这里简单的将前端 config/dev.env.js 中的端口改为和数据字典模块8202统一的端口。关于Nginx和添加统一路由会在后续的文章中进行介绍。

至此,数据字典模块的初步功能就已经实现完成了。

以上就是分布式开发医疗挂号系统数据字典模块前后端实现的详细内容,更多关于分布式医疗挂号系统数据字典模块前后端的资料请关注我们其它相关文章!

(0)

相关推荐

  • 实战分布式医疗挂号系统之设置微服务搭建医院模块

    目录 文章导读 一.项目模块划分图 二.开发前的准备工作 1.医院设置数据库表设计 2.搭建医院设置微服务模块 三.医院设置微服务模块开发 步骤1:生成表对应的实体类 步骤2:创建Mapper 步骤3:创建Service 步骤4:创建Controller 四.测试开发环境 文章导读 本系列文章介绍从0开始搭建一个基于分布式的医疗挂号系统.本次四篇文章完成了医院设置微服务模块的后端接口,为了方便开发,对接口的返回结果.全局异常.全局日志进行了统一处理. 同时,为了方便进行访问测试,还整合了Swag

  • 实战分布式医疗挂号系统之整合Swagger2到通用模块

    目录 通用模块整合swagger2步骤 2.配置Swagger2 3.启动类添加包扫描 测试 swagger常用注解 本系列文章介绍从0开始搭建一个基于分布式的医疗挂号系统.本次四篇文章完成了医院设置微服务模块的后端接口,为了方便开发,对接口的返回结果.全局异常.全局日志进行了统一处理. 同时,为了方便进行访问测试,还整合了Swagger2工具,这些通用的模块中,除了全局日志被放在医院设置微服务模块的配置资源中,其余都统一被抽取在common模块中.具体实现可参考下面文章: 医院设置微服务 |

  • 实战分布式医疗挂号系统之设置微服务接口开发模块

    目录 文章导读 一.框架调用流程 二.医院设置表接口开发 1.增 2.删 (1)逻辑删除记录 (2)批量删除记录 3.改 (1)修改记录 4.查 (1)查询所有记录 (2)条件查询带分页 (3)根据id获取记录 5.锁定和解锁表 6.发送签名密钥 文章导读 本系列文章介绍从0开始搭建一个基于分布式的医疗挂号系统.本次四篇文章完成了医院设置微服务模块的后端接口,为了方便开发,对接口的返回结果.全局异常.全局日志进行了统一处理. 同时,为了方便进行访问测试,还整合了Swagger2工具,这些通用的模

  • 实战分布式医疗挂号通用模块统一返回结果异常日志处理

    目录 文章导读 一.统一返回结果 1.统一返回结果类 2.统一返回状态信息类 二.统一异常处理 1.自定义异常类 2.全局异常处理 三.统一日志处理 文章导读 本系列文章介绍从0开始搭建一个基于分布式的医疗挂号系统.本次四篇文章完成了医院设置微服务模块的后端接口,为了方便开发,对接口的返回结果.全局异常.全局日志进行了统一处理. 同时,为了方便进行访问测试,还整合了Swagger2工具,这些通用的模块中,除了全局日志被放在医院设置微服务模块的配置资源中,其余都统一被抽取在common模块中.具体

  • 分布式开发医疗挂号系统数据字典模块前后端实现

    目录 一.后端接口 1.数据库表设计 2.编写三层调用 Controller层 Service层 Mapper层 二.前端页面 1.添加路由 2.添加跳转页面 3.页面表格渲染 三.标准Debug流程 数据字典可以管理系统常用的分类数据或 固定数据,例如:省市区三级联动数据.民族数据.行业数据.学历数据等.由于我们的 分布式医疗挂号系统 大量使用这种数据,所有我们要做一个数据管理,方便管理系统数据,并且在一般的系统中基本都会做数据管理. 数据字典主要功能:使系统中的各项数据变的更加的严格,这样有

  • 分布式医疗挂号系统之搭建后台管理系统页面

    目录 前言 一.搭建前端环境 (1)引入项目到项目工作区 (2)根据package.json下载依赖 (3)启动创建好的前端项目 二.前端环境目录结构 (1)总体目录概览 (2)关键文件 package.js build/webpack.dev.conf.js index.html src/main.js config/dev.env.js src/utils/request.js src/api/login.js 三.登录改造 (1)登入方法改造 获取用户信息方法改造 登出方法改造 前端登出方

  • VUE搭建分布式医疗挂号系统后台管理页面示例步骤

    目录 前言 一.搭建前端环境 (1)引入项目到项目工作区 (2)根据package.json下载依赖 (3)启动创建好的前端项目 二.前端环境目录结构 (1)总体目录概览 (2)关键文件 package.js build/webpack.dev.conf.js index.html src/main.js config/dev.env.js src/utils/request.js src/api/login.js 三.登录改造 登入方法改造 获取用户信息方法改造 登出方法改造 前端登出方法改造

  • VUE开发分布式医疗挂号系统的医院设置页面步骤

    目录 一.显示记录列表功能 1.显示列表组件 2.分页组件 3.条件查询组件 二.删除记录功能 1.删除单条记录 2.批量删除记录 三.锁定和解锁功能 四.添加记录功能 五.修改功能 六.解决组件重用问题 分布式医疗挂号系统 | 开发医院设置页面 在分布式医疗挂号系统中,前端主要使用的两个技术是Vue和ElementUI.医院设置微服务模块的后端之前已经完成,现在需要借助Vue+ElementUI完成医院设置微服务模块的前端页面: 一.显示记录列表功能 1.显示列表组件 带斑马纹表格开发文档:

  • 分布式医疗挂号系统Nacos微服务Feign远程调用数据字典

    目录 步骤1:向Nacos服务中心注册微服务 (1)引入Nacos依赖 步骤2:使用Feign进行远程调用 (1)service-hosp医院列表接口 (2)service-cmn医院等级/地址接口 (3)引入Feign依赖 (4)调用端通过包扫描Feign (5)远程调用 步骤3:使用swagger测试 需求:制作一个医院列表的显示功能.列表中包含医院编号.医院等级.医院地址.状态等.分析:首先确定是典型的条件查询带分页.由于医院的等级需要查询数据字典部分,这个调用是在不同的微服务模块中,这就

  • 实战开发分布式医疗挂号系统上传医院接口

    目录 一.集成MongoDB 二.开发Controller层 医院管理的Service层 四.Respository数据层 五.测试上传医院接口 需求:在<分布式预约挂号平台>中完成上传医院接口开发,再通过医院接口模拟系统(医院管理表)调用平台中的接口,从而实现上传医院的功能.另外,所有通过平台中接口上传的信息都需要被保存到MongoDB中,通过MongoDB来进行操作. 本篇文章根据上述需求,对<分布式医疗挂号系统>中的上传医院接口进行实现,项目代码已同步至github,http

  • 分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存

    目录 一.SpringCache介绍 二.项目集成Spring Cache 1.添加缓存相关依赖 2.添加redis配置类 3.添加redos配置 三.数据字典配置Spring Cache 1.缓存@Cacheable 2.缓存@CachePut 四.测试缓存是否添加成功 一.SpringCache介绍 Spring Cache 是一个优秀的缓存组件.自Spring 3.1起,提供了类似于@Transactional注解事务的注解Cache支持,且提供了Cache抽象,方便切换各种底层Cache

随机推荐