当前位置: 首页 > article >正文

医院信息化与智能化系统(13)

医院信息化与智能化系统(13)

这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置
如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应的代码

预约挂号微服务模块搭建

前端知识点补充,此章节不会详细讲具体前端的每个知识点

1、集成医院接口模拟系统

这是一个已经提供的项目(简称:项目B),需要把它移植到yygh_parent总项目中来

先在项目中以Spring Initializr创建Maven模块hospital-manage,它放在yygh_parent

在pom中更改spring-boot版本为2.2.1.RELEASE

将项目B中的com文件复制到src/main/java文件夹下,resources文件直接导入项目文件即可,将其标记为资源根目录。(ps:网传该文件下的/templates中的.html文件有病毒…,自查方法是,在Vscode中打开该文件,然后查询是否有VBScript标签或者<script language="VBScript">,有的话删除掉)

接着把项目B的pom文件的依赖,引入到hospital-managepom文件中,其中关于redis注释掉的依赖也需要加上。

application-dev.yml中修改redis的hostname(IP)和数据库的url配置、用户密码配置(datasource下)

接着在创建数据库yygh_manage并导入三张表 hospital_set、order_info、schedule

此表sql文件数据,来自B站用户浅笑灬桔提供,下载地址,提取码 738w;如果JOSN格式可以导入数据库,可以直接使用提供的JSON数据(其中,如果hospital_set中添加的那条数据id不为1,后续网页操作会报错,所以一定要注意!!,可以自己主动修改为1

在这里插入图片描述

在导入的项目中,如果你报了很多错误,一些import的包显示无法解析符号XXX,我的做法是:yygh_manage的pom.xml文件,更改其parent标签内的信息,改为

    <parent>
        <groupId>com.xxx</groupId>
        <artifactId>yygh_parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

如果操作正常,在项目启动之后,url:localhost:9998你将进入下面的界面。
在这里插入图片描述

2、实体类创建

第一步是复制工具类,将提供的helper文件夹,放在service-util模块的yygh/common下,里面存放了HttpRequestHelper类(这里面的import语句,需要重新导入一下,有的路径变了,并且JSONObject的依赖需要加到pom.xml中);再把提供的HttpUtil类,放在yygh/common/utils

<!--  JSONObject依赖, 版本号不需要添加,主项目设定了     -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>

第二步,在service-hosp模块引入mongodb相关依赖,在application.properties添加mongodb配置信息。

第三步,创建repository、service和controller;

其中创建repository/HospitalRepository接口,继承MongoRepository接口,并指定泛型为Hospital类,这是关于医院信息的类。在其上用@Repository 注解修饰,用于标识数据访问层的组件,提供异常处理和组件扫描的支持,使得数据访问逻辑的实现更加清晰和可管理。

在service文件夹创建HospitalService接口,并在service/impl创建HospitalServiceImpl用于实现该接口,并且该实体类用@Service修饰,并在其中注入HospitalRepository

@Service
public class HospitalServiceImpl implements HospitalService {

    @Autowired
    private HospitalRepository hospitalRepository;
}

最后在service/controller中创建api文件夹,里面创建ApiController类,内部用@RestController@RequestMapping修饰,其中的路径是与项目B中的方法路径对应的,并非随意取名。

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

3、上传医院 接口

ApiController创建上传医院方法,用于上传医院的基本信息与规则信息,这里的url也要与项目B中的对应,具体接口路径需要查阅项目B的接口文档

接收一个HttpServletRequest对象,这个对象包含了请求的所有信息。

Map<String, String[]> requestMap获取请求参数并存储在requestMap中,参数名作为键,参数值的数组作为值

Map<String, Object> paremMap转换成另一个类型的映射,方便后续将String[]转为单个Object

后续需要创建hospitalService.save方法,将接受的参数保存到数据库

    @PostMapping("saveHospital")
    public Result saveHosp(HttpServletRequest request){
        //获取传递过来的信息
        Map<String, String[]> requestMap = request.getParameterMap();
        Map<String, Object> paremMap = HttpRequestHelper.switchMap(requestMap);
        //调用service的方法
        hospitalService.save(paremMap);
        return Result.ok();
    }

HospitalServiceImpl中实现save方法,它逻辑顺序是,先把map集合转换成Hospital对象(利用之前导入的fastjson依赖),再判断数据库是否存在相同数据,存在则对原数据进行修改,不存在则进行添加

判断是否存在的方法,Spring Data提供了对mongodb数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范命名函数即可自动实现。

所以在HospitalRepository中声明方法getHospitalByHoscode,具体规则可以百度springdata方法定义规范

具体修改与添加的步骤是:

  1. 修改:getHospitalByHoscode的返回值存在,前端传入的值并不包括id、status、CreateTimeUpdateTime,所以在保存前要对其进行提前赋值,前三个就用返回值字段属性,最后一个用当前时间Date类就行。
  2. 添加statusCreateTimeUpdateTime设置为默认值0与当前时间,在把接收的值添加。

完成以后同时运行service-hosphospital-manage,进行测试,打开http://localhost:9998/->医院管理->添加,把资料提供的hospital.josn内容粘贴进去,再点击保存内容。期间有一些错误弹窗可以暂时不理会,因为项目还没完善。

在这里插入图片描述

可以在Navicat中新建关于Mongodb的连接,这样就能图形化查看自己的mongodb数据库了

后续设置

校验设置:在数据库yygh_hospyygh_manage中都有’hospital_set’,要在ApiController的save方法添加一个校验功能。
在ApiController中要注入HospitalSetService,这样才能操作yygh_hosp库的hospital_set表的sign_key

...//save方法体
 Map<String, Object> paremMap = HttpRequestHelper.switchMap(requestMap);
        //获取医院系统传递过来的签名,签名进行了MD5加密
        String hospSign = (String) paremMap.get("sign");
        //根据传递过来的医院编码,查询数据库、查询签名
        String hoscode = (String) paremMap.get("hoscode");
        String signKey = hospitalSetService.getSignKey(hoscode);
	    ...

这里在HospitalSetServiceImpl中实现getSignKey方法,即根据hoscode获取sign_key。

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

测试前把hospital-manageHttpRequestHelper中的getSign方法体内容全部注释掉,并将

//方法体内容
   String md5Str = MD5.encrypt(signKey);
        return md5Str;

保证yygh_manage中的hospital_set内的hoscode与sign_key与yygh_hosp中的对应;

其次logo图片转换为base64字符串时,该字符串中包含大量的加号+,服务器在解析数据时会把加号当成连接符,转换为空格,所以在添加数据时,要把空格转为加号。

// saveHosp
...
  String logoData = (String) paremMap.get("logoData");
        logoData = logoData.replaceAll(" ","+");
        paremMap.put("logoData",logoData);

验证图片时,删除之前的mongodb数据库内容,重新把hospital.josn内容上传,再把logoData中的字段内容复制,这里假设其内容为conment
创建一个txt文件夹,构建如下标签,并另存为.html文件,打开就会显示图片

<img src="data:image/png;base64,conment"/>

在这里插入图片描述


http://www.kler.cn/a/372281.html

相关文章:

  • kubernetes——part2-3 使用RKE构建企业生产级Kubernetes集群
  • net mvc中使用vue自定义组件遇到的坑
  • spring容器的启动流程
  • java-web-day5
  • C++设计模式创建型模式———生成器模式
  • (史上超级清晰带图解)红黑树的实现--C++
  • React Query已过时?新一代请求工具横空出世
  • 日本也有九九乘法表?你会读吗?柯桥零基础学日语到蓝天广场
  • openharmony北向开发入门教程汇总
  • 【非关系型分布式数据库】HBase从入门到面试学习总结
  • Python实现随机分布式延迟PSO优化算法(RODDPSO)优化DBSCAN膨胀聚类模型项目实战
  • IDEA 安装热部署 JRebel -新版-亲测有效
  • Android13预置应用及授权开发
  • Thread类及线程的核心操作
  • Java集合常见面试题总结(5)
  • 常见的开发工具及其作用
  • [论文阅读] GPT-4 Technical Report
  • Kotlin-协程基础
  • 【面试经典150】day 9
  • PostgreSQL 清理 WAL 文件
  • 2024“源鲁杯“高校网络安全技能大赛-Misc-WP
  • 逆变器竞品分析--绿联150W方案【2024/10/30】
  • Docker搭建官方私有仓库registry及相关配置
  • 基于树莓派的安保巡逻机器人--(一、快速人脸录入与精准人脸识别)
  • DGUS屏使用方法
  • 易至狂欢购车季火热开启,EV3青春版打造年轻一代出行新选择