1. 需求分析
传智健康管理系统是一款应用于健康管理机构的业务系统,实现健康管理机构工作内容可视化、患者管理专业化、健康评估数字化、健康干预流程化、知识库集成化,从而提高健康管理师的工作效率,加强与患者间的互动,增强管理者对健康管理机构运营情况的了解。
系统分为传智健康后台管理系统和移动端应用两部分。其中后台系统提供给健康管理机构内部人员(包括系统管理员、健康管理师等)使用,微信端应用提供给健康管理机构的用户(体检用户)使用。
本项目功能架构图: 通过上面的功能架构图可以看到,传智健康后台管理系统有会员管理、预约管理、健康评估、健康干预等功能。移动端有会员管理、体检预约、体检报告等功能。后台系统和移动端应用都会通过Dubbo调用服务层发布的服务来完成具体的操作。本项目属于典型的SOA架构形式。
本章节完成的功能开发是预约管理功能,包括检查项管理、检查组管理、体检套餐管理、预约设置等 (参见产品原型)。预约管理属于系统的基础功能,主要就是管理一些体检的基础数据。
2. 基础环境搭建
2.1 导入预约管理模块数据表
操作步骤:
(1)根据资料中提供的itcasthealth.pdm文件导出SQL脚本
2)创建本项目使用的数据库health
(3)将PowerDesigner导出的SQL脚本导入itcast_health数据库进行建表
2.2 导入预约管理模块实体类
将资料中提供的POJO实体类复制到health_common工程中。
2.3 导入项目所需公共资源
项目开发过程中一般会提供一些公共资源,供多个模块或者系统来使用。
本章节我们导入的公共资源有:
(1)返回消息常量类MessageConstant,放到health_common工程中
2)返回结果Result和PageResult类,封装查询条件的QueryPageBean类,放到health_common工程中
(3)html、js、css、图片等静态资源,放到health_backend工程中 注意:后续随着项目开发还会陆续导入其他一些公共资源。
3. 新增检查项
3.1 完善页面
检查项管理页面对应的是checkitem.html页面,根据产品设计的原型已经完成了页面基本结构的编写, 现在需要完善页面动态效果。
3.1.1弹出新增窗口
页面中已经提供了新增窗口,只是处于隐藏状态。只需要将控制展示状态的属性dialogFormVisible改为true就可以显示出新增窗口。
新建按钮绑定的方法为handleCreate,所以在handleCreate方法中修改dialogFormVisible属性的值为true即可。同时为了增加用户体验度,需要每次点击新建按钮时清空表单输入项。
// 重置表单 resetForm() { this.formData = {};//重置数据 }, // 弹出添加窗口 handleCreate() { //弹出新增窗口 this.dialogFormVisible = true; this.resetForm(); },
3.1.2 输入校验
rules: {//校验规则 code: [{ required: true, message: '项目编码为必填项', trigger: 'blur' }], name: [{ required: true, message: '项目名称为必填项', trigger: 'blur' }] }
3.1.3 提交表单数据
handleAdd () { //进行表单校验 this.$refs['dataAddForm'].validate((valid) => { if(valid){ //表单校验通过,发送ajax请求,将录入的数据提交到后台处理 var _this = this; axios.post("/checkitem/add.do",this.formData).then((resp) => { // resp.data = {}; if(resp.data.flag){ // 服务器端处理成功 //弹出提示信息 _this.$message({ message: resp.data.message, type: 'success' }); //关闭新增窗口 _this.dialogFormVisible = false; //重新调用分页查询方法,查询出最新的数据 _this.findPage(); }else{ // 服务器端处理失败 _this.$message.error(resp.data.message); } }); }else{ // 失败 this.$message.error("校验失败,请重新填写"); return false; } }) },
3.2 后台代码
3.2.1 Controller
在health_backend工程中创建CheckItemController
package com.itterence.controller; import com.alibaba.dubbo.config.annotation.Reference; import com.itterence.service.CheckItemService; import com.itterence.constant.MessageConstant; import com.itterence.entity.Result; import com.itterence.pojo.CheckItem; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 检查项管理 */ @RestController//相当于@ResponseBody + @Controller合在一起的作用 @RequestMapping("checkitem") public class CheckItemController { @Reference private CheckItemService checkItemService; //新增检查项 @RequestMapping("add") public Result add(@RequestBody CheckItem checkItem){ try { checkItemService.add(checkItem); }catch (Exception e){ e.printStackTrace(); //服务调用失败 return new Result(false, MessageConstant.ADD_CHECKITEM_FAIL); } return new Result(true,MessageConstant.ADD_CHECKITEM_SUCCESS); } }
3.2.2 服务接口
在health_interface工程中创建CheckItemService接口
package com.itterence.service; import com.itterence.pojo.CheckItem; /** * 服务接口 */ public interface CheckItemService { public void add(CheckItem checkItem); }
3.2.3 服务实现类
在health_service_provider工程中创建CheckItemServiceImpl实现类
package com.itterence.service.impl; import com.alibaba.dubbo.config.annotation.Service; import com.itterence.dao.CheckItemDao; import com.itterence.pojo.CheckItem; import com.itterence.service.CheckItemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; /** * 检查项服务 */ @Service(interfaceClass=CheckItemService.class) @Transactional public class CheckItemServiceImpl implements CheckItemService { @Autowired private CheckItemDao checkItemDao; @Override public void add(CheckItem checkItem) { checkItemDao.add(checkItem); } }
3.2.4 Dao接口
在health_service_provider工程中创建CheckItemDao接口,本项目是基于Mybatis的Mapper代理技术实现持久层操作,故只需要提供接口和Mapper映射文件,无须提供实现类
package com.itterence.dao; import com.itterence.pojo.CheckItem; public interface CheckItemDao { public void add(CheckItem checkItem); }
3.2.5 Mapper映射文件
在health_service_provider工程中创建CheckItemDao.xml映射文件,需要和CheckItemDao接口在同一目录下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.itterence.dao.CheckItemDao"> <!--插入检查项数据--> <insert id="add" parameterType="com.itterence.pojo.CheckItem"> insert into t_checkitem(code,name,sex,age,price,type,remark,attention) values (#{code},#{name},#{sex},#{age},#{price},#{type},#{remark},#{attention}) </insert> </mapper>