ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

分布式医疗挂号系统(十一) | 开发上传医院接口

2021-04-19 19:02:25  阅读:273  来源: 互联网

标签:String MongoDB hospital 接口 医院 挂号 上传 分布式


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

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

开发上传医院接口


一、集成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中也需要有一个对应的实体类。
hospital文档中的记录说明

二、开发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测试记录。
在医院接口模拟系统中添加JSON数据

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

至此,开发上传医院接口的后端代码,全部完成。

标签:String,MongoDB,hospital,接口,医院,挂号,上传,分布式
来源: https://blog.csdn.net/weixin_43691058/article/details/115867064

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有