后端项目搭建

1.数据库

1.1.表说明

No 表名称 中文名
1 hospital 医院信息表
2 setmeal 体检套餐信息表
3 setmealdetail 体检套餐明细表
4 checkitem 检查项信息表
5 checkitemdetail 检查项明细表
6 orders 体检预约订单表
7 doctor 医生信息表
8 user 用户信息表
9 admin 管理员信息表
10 conclusion 体检结论表
11 cireport 检查项报告表
12 cidetailreport 检查项明细报告表

约束类型标识:
PK:primary key 主键
FK:foreign key 外键
NN:not null 非空
UQ:unique 唯一索引
AI: auto increment 自增长列
1.hospital

No 字段名 数据类型 size 约束 说明
1 hpld int PK、AI 医院编号
2 name varchar 40 NN 医院名称
3 img mediumtext NN 医院图片
4 telphone varchar 40 NN 医院电话
5 adress varchar 40 NN 医院地址
6 businessHours varchar 50 NN 营业时间
7 deadline varchar 50 NN 采血截止时间

2.setmeal

No 字段名 数据类型 size 约束 说明
1 smId int PK、AI 套餐编号
2 name varchar 40 NN 套餐名称
3 type char 1 NN 套餐类型 (男,女)
4 price decimal (8,2) NN 套餐价格

3.setmealdetail

No 字段名 数据类型 size 约束 说明
1 sdId int PK、AI 套餐明细编号
2 smId int NN FK 套餐编号
3 ciId int NN FK 检查项编号

4.checkitem

No 字段名 数据类型 size 约束 说明
1 ciId int PK、AI 检查项编号
2 name varchar 20 NN 检查项名称
3 content varchar 200 NN 检查项内容
4 meaning varchar 200 NN 检查项意义

5.checkitemdetail

No 字段名 数据类型 size 约束 说明
1 cdId int PK、AI 检查项明细编号
2 name varchar 40 NN 检查项细明名称
3 unit varchar 20 NN 检查项明细单位
4 minrange double NN 检查项细明正常值范围中的最小值
5 maxrange double NN 检查项细明正常值范围中的最大值
6 normalValue varchar 20 NN 检查项细明正常值(非数字型)
7 normalValueString varchar 20 NN 检查项验证范围说明文字
8 type int 1 NN 检查项明细类型(1:数值围范验证型;2:数值相等验证型;3:无需验证型;4:描述型;5:其它)
9 ciId int 11 NN 所属检查项编号

6.order

No 字段名 数据类型 size 约束 说明
1 orderId int PK、AI 订单编号
2 userId char 11 NN FK 客户编号
3 hpId int NN FK 医院编号
4 smId int NN FK 套餐编号
5 orderDate varchar 10 NN 预约日期
6 state int 1 NN 订单状态(1:未归档,2:已归档)

7.doctor

No 字段名 数据类型 size 约束 说明
1 docId int PK、AI 医生编号
2 name varchar 20 NN 医生姓名
3 password varchar 20 NN 登录密码
4 title varchar 20 NN 医生职称
5 img mediumtext NN 医生照片

8.user

No 字段名 数据类型 size 约束 说明
1 userId char 11 PK 用户编号(手机号码)
2 name varchar 20 NN 真实姓名
3 password varchar 20 NN 登录密码
4 gender char 1 NN 用户性别
5 identityCard char 18 NN 身份证号

9.admin

No 字段名 数据类型 size 约束 说明
1 loginName varchar 20 PK 登录名
2 password varchar 10 NN 登录密码
3 img mediumtext NN 管理员头像

10.conclusion

No 字段名 数据类型 size 约束 说明
1 ccId int 20 PK AI 体检结论编号
2 title varchar 40 NN 结论标题
3 content varchar 400 NN 结论内容
4 orderId int 11 NN 所属订单编号

11.cireport

No 字段名 数据类型 size 约束 说明
1 cirId int 11 PK AI 检查项报告主键
2 ciId int 11 NN 检查项编号
3 ciName varchar 30 NN 检查项名称
4 orderId int 11 NN 所属订单编号

12.cidetailreport

No 字段名 数据类型 size 约束 说明
1 cidrId int 11 PK AI 检查项明细报告主键
2 name varchar 40 NN 检查项明细名称
3 unit varchar 20 NN 检查项明细名称
4 minrange double NN 检查项细明正常值范围中的最小值'
5 maxrange double NN 检查项细明正常值范围中的最大值'
6 normalValue varchar 20 NN 检查项细明正常值(非数字型)
7 normalValueString varchar 20 NN 检查项验证范围说明文字)
8 type int 1 NN 检查项明细类型(1:数值范围验证型;2:数值相等验证型;3:无需验证型;4:描述型;5:其它)
9 value varchar 100 NN 检查项目明细值
10 isError int NN 此项是否异常(0:无异常;1:异常)
11 cirId int 11 NN 所属检查项报告编号

1.2.创建数据库

数据库名: xixin

1.3.执行建表sql

DROP TABLE IF EXISTS `admin`;
DROP TABLE IF EXISTS `checkitem`;
DROP TABLE IF EXISTS `doctor`;
DROP TABLE IF EXISTS `hospital`;
DROP TABLE IF EXISTS `order`;
DROP TABLE IF EXISTS `setmeal`;
DROP TABLE IF EXISTS `setmealdetail`;
DROP TABLE IF EXISTS `user`;
DROP TABLE IF EXISTS `inspectionreport`;
DROP TABLE IF EXISTS `cireport`;
DROP TABLE IF EXISTS `cidetailreport`;
DROP TABLE IF EXISTS `checkitemdetail`;

CREATE TABLE `admin`  (
  `loginName` varchar(20)  COMMENT '登录名',
  `password`  varchar(10) NOT NULL COMMENT '登录密码',
  `img` mediumtext NOT NULL COMMENT '管理员头像',
   PRIMARY KEY (`loginName`)
);

CREATE TABLE `checkitem`  (
  `ciId` int NOT NULL COMMENT '检查项编号',
  `name` varchar(30)  NOT NULL COMMENT '检查项名称',
  `content` varchar(200)  NOT NULL COMMENT '检查项内容',
  `meaning` varchar(200)  NOT NULL COMMENT '检查项意义',
  PRIMARY KEY (`ciId`) 
);

CREATE TABLE `checkitemdetail` (
  `cdId`  int  PRIMARY KEY  COMMENT '检查项明细编号',
  `name` varchar(40) NOT NULL COMMENT '检查项细明名称',
  `unit` varchar(20)  COMMENT '检查项明细单位',
  `minrange` double  COMMENT '检查项细明正常值范围中的最小值',
  `maxrange` double  COMMENT '检查项细明正常值范围中的最大值',
  `normalValue` varchar(20)  COMMENT '检查项细明正常值(非数字型)',
  `normalValueString` varchar(20)  COMMENT '检查项验证范围说明文字',
  `type` int NOT NULL DEFAULT '1' COMMENT '检查项明细类型(1:数值围范验证型;2:数值相等验证型;3:无需验证型;4:描述型;5:其它)',
  `ciId` int NOT NULL COMMENT '所属检查项编号'
) ;

CREATE TABLE `doctor`  (
  `docId` int NOT NULL AUTO_INCREMENT COMMENT '医生编号',
  `name` varchar(20)  NOT NULL COMMENT '医生姓名',
  `password` varchar(20)  NOT NULL COMMENT '登录密码',
  `title` varchar(20) NOT NULL COMMENT '医生职称',
  `img` mediumtext NOT NULL COMMENT '医生照片',
  PRIMARY KEY (`docId`) USING BTREE
);

CREATE TABLE `hospital`  (
  `hpId` int NOT NULL AUTO_INCREMENT COMMENT '医院编号',
  `name` varchar(30)  NOT NULL COMMENT '医院名称',
  `img` mediumtext  NOT NULL COMMENT '医院图片',
  `telephone` varchar(20) NOT NULL COMMENT '医院电话',
  `address` varchar(100)  NOT NULL COMMENT '医院地址',
  `businessHours` varchar(100) NOT NULL COMMENT '营业时间',
  `deadline` varchar(30)  NOT NULL COMMENT '采血截止时间',
  PRIMARY KEY (`hpId`)
);


CREATE TABLE `order`  (
  `orderId` int NOT NULL AUTO_INCREMENT COMMENT '订单编号',
  `userId` varchar(11)  NOT NULL COMMENT '客户编号',
  `hpId` int NOT NULL COMMENT '所属医院编号',
  `smId` int NOT NULL COMMENT '所属套餐编号',
  `orderDate` varchar(10) NOT NULL COMMENT '预约日期',
  `state` int(1) NOT NULL COMMENT '订单状态(1:未归档,2:已归档)',
  PRIMARY KEY (`orderId`)
);


CREATE TABLE `setmeal`  (
  `smId` int NOT NULL AUTO_INCREMENT COMMENT '套餐编号',
  `name` varchar(255)  NOT NULL COMMENT '套餐名称',
  `type` CHAR(1) NOT NULL COMMENT '套餐类型(男,女)',
  `price` DECIMAL(8,2) NOT NULL COMMENT '套餐价格',
  PRIMARY KEY (`smId`)
);


CREATE TABLE `setmealdetail`  (
  `sdId` int  AUTO_INCREMENT COMMENT '套餐明细编号',
  `smId` int NOT NULL COMMENT '套餐编号',
  `ciId` int NOT NULL COMMENT '检查项编号',
  PRIMARY KEY (`sdId`) 
);

CREATE TABLE `user`  (
  `userId` varchar(11)  NOT NULL COMMENT '用户编号(手机号码)',
  `name` varchar(20)  NOT NULL COMMENT '真实姓名',
  `password` varchar(20)  NOT NULL COMMENT '密码',
  `gender` char(1)  NOT NULL COMMENT '用户性别',
  `identityCard` char(18)  NOT NULL COMMENT '身份证号',
  PRIMARY KEY (`userId`) 
);


CREATE TABLE `conclusion` (
  `ccId` int   PRIMARY KEY  AUTO_INCREMENT COMMENT '体检结论编号',
  `title` varchar(40) NOT NULL COMMENT '结论标题',
  `content` varchar(400) DEFAULT NULL COMMENT '结论内容',
  `orderId` int(11) NOT NULL COMMENT '所属订单编号'
) ;

CREATE TABLE `cireport` (
  `cirId` int   PRIMARY KEY AUTO_INCREMENT COMMENT '检查项报告主键',
  `ciId` int NOT NULL COMMENT '检查项编号',
  `ciName` varchar(30) NOT NULL COMMENT '检查项名称',
  `orderId` int(11) NOT NULL COMMENT '所属订单编号'
);

CREATE TABLE `cidetailreport` (
  `cidrId` int   PRIMARY KEY AUTO_INCREMENT COMMENT '检查项明细报告主键',
  `name` varchar(40) NOT NULL COMMENT '检查项明细名称',
  `unit` varchar(20) DEFAULT NULL COMMENT '检查项明细单位',
  `minrange` double DEFAULT NULL COMMENT '检查项细明正常值范围中的最小值',
  `maxrange` double DEFAULT NULL COMMENT '检查项细明正常值范围中的最大值',
  `normalValue` varchar(20) DEFAULT NULL COMMENT '检查项细明正常值(非数字型)',
  `normalValueString` varchar(20) DEFAULT NULL COMMENT '检查项验证范围说明文字',
  `type` int NOT NULL DEFAULT '1' COMMENT '检查项明细类型(1:数值范围验证型;2:数值相等验证型;3:无需验证型;4:描述型;5:其它)',
  `value` varchar(100) DEFAULT NULL COMMENT '检查项目明细值',
  `isError` int NOT NULL DEFAULT '0' COMMENT '此项是否异常(0:无异常;1:异常)',
  `cirId` int NOT NULL COMMENT '所属检查项报告编号'
) ;

1.4.执行数据初始化sql

2.后端项目

2.1.创建SpringBoot工程

项目名: xixin-backend
Spring Boot版本: 3.5.5
选择依赖: Lombok,Spring Boot DevTools,Spring Web,MySQL Driver
新建包:config response controller service mapper po util
新建目录: mappers

2.2.在pom.xml文件中添加mybatis-plus依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.7</version>
</dependency>

2.3.修改项目配置

application.yml

# server配置
server:
  port: 1234 # 端口
  servlet:
    context-path: /backend # 上下文路径

# jdbc 数据源配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/xixin?characterEncoding=utf8&serverTimezone=GMT%2B8
    username: root
    password: root

# mybatis-plus配置
mybatis-plus:
  type-aliases-package: com.neuedu.xixinbackend.po # po别名包
  mapper-locations: classpath:mappers/*.xml # 批量加载mapper映射文件
  configuration:
    map-underscore-to-camel-case: false # 关闭列名驼峰命名转换
  global-config:
    db-config:
      table-underline: false # 关闭表名驼峰命名转换

# 日志级别
logging:
  level:
    com.neuedu.xixinbackend: DEBUG

2.4.相关配置配置类

1.在config包下新建 WeMvcConfig 类

import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
    /**
     * 跨域访问设置
     */
    public void addCorsMappings(CorsRegistry registry) {
        /*
         * addMapping:配置可以被跨域的路径,可以任意配置,可以具体到直接请求路径。
         * allowedOrigins:允许访问的url,可以固定单条或者多条内容
         * allowedMethods:允许的请求方式,如:POST、GET、PUT、DELETE等。
         * allowedHeaders:允许的请求header,可以自定义设置任意请求头信息。
         */
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("*")
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        StringHttpMessageConverter converter = new StringHttpMessageConverter();
        converter.setDefaultCharset(Charset.forName("UTF-8"));
        List<MediaType> list = new ArrayList<MediaType>();
        list.add( MediaType.APPLICATION_JSON);
        converter.setSupportedMediaTypes(list);
        converters.add(converter);
        converters.add( new MappingJackson2HttpMessageConverter() );
    }
}

2.在config包下新建MybatisPlusConfig 类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

2.5.响应结果封装

在response包下新建 Result 类

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class Result<T> {
    private int code;       // 状态码
    private String msg;     // 消息
    private T data;         // 数据

    // 成功静态方法
    public static <T> Result<T> success(T data) {
        return Result.<T>builder()
                .code(200)
                .msg("success")
                .data(data)
                .build();
    }

    // 失败静态方法
    public static <T> Result<T> error(int code, String msg) {
        return Result.<T>builder()
                .code(code)
                .msg(msg)
                .build();
    }
}

2.6.修改启动类

增加mapper接口扫描

@MapperScan("com.neuedu.xixinbackend.mapper")

2.7.数据非空判断工具类

在util包下新建 NotEmptyUtil 类

public class NotEmptyUtil {
    public static boolean notEmpty(Object data){
        if(data == null){
            return false;
        }
        if(data instanceof String){
            return !((String) data).isEmpty();
        }
        return true;
    }
}

2.8.管理员登录功能开发

1.创建po类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Admin {
    private String loginName;
    private String password;
}

2.创建mapper接口
在mapper包下新建 AdminMapper接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.neuedu.xixinbackend.po.Admin;
public interface AdminMapper extends BaseMapper<Admin> {
}

3.创建service接口与实现类
在service包下新建 AdminService接口及AdminServiceImpl实现类
AdminService

import com.neuedu.xixinbackend.po.Admin;
public interface AdminService {
    Admin login(Admin admin);
}

AdminServiceImpl

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.neuedu.xixinbackend.mapper.AdminMapper;
import com.neuedu.xixinbackend.po.Admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AdminServiceImpl implements AdminService {
    @Autowired
    private AdminMapper mapper;
    
    @Override
    public Admin login(Admin admin) {
        QueryWrapper<Admin> wrapper = new QueryWrapper<Admin>();
        wrapper.eq("loginName",admin.getLoginName());
        wrapper.eq("password",admin.getPassword());
        return mapper.selectOne(wrapper);
    }
}

4.创建controller类
在controller包下创建AdminController

import com.neuedu.xixinbackend.po.Admin;
import com.neuedu.xixinbackend.response.Result;
import com.neuedu.xixinbackend.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/admin")
public class AdminController {
    @Autowired
    private AdminService service;

    @GetMapping("/{name}/{password}")
    public Result<Admin> getAdmin(@PathVariable("name")String loginName, @PathVariable("password") String password){
        Admin admin = new Admin(loginName,password);
        Admin result = service.login(admin);
        if(result==null){
            return Result.error(500,"登录名或密码错误");
        }else {
            return Result.success(admin);
        }
    }
}

5.使用 ApiFox 发送请求测试
测试地址: http://127.0.0.1:1234/backend/admin/admin/123

2.9.医院信息管理功能开发

1.创建po类

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Hospital {
    @TableId(type = IdType.AUTO)
    private Integer hpId;
    private String  name;
    private String  img;
    private String  telephone;
    private String  address;
    private String  businessHours;
    private String  deadline;
}

2.创建mapper接口
在mapper包下新建 HospitalMapper接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.neuedu.xixinbackend.po.Hospital;

public interface HospitalMapper extends BaseMapper<Hospital> {
}

3.创建service接口与实现类
在service包下新建 HospitalService接口及HospitalServiceImpl实现类
HospitalService

import com.neuedu.xixinbackend.po.Hospital;
import java.util.List;

public interface HospitalService {
   String addHospital(Hospital hospital);
   String updateHospital(Hospital hospital);
   List<Hospital> queryAllHospital();
   List<Hospital> query(Hospital hospital);
}

HospitalServiceImpl

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.neuedu.xixinbackend.mapper.HospitalMapper;
import com.neuedu.xixinbackend.po.Hospital;
import com.neuedu.xixinbackend.util.NotEmptyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class HospitalServiceImpl implements HospitalService{
    @Autowired
    private HospitalMapper mapper;
  
    @Override
    public String addHospital(Hospital hospital) {
        return mapper.insert(hospital)==1?"新增成功":"新增失败";
    }

    @Override
    public String updateHospital(Hospital hospital) {
        return mapper.updateById(hospital)==1?"修改成功":"修改失败";
    }

    @Override
    public List<Hospital> queryAllHospital() {
        return mapper.selectList(null);
    }

    @Override
    public List<Hospital> query(Hospital hospital) {
        QueryWrapper<Hospital> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(NotEmptyUtil.notEmpty(hospital.getName()),"name",hospital.getName());
        queryWrapper.like(NotEmptyUtil.notEmpty(hospital.getAddress()),"address",hospital.getAddress());
        
        return  mapper.selectList(queryWrapper);
    }
}

4.创建controller类
在controller包下创建HospitalController

import com.neuedu.xixinbackend.po.Hospital;
import com.neuedu.xixinbackend.response.Result;
import com.neuedu.xixinbackend.service.HospitalService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/hospital")
public class HospitalController {
    @Autowired
    private HospitalService service;
    
    @GetMapping
    public Result<List<Hospital>> queryAll(){
        List<Hospital> list = service.queryAllHospital();
        return Result.success(list);
    }
    @PostMapping("/query")
    public Result<List<Hospital>> query(@RequestBody Hospital hospital){
        List<Hospital> list = service.query(hospital);
        return Result.success(list);
    }
    @PostMapping
    public Result<String> add(@RequestBody Hospital hospital){
        String result = service.addHospital(hospital);
        return Result.success(result);
    }
    @PutMapping
    public Result<String> update(@RequestBody Hospital hospital){
        String result = service.updateHospital(hospital);
        return Result.success(result);
    }
}

5.使用 ApiFox 发送请求测试
测试地址: http://127.0.0.1:1234/backend/hospital

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。