目录:
(1)前台用户系统-就诊人管理-需求说明
(2)就诊人管理-接口开发-列表接口
(3)就诊人管理-接口开发-其他接口
(4)前台用户系统-就诊人管理-前端整合
(1)前台用户系统-就诊人管理-需求说明
当点击一个医院进入医院详情页面,选择某一个科室,进行挂号 ,在这里我们需要做这么一个处理,如果要进行预约挂号,我们需要先进行认证,只有认证通过之后才能进行预约挂号,如果你没有认证,然他先认证通过之后再挂号,在这个页面进行调整,当认证通过之后才能挂号
根据上节写的接口:根据id获取用户信息:根据用户信息的认证状态进行判断
在_hoscode.vue:加上
首先引入userInfo
加上代码:
就诊人管理:我们在挂号的时候要选择那个就诊人下单,为就诊人完成增删改查操作
写在service_user模块中:
关于就诊人的实体类:patient
package com.atguigu.yygh.model.user;import com.atguigu.yygh.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.util.Date;/*** * Patient*
** @author qy*/
@Data
@ApiModel(description = "Patient")
@TableName("patient")
public class Patient extends BaseEntity {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "用户id")@TableField("user_id")private Long userId;@ApiModelProperty(value = "姓名")@TableField("name")private String name;@ApiModelProperty(value = "证件类型")@TableField("certificates_type")private String certificatesType;@ApiModelProperty(value = "证件编号")@TableField("certificates_no")private String certificatesNo;@ApiModelProperty(value = "性别")@TableField("sex")private Integer sex;@ApiModelProperty(value = "出生年月")@JsonFormat(pattern = "yyyy-MM-dd")@TableField("birthdate")private Date birthdate;@ApiModelProperty(value = "手机")@TableField("phone")private String phone;@ApiModelProperty(value = "是否结婚")@TableField("is_marry")private Integer isMarry;@ApiModelProperty(value = "省code")@TableField("province_code")private String provinceCode;@ApiModelProperty(value = "市code")@TableField("city_code")private String cityCode;@ApiModelProperty(value = "区code")@TableField("district_code")private String districtCode;@ApiModelProperty(value = "详情地址")@TableField("address")private String address;@ApiModelProperty(value = "联系人姓名")@TableField("contacts_name")private String contactsName;@ApiModelProperty(value = "联系人证件类型")@TableField("contacts_certificates_type")private String contactsCertificatesType;@ApiModelProperty(value = "联系人证件号")@TableField("contacts_certificates_no")private String contactsCertificatesNo;@ApiModelProperty(value = "联系人手机")@TableField("contacts_phone")private String contactsPhone;@ApiModelProperty(value = "是否有医保")@TableField("is_insure")private Integer isInsure;@ApiModelProperty(value = "就诊卡")@TableField("card_no")private String cardNo;@ApiModelProperty(value = "状态(0:默认 1:已认证)")@TableField("status")private String status;
}
操作的是patient这张表:完成增删改查操作
首先引入依赖:需要远程调用得到数据字典中的内容
创建controller:
package com.atguigu.yygh.user.api;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;//就诊人管理接口
@RestController
@RequestMapping("/api/user/patient")
public class PatientApiController {}
service:PatientService
package com.atguigu.yygh.user.service;import com.atguigu.yygh.model.user.Patient;
import com.baomidou.mybatisplus.extension.service.IService;public interface PatientService extends IService {
}
实现类:PatientService Impl:
package com.atguigu.yygh.user.service.impl;import com.atguigu.yygh.model.user.Patient;
import com.atguigu.yygh.user.mapper.PatientMapper;
import com.atguigu.yygh.user.service.PatientService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;@Service
public class PatientServiceImpl extendsServiceImpl implements PatientService {
}
mapper:PatientMapper
package com.atguigu.yygh.user.mapper;import com.atguigu.yygh.model.user.Patient;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface PatientMapper extends BaseMapper {
}
xml:可以不写
(2)就诊人管理-接口开发-列表接口
在controller中添加访问接口:
package com.atguigu.yygh.user.api;import com.atguigu.yygh.common.result.Result;
import com.atguigu.yygh.common.utils.AuthContextHolder;
import com.atguigu.yygh.model.user.Patient;
import com.atguigu.yygh.user.service.PatientService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import java.util.List;//就诊人管理接口
@RestController
@RequestMapping("/api/user/patient")
public class PatientApiController {@Autowiredprivate PatientService patientService;//获取就诊人列表@GetMapping("auth/findAll")public Result findAll(HttpServletRequest request) {//使用工具类AuthContextHolder获取当前登录用户idLong userId = AuthContextHolder.getUserId(request);//根据登录的用户id查询就诊人信息List list = patientService.findAllUserId(userId);return Result.ok(list);}}
service:PatientService
package com.atguigu.yygh.user.service;import com.atguigu.yygh.model.user.Patient;
import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;public interface PatientService extends IService {//获取就诊人列表List findAllUserId(Long userId);
}
实现类:PatientServiceImpl:
查询到的数据需要进一步的封装成内容:比如10 换成汉字110000换成汉字
package com.atguigu.yygh.user.service.impl;import com.atguigu.yygh.cmn.client.DictFeignClient;
import com.atguigu.yygh.enums.DictEnum;
import com.atguigu.yygh.model.user.Patient;
import com.atguigu.yygh.user.mapper.PatientMapper;
import com.atguigu.yygh.user.service.PatientService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class PatientServiceImpl extendsServiceImpl implements PatientService {@Autowiredprivate DictFeignClient dictFeignClient;//获取就诊人列表@Overridepublic List findAllUserId(Long userId) {//根据userid查询所有就诊人信息列表QueryWrapper wrapper = new QueryWrapper<>();wrapper.eq("user_id",userId);List patientList = baseMapper.selectList(wrapper);//通过远程调用,得到编码对应具体内容,查询数据字典表内容//使用java8Stream流的方式遍历patientList.stream().forEach(item -> {//其他参数封装this.packPatient(item);});return patientList;}//Patient对象里面其他参数封装private Patient packPatient(Patient patient) {//根据证件类型编码,获取证件类型具体指String certificatesTypeString =dictFeignClient.getName(DictEnum.CERTIFICATES_TYPE.getDictCode(), patient.getCertificatesType());//联系人证件//联系人证件类型String contactsCertificatesTypeString =dictFeignClient.getName(DictEnum.CERTIFICATES_TYPE.getDictCode(),patient.getContactsCertificatesType());//省String provinceString = dictFeignClient.getName(patient.getProvinceCode());//市String cityString = dictFeignClient.getName(patient.getCityCode());//区String districtString = dictFeignClient.getName(patient.getDistrictCode());patient.getParam().put("certificatesTypeString", certificatesTypeString);patient.getParam().put("contactsCertificatesTypeString", contactsCertificatesTypeString);patient.getParam().put("provinceString", provinceString);patient.getParam().put("cityString", cityString);patient.getParam().put("districtString", districtString);patient.getParam().put("fullAddress", provinceString + cityString + districtString + patient.getAddress());return patient;}
}
(3)就诊人管理-接口开发-其他接口
在PatientApiController:中添加接口:添加就诊人接口:
//添加就诊人@PostMapping("auth/save")public Result savePatient(@RequestBody Patient patient, HttpServletRequest request) {//使用工具类AuthContextHolder获取当前登录用户idLong userId = AuthContextHolder.getUserId(request);patient.setUserId(userId);patientService.save(patient);return Result.ok();}
继续添加接口:根据id获取就诊人信息接口
根据这个id查询
//根据id获取就诊人信息@GetMapping("auth/get/{id}")public Result getPatient(@PathVariable Long id) {//不直接去查,而是自己去写查询方法,返回完整的数据和上面的就诊人列表功能类似Patient patient = patientService.getPatientId(id);return Result.ok(patient);}
PatientService接口:
package com.atguigu.yygh.user.service;import com.atguigu.yygh.model.user.Patient;
import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;public interface PatientService extends IService {//获取就诊人列表List findAllUserId(Long userId);根据id获取就诊人信息Patient getPatientId(Long id);
}
实现类:
//根据id获取就诊人信息@Overridepublic Patient getPatientId(Long id) {/*Patient patient=baseMapper.selectById(id);this.packPatient(patient);*///一行写完,调用下面的方法return this.packPatient(baseMapper.selectById(id));}//Patient对象里面其他参数封装private Patient packPatient(Patient patient) {//根据证件类型编码,获取证件类型具体指String certificatesTypeString =dictFeignClient.getName(DictEnum.CERTIFICATES_TYPE.getDictCode(), patient.getCertificatesType());//联系人证件//联系人证件类型String contactsCertificatesTypeString =dictFeignClient.getName(DictEnum.CERTIFICATES_TYPE.getDictCode(),patient.getContactsCertificatesType());//省String provinceString = dictFeignClient.getName(patient.getProvinceCode());//市String cityString = dictFeignClient.getName(patient.getCityCode());//区String districtString = dictFeignClient.getName(patient.getDistrictCode());patient.getParam().put("certificatesTypeString", certificatesTypeString);patient.getParam().put("contactsCertificatesTypeString", contactsCertificatesTypeString);patient.getParam().put("provinceString", provinceString);patient.getParam().put("cityString", cityString);patient.getParam().put("districtString", districtString);patient.getParam().put("fullAddress", provinceString + cityString + districtString + patient.getAddress());return patient;}
继续添加:修改就诊人信息接口:
//修改就诊人@PostMapping("auth/update")public Result updatePatient(@RequestBody Patient patient) {patientService.updateById(patient);return Result.ok();}
删除就诊人接口:
//删除就诊人@DeleteMapping("auth/remove/{id}")public Result removePatient(@PathVariable Long id) {patientService.removeById(id);return Result.ok();}
(4)前台用户系统-就诊人管理-前端整合
在前端项目的api文件夹下,创建:patient.js
写入访问后端的接口:
import request from '@/utils/request'
const api_name = `/api/user/patient`
export default {//就诊人列表findList() {return request({url: `${api_name}/auth/findAll`,method: `get`})},//根据id查询就诊人信息getById(id) {return request({url: `${api_name}/auth/get/${id}`,method: 'get'})},//添加就诊人信息save(patient) {return request({url: `${api_name}/auth/save`,method: 'post',data: patient})},//修改就诊人信息updateById(patient) {return request({url: `${api_name}/auth/update`,method: 'post',data: patient})},//删除就诊人信息removeById(id) {return request({url: `${api_name}/auth/remove/${id}`,method: 'delete'})}}
创建相应的页面:点击就诊人管理跳转到相应的页面
它用到nuxt中的固定路由,它会到pages中找到patient文件夹找到index.vue的页面:
实名认证 挂号订单 就诊人管理 修改账号信息 意见反馈 就诊人管理{{ item.name }}{{ item.certificatesNo }}{{ item.param.certificatesTypeString }}查看详情 {{item.isInsure == 0 ? "自费" : "医保"}}{{ item.certificatesNo }}{{item.param.certificatesTypeString}}+ 添加就诊人
点击就诊人管理:这里显示两个就诊人
登录的用户,跟病人表中想联系
添加就诊人页面:
在nuxt中有一个固定路由,如果写的是/patient它会默认找到pages文件夹下patient文件夹下面默认的index.vue,如果加了/add默认会找到patient下面的add页面:
新建add.vue:
实名认证 挂号订单 就诊人管理 修改账号信息 意见反馈 添加就诊人就诊人信息男 女 建档信息(完善后部分医院首次就诊不排队建档)未婚 已婚 自费 医保 联系人信息(选填) {{ submitBnt }}
点击详情:跳转到详情页面,在这个页面可以做删除和修改:
创建show.vue:
实名认证 挂号订单 就诊人管理 修改账号信息 意见反馈 就诊人详情就诊人信息{{ patient.name }} {{ patient.param.certificatesTypeString }} {{ patient.certificatesNo }} {{ patient.sex == 1 ? "男" : "女" }} {{ patient.birthdate }} {{ patient.phone }} {{ patient.isMarry == 1 ? "已婚" : "未婚" }} {{ patient.param.provinceString }}/{{patient.param.cityString}}/{{ patient.param.districtString }} {{ patient.address }}
删除就诊人 修改就诊人
测试:
点击添加就诊人:跳转到添加页面
下拉列表会进行查询显示:
测试添加:
点击保存:
添加成功跳转到:就诊人管理页面
数据库也成功添加:
测试:查看详情:
点击李刚的查看详情:
在点击修改就诊人:它会跳转到添加页面,进行数据回显:
点击删除就诊人:
跳转到就诊人管理页面:成功删除
表里面不会删除,只是进行逻辑删除里面的字段值is_deleted发生改变: 变为1
当用户实名认证以后,需要在后台管理系统管理员对信息进行审核,才能认证成功,用户表里面的字段auth_status字段会发生改变,0:未认证 1:认证中 2:认证成功
接下来做审核功能等一系列的功能