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

目录
  • 一、集成MongoDB
  • 二、开发Controller层
  • 医院管理的Service层
  • 四、Respository数据层
  • 五、测试上传医院接口

需求:在《分布式预约挂号平台》中完成上传医院接口开发,再通过医院接口模拟系统(医院管理表)调用平台中的接口,从而实现上传医院的功能。另外,所有通过平台中接口上传的信息都需要被保存到MongoDB中,通过MongoDB来进行操作。

本篇文章根据上述需求,对《分布式医疗挂号系统》中的上传医院接口进行实现,项目代码已同步至github,https://github.com/Guoqianliang/yygh_parent

一、集成MongoDB

上传医院接口的开发仍然在之前创建好的service-hosp模块中进行,由于此次额外使用了MongoDB技术,所以首先需要引入MongoDB的依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

除了引入MongoDB的依赖还需要将MongoDB数据库添加到配置中:

spring.data.mongodb.uri=mongodb://[ip地址]:27017/[MongoDB的数据库]

将来通过接口会向MongoDB上传一张hospital文档,下标对这些记录进行说明,这些表在Java中也需要有一个对应的实体类。

二、开发Controller层

上传医院的接口路径为:/api/hosp/saveHospital,下面分析ApiController中上传医院接口所做的事情:

1.将从医院管理表传递过来的医院信息转换为Object类型

2.获取医院管理表中的密钥(已经使用MD5加密好了)

3.获取医院设置表中的密钥并进行MD5加密 此处调用医院设置业务层

4.密钥不匹配就抛出错误

5.传递的图片涉及base64编码问题,需要将logoData记录中所有的" "替换为+

6.执行上传操作 此处调用医院管理业务层

详细代码实现:

@RestController
@RequestMapping("/api/hosp")
public class ApiController {
    @Autowired
    private HospitalService hospitalService;

    @Autowired
    private HospitalSetService hospitalSetService;

    @ApiOperation(value = "上传医院到数据库")
    @PostMapping("saveHospital")
    public Result saveHosp(HttpServletRequest request) {
        // 1.将从医院管理表传递过来的医院信息转换为Object类型
        Map<String, String[]> requestMap = request.getParameterMap();
        Map<String, Object> paramMap = HttpRequestHelper.switchMap(requestMap);

        // 2.获取医院管理表中的密钥(已经使用MD5加密好了)
        String hospSign = (String) paramMap.get("sign");

        // 3.获取医院设置表中的密钥并进行MD5加密
        String hoscode = (String) paramMap.get("hoscode");
        String signKey = hospitalSetService.getSignKey(hoscode);
        String signKeyMd5 = MD5.encrypt(signKey);

        // 4.密钥不匹配就抛出错误
        if (!hospSign.equals(signKeyMd5)) {
            throw new YyghException(ResultCodeEnum.SIGN_ERROR);
        }

        // 5.传递的图片涉及base64编码问题,需要将logoData记录中所有的" "替换为+
        String logoData = (String) paramMap.get("logoData");
        logoData = logoData.replaceAll(" ", "+");
        paramMap.put("logoData", logoData);

        // 6.执行上传操作
        hospitalService.save(paramMap);
        return Result.ok();
    }
}

三、开发Service层 医院设置的Service层

在医院设置的Service层中根据医院编码获取SignKey,下面是接口和实现类:

public interface HospitalSetService extends IService<HospitalSet> {

    String getSignKey(String hoscode);
}
@Service
public class HospitalSetServiceImpl extends ServiceImpl<HospitalSetMapper, HospitalSet>
        implements HospitalSetService {

    @Override
    public String getSignKey(String hoscode) {
        QueryWrapper<HospitalSet> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("hoscode", hoscode);
        HospitalSet hospitalSet = baseMapper.selectOne(queryWrapper);
        return hospitalSet.getSignKey();
    }
}

医院管理的Service层

分析医院管理Service层所做的事情:

1.把参宿map集合转换为Hospital对象(借助JSONObject工具)

2.判断MongoDB中是否已有这条记录

3.如果有就执行更新,没有就执行保存

详细代码实现:

public interface HospitalService {

    void save(Map<String, Object> paramMap);
}
@Service
public class HospitalServiceImpl implements HospitalService {

    @Autowired
    private HospitalRepository hospitalRepository;

    @Override
    public void save(Map<String, Object> paramMap) {
        // 1.把参宿map集合转换为Hospital对象(借助JSONObject工具)
        String mapString = JSONObject.toJSONString(paramMap);
        Hospital hospital = JSONObject.parseObject(mapString, Hospital.class);

        // 2.判断MongoDB中是否已有这条记录
        String hoscode = hospital.getHoscode();
        Hospital hospitalExist = hospitalRepository.getHospitalByHoscode(hoscode);

        // 3.如果有就执行更新,没有就执行保存
        if (null != hospitalExist) {
            hospital.setStatus(hospitalExist.getStatus());
            hospital.setCreateTime(hospitalExist.getCreateTime());
            hospital.setUpdateTime(new Date());
            hospital.setIsDeleted(0);
            hospitalRepository.save(hospital);
        } else {
            //0:未上线 1:已上线
            hospital.setStatus(0);
            hospital.setCreateTime(new Date());
            hospital.setUpdateTime(new Date());
            hospital.setIsDeleted(0);
            hospitalRepository.save(hospital);
        }
    }
}

四、Respository数据层

在Respository层中仅仅进行了根据HosCode获得记录的方法定义,MongoDB会智能的为我们生成相应查询代码。(这需要我们对类名进行规范定义,当然,这并不是本篇文章所讨论的内容)

@Repository
public interface HospitalRepository extends MongoRepository<Hospital,String> {
    /**
     * 根据HosCode获得记录
     * @param hoscode
     * @return
     */
    Hospital getHospitalByHoscode(String hoscode);
}

五、测试上传医院接口

运行医院设置和医院管理两个微服务模块,打开医院管理模块的模拟添加页面,加入一条JSON测试记录。

点击保存后,调用医院设置中的api接口,最终将数据保存到了MongoDB中:

至此,开发上传医院接口的后端代码,全部完成,更多关于分布式医疗挂号系统上传医院接口的资料请关注我们其它相关文章!

(0)

相关推荐

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

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

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

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

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

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

  • 分布式医疗挂号系统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

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

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

  • 分布式医疗挂号系统EasyExcel导入导出数据字典的使用

    目录 一.导出数据字典到Excel 1.创建导出实体类 2.后台接口代码 Controller层 Service层 3.页面导出按钮 4.测试数据导出到Excel 二.导入数据字典到网页 1.后台接口代码 Controller层 Service层 配置监听器 2.页面导入按钮 3.测试数据导入到网页 一.导出数据字典到Excel 1.创建导出实体类 这里导出数据时,只导出网页上每条记录的id.父id.名称.编码.值. @Data public class DictEeVo { @ExcelPro

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

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

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

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

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

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

  • 实战分布式医疗挂号系统开发医院科室及排班的接口

    目录 一.医院接口 查询医院接口 二.科室接口 (1)上传科室功能 (2)查询科室功能 (3)删除科室功能 三.排班接口 (1)上传排班功能 (2)查询排班功能 (3)删除排班功能 一.医院接口 本文继续开发分布式医疗挂号系统,进入到医院信息.科室.排版接口的开发,内容比较枯燥.关于医院医院信息的上传接口实现,已经在上一篇文章中进行了介绍,本文继续对接口进行扩展. 查询医院接口 Controller层: @PostMapping("hospital/show") public Resu

  • 实战分布式医疗挂号系统登录接口整合阿里云短信详情

    目录 步骤1:搭建service-user用户模块 1.启动类&配置网关 步骤2:整合JWT 步骤3: 搭建service-msm短信模块(整合阿里云短信) 1.启动类&配置网关 4.三层调用 步骤4:登录页面前端 1.封装api请求 2.添加登录组件 3.登录全局事件 附加:用户认证与网关整合 1.在服务网关添加fillter 2.调整前端代码 本篇文章完成的需求: 1,登录采取弹出层的形式. 2,登录方式: (1)手机号码+手机验证码 (2)微信扫描(后文完成) 3,无注册界面,第一次

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

    目录 前言 一.搭建前端环境 (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 三.登录改造 登入方法改造 获取用户信息方法改造 登出方法改造 前端登出方法改造

随机推荐