【SSM】医疗健康平台-管理端-检查组管理

技能目标

  • 掌握新增检查组功能的实现

  • 掌握查询检查组功能的实现

  • 掌握编辑检查组功能的实现

  • 掌握删除检查组功能的实现

体检的检查项种类繁多,为了方便管理和快速筛选出类别相同的检查项,医疗健康将类别相同的检查项放到同一个检查组中进行管理,从而提高了管理效率。这些检查组可以在管理端进行管理,包括检查组的新增、查询、编辑和删除。

3-1 新增检查组

医疗健康中可以供用户检查的检查项有很多,如果想查找同一类别的检查项,每次都需要逐条筛选,不仅耗时,而且容易发生数据遗漏。为了提高工作效率、减少失误,统一管理这些检查项时,需要先新增一个检查组。

使用浏览器访问检查组管理页面 checkgroup.html。

在checkgroup.html 页面中单击“新增”按钮后会弹出新增检查组对话框,在对话框中填写基本信息和勾选检查项信息后,单击对话框中的“确定”按钮提交新增检查组的数据,实现检查组的新增。由此,可以将新增检查组分解成2 个功能,分别是弹出带有检查项数据的新增检查组对话框、完成检查组的新增。

1.弹出带有检查项数据的新增检查组对话框

(1)弹出新增检查组对话框 为checkgroup.html页面的“新增”按钮绑定单击事件,在单击事件触发后弹出新增检查组对话框,再提交查询所有检查项的请求。

为checkgroup.html 页面的“新增”按钮绑定单击事件,并设置在单击时调用handleCreate( )方法。

<el-button type="primary" class="butT"  @click="handleCreate()">新增</el-button>

(2)接收和处理查询检查项请求 客户端发起查询检查项的请求后,由CheckItemController类的findAll()方法接收页面提交的请求,并调用CheckItemService接口的findAll()方法查询所有检查项。

//查询检查项列表@RequestMapping("/findAll")public Result findAll(){try {List<CheckItem> list = checkItemService.findAll();//服务调用成功,返回查询结果与查询成功提示信息return new Result(true, MessageConstant.QUERY_CHECKITEM_SUCCESS,list);}catch (Exception e){e.printStackTrace();//服务调用失败,返回查询失败提示信息return new Result(false, MessageConstant.QUERY_CHECKITEM_FAIL);}}

(3)查询所有检查项 在CheckItemServiceImpl类中重写CheckItemService接口的findAll()方法,并在方法中调用CheckItemDao接口的findAllCheckItem()方法从数据库中查询所有检查项。

在CheckItemService接口中定义findAll()方法,用于查询所有检查项。

List<CheckItem> findAll();//查询检查项列表

在CheckItemServiceImpl类中重写CheckItemService接口的findAll()方法,用于查询所有的检查项。

//查询检查项列表public List<CheckItem> findAll() {return checkItemDao.findAllCheckItem();//调用持久层接口}

在CheckItemDao接口中定义findAllCheckItem()方法,用于查询所有的检查项。

List<CheckItem> findAllCheckItem();//查询检查项列表

在CheckItemDao.xml映射文件中使用select元素映射查询语句,从数据库中查询所有的检查项。

<!--查询检查项列表--><select id="findAllCheckItem" resultType="com.health.entity.CheckItem">SELECT * FROM t_checkitem</select>

(4)显示检查项查询结果 由CheckItemController类中的findAll()方法将查询检查项的结果响应回checkgroup.html页面,checkgroup.html页面根据响应结果在新增检查组对话框中显示检查项信息。

2.完成检查组的新增

(1)提交新增检查组数据 为checkgroup.html页面新增检查组对话框的“确定”按钮绑定单击事件,在单击事件触发后提交对话框中的数据。

<div slot="footer" class="dialog-footer"><el-button @click="dialogFormVisible = false">取消</el-button><el-button type="primary" @click="handleAdd()">确定</el-button>
</div>

在checkgroup.html页面中定义handleAdd()方法,用于提交表单的数据。

handleAdd() {//发送Ajax请求,需要提交检查组基本信息和勾选的检查项信息axios.post("/checkgroup/add.do?checkitemIds=" + this.checkitemIds,this.formData).then((res) => {if(res.data.flag){this.dialogFormVisible = false;//成功,关闭新增对话框//弹出请求成功提示信息this.$message({type:'success',message:res.data.message});}else{//执行失败,弹出提示信息this.$message.error(res.data.message);}});
}

在entity包下创建检查组类CheckGroup,在类中声明检查组的属性,定义各个属性的getter/setter方法。

package com.health.entity;import java.io.Serializable;
import java.util.List;/*** 检查组*/
public class CheckGroup implements Serializable {private Integer id;                   //主键private String code;                  //编码private String name;                  //名称private String helpCode;             //助记码private String sex;                   //适用性别private String remark;                //介绍private String attention;            //注意事项private List<CheckItem> checkItems;//一个检查组合包含多个检查项public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getHelpCode() {return helpCode;}public void setHelpCode(String helpCode) {this.helpCode = helpCode;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}public String getAttention() {return attention;}public void setAttention(String attention) {this.attention = attention;}public List<CheckItem> getCheckItems() {return checkItems;}public void setCheckItems(List<CheckItem> checkItems) {this.checkItems = checkItems;}
}

(2)接收和处理新增检查组请求 客户端发起新增检查组的请求后,由控制器类CheckGroupController的add()方法接收页面提交的请求,请求的参数中包含基本信息和对检查项的引用信息。

在controller包中创建控制器类CheckGroupController,在类中定义add()方法,用于处理新增检查组的请求。

/*** 检查组管理*/
@RestController
@RequestMapping("/checkgroup")
public class CheckGroupController {@Autowired //查找服务private CheckGroupService checkGroupService;//新增检查组@RequestMapping("/add")public Result add(@RequestBody CheckGroup checkGroup, Integer[] checkitemIds){try{checkGroupService.add(checkGroup,checkitemIds);//调用服务成功,返回新增成功提示信息return new Result(true, MessageConstant.ADD_CHECKGROUP_SUCCESS);}catch (Exception e){e.printStackTrace();//调用服务失败,返回新增失败提示信息return new Result(false, MessageConstant.ADD_CHECKGROUP_FAIL);}}
}

(3)保存新增检查组数据 在CheckGroupServiceImpl类中重写CheckGroupService接口的add()方法,在方法中调用CheckGroupDao接口用于新增基本信息的add()方法,用于新增检查组对检查项引用信息的setCheckGroupAndCheckItem()方法。

在service包中创建接口CheckGroupService,在接口中定义新增检查组的add()方法。

/*** 检查组服务接口*/
public interface CheckGroupService {//新增检查组void add(CheckGroup checkGroup, Integer[] checkitemIds);
}

在service.impl包中创建CheckGroupService接口实现类CheckGroupServiceImpl,并重写接口的add()方法,用于新增检查组。

/*** 检查组服务接口实现类*/
@Service("checkGroupService")
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService {@Autowired   //注入DAO对象private CheckGroupDao checkGroupDao;//新增检查组  同时需要关联检查项(设置多对多关系)public void add(CheckGroup checkGroup, Integer[] checkitemIds) {checkGroupDao.add(checkGroup);//调用持久层接口Integer checkGroupId = checkGroup.getId();//获取检查组id//关联检查项this.setCheckGroupAndCheckItem(checkGroupId,checkitemIds);}//设置检查组和检查项多对多关系的方法public void setCheckGroupAndCheckItem(Integer checkGroupId, Integer[] checkitemIds){//设置多对多关系if(checkitemIds != null && checkitemIds.length > 0){for (Integer checkitemId : checkitemIds) {//遍历检查项idMap<String,Integer> map = new HashMap<>();map.put("checkgroupId",checkGroupId);//检查组idmap.put("checkitemId",checkitemId);//勾选的检查项idcheckGroupDao.setCheckGroupAndCheckItem(map);//调用持久层接口}}}
}

在dao包下创建持久层接口CheckGroupDao,用于处理与检查组相关的操作。

/*** 检查组数据持久化层接口*/
public interface CheckGroupDao {void add(CheckGroup checkGroup);//添加检查组//设置检查组和检查项多对多关系void setCheckGroupAndCheckItem(Map<String, Integer> map);
}

在CheckGroupDao接口同名的映射文件CheckGroupDao.xml。使用intert元素映射新增语句,分别新增检查组的基本信息和检查组对检查项的引用。

<?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.health.dao.CheckGroupDao"><!--新增检查组--><insert id="add" parameterType="com.health.entity.CheckGroup"><selectKey keyProperty="id" resultType="int" order="AFTER">SELECT LAST_INSERT_ID()</selectKey>INSERT INTO t_checkgroup(code,name,helpCode,sex,remark,attention)VALUES(#{code},#{name},#{helpCode},#{sex},#{remark},#{attention})</insert>
</mapper>

(4)提示新增检查组的结果 CheckGroupController类中的add()方法将新增检查组的结果响应回checkgroup.html页面,checkgroup.html页面根据响应结果提示新增检查组成功或失败的信息。

在浏览器中访问checkgroup.html,单击“新增”按钮,弹出新增检查组对话框,在对话框中填写检查组的基本信息。

单击“检查项信息”选项卡,勾选检查组包含的检查项信息。

如果新增失败,页面会提示“新增检查组失败”。如果新增成功,页面会提示“新增检查组成功”。

由于查询检查组的功能暂未开发完成,刚新增的检查组数据并不会展示在检查组管理页面中。

查询数据库中检查组及引用的检查项数据。成功查询出新增的检查组以及检查组对应的检查项信息,说明新增检查组的操作执行成功。

绑定的检查则添加在这张表中

3-2 查询检查组

在实现新增检查组后,还不能立即从checkgroup.html中查看新增的检查组,为了便于查看检查组信息,可以在访问checkgroup.html页面时,自动将系统中的检查组查询出来并在页面上分页展示。

1.分页展示检查组

(1)提交分页查询检查组的请求

查看checkgroup.html页面中用于展示检查组的源代码。

<el-table size="small" current-row-key="id" :data="dataList" stripe >......
</el-table>
<div class="pagination-container"><el-pagination class="pagiantion" ......></el-pagination>
</div>
<script>var vue = new Vue({el: '#app',data:{pagination: {                //分页属性currentPage:1,     //当前页码pageSize:10,       //每页显示的记录数total:0,                //总记录数queryString:""  //查询条件},dataList: [],//当前页要展示的分页列表数据......},//钩子函数,Vue对象初始化完成后自动执行created(){  },......    })</script>

:data="dataList"通过数据双向绑定的方式展示数据 el-pagination 分页组件,用于实现数据分页 分页属性 pagination,包括当前页码、每页显示的记录数、总记录数和查询条件 dataList表示当前页要展示的数据。 created( )函数在 Vue 对象初始化完成后自动执行。

在checkgroup.html页面中定义findPage()方法,用于分页查询检查组。

findPage(){//定义分页参数var param = {currentPage:this.pagination.currentPage,//当前页pageSize:this.pagination.pageSize,       //每页显示记录数queryString:"%"+this.pagination.queryString+"%" //查询条件};//发送Ajax请求,进行分页查询axios.post("/checkgroup/findPage.do",param).then((res)=> {this.dataList = res.data.rows;           //查询结果this.pagination.total = res.data.total;//总记录数});
}

在钩子函数created( )中调用findPage( )方法,created( )函数在Vue 对象初始化完成后自动执行,访问checkgroup.html 页面后即可实现查询检查组并分页显示。

created() {this.findPage();//调用分页查询方法完成分页查询
}

(2)实现查询检查组控制器

在CheckGroupController类中定义findPage()方法,用于处理分页查询检查组的请求。

//分页查询检查组@RequestMapping("/findPage")public PageResult findPage(@RequestBody QueryPageBean pageBean){return checkGroupService.findPage(pageBean);//调用findPage()发送请求}

(3)创建查询检查组服务

在CheckGroupService接口中定义findPage()方法,用于分页查询检查组。

PageResult findPage(QueryPageBean queryPageBean);//分页查询检查组接口

(4)实现查询检查组服务

在CheckGroupServiceImpl类中重写CheckGroupService接口的findPage()方法,用于分页查询检查组。

    //分页查询public PageResult findPage(QueryPageBean queryPageBean) {Integer currentPage = queryPageBean.getCurrentPage();//获取当前页面Integer pageSize = queryPageBean.getPageSize();//获取每页显示的记录数String queryString = queryPageBean.getQueryString();//获取查询条件//分页插件,会在执行sql之前将分页关键字追加到SQL后面PageHelper.startPage(currentPage,pageSize);//调用持久层接口方法Page<CheckGroup> page = checkGroupDao.findByCondition(queryString);return new PageResult(page.getTotal(),page.getResult());//返回分页对象}

(5)实现持久层查询检查组

在CheckGroupDao接口中定义findByCondition()方法,用于分页查询检查组。

Page<CheckGroup> findByCondition(String queryString);//分页查询检查组

在CheckGroupDao.xml映射文件中使用select元素映射查询语句,进行检查组的条件查询、分页查询。

<!--根据条件查询、分页查询检查组--><select id="findByCondition" parameterType="string" resultType="com.health.entity.CheckGroup">SELECT * FROM t_checkgroup<if test="value != null and value.length > 0">WHERE code like #{value} OR name like #{value}OR helpCode like #{value}</if></select>

(6)测试分页展示检查组

重启服务器,访问当前页面

(7)完善checkgroup.html页面的handleAdd()方法

优化handleAdd()方法,在新增检查组成功后调用findPage()方法。以实现新增检查组成功后在checkgroup.html页面中查看最新添加的检查组。

//添加检查组
handleAdd() {axios.post("/checkgroup/add.do?checkitemIds=" +this.checkitemIds,this.formData).then((res) => {if(res.data.flag){......this.findPage();//分页查询检查组}......});
}

2.页码切换

在checkgroup.html页面中定义handleCurrentChange()方法,用于实现页码切换。

//切换页码
handleCurrentChange(currentPage) {this.pagination.currentPage = currentPage;//指定最新的页码this.findPage();//调用分页查询检查组的方法
}

在checkgroup.html页面提供了分页组件el-pagination,为el-pagination 组件设置与页码相关的属性值。

给该数据表中添加测试数据

INSERT INTO `t_checkgroup` VALUES ('2', '0002', '视力色觉', 'SLSJ', '0', '视力色觉', NULL);
INSERT INTO `t_checkgroup` VALUES ('3', '0003', '血常规', 'XCG', '0', '血常规', NULL);
INSERT INTO `t_checkgroup` VALUES ('4', '0004', '尿常规', 'NCG', '0', '尿常规', NULL);
INSERT INTO `t_checkgroup` VALUES ('5', '0005', '肝功三项', 'GGSX', '0', '肝功三项', NULL);
INSERT INTO `t_checkgroup` VALUES ('6', '0006', '肾功三项', 'NGSX', '0', '肾功三项', NULL);
INSERT INTO `t_checkgroup` VALUES ('7', '0007', '血脂四项', 'XZSX', '0', '血脂四项', NULL);
INSERT INTO `t_checkgroup` VALUES ('8', '0008', '心肌酶三项', 'XJMSX', '0', '心肌酶三项', NULL);
INSERT INTO `t_checkgroup` VALUES ('9', '0009', '甲功三项', 'JGSX', '0', '甲功三项', NULL);
INSERT INTO `t_checkgroup` VALUES ('10', '0010', '子宫附件彩超', 'ZGFJCC', '2', '子宫附件彩超', NULL);
INSERT INTO `t_checkgroup` VALUES ('11', '0011', '胆红素三项', 'DHSSX', '0', '胆红素三项', NULL);
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('2', '6');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('2', '7');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('2', '8');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('2', '9');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('2', '10');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '11');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '12');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '13');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '14');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '15');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '16');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '17');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '18');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '19');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '20');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '21');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '22');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '23');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '24');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '25');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '26');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '27');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '28');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('3', '29');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '30');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '31');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '32');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '33');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '34');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '35');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '36');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '37');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '38');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '39');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '40');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '41');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '42');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '43');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('4', '44');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('5', '45');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('5', '46');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('5', '47');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('6', '48');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('6', '49');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('6', '50');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('7', '51');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('7', '52');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('7', '53');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('7', '54');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('8', '55');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('8', '56');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('8', '57');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('9', '58');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('9', '59');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('9', '60');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('10', '61');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('10', '62');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('11', '63');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('11', '64');
INSERT INTO `t_checkgroup_checkitem`(checkgroup_id,checkitem_id) VALUES ('11', '65');

重启服务器,访问该页面

3.按条件查询检查组

在checkgroup.html页面为“查询”按钮绑定单击事件,在单击时调用handleCurrentChange(1)方法。

在查询条件输入框中输入查询条件,单击“查询”按钮进行条件查询。

3-3 编辑检查组

编辑检查组时,可以根据需求对检查组的基本信息或关联的检查项信息进行修改。

在checkgroup.html 页面中单击“编辑”按钮后会弹出编辑检查组对话框并显示检查组数据,修改对话框中的数后,单击“确定”按钮提交检查组数据,完成检查组的编辑。 由此,可以将编辑检查组分解成2 个功能,分别是弹出带有检查组数据的编辑检查组对话框,以及完成检查组的编辑。

1.弹出带有检查组数据的编辑检查组对话框

(1)弹出编辑检查组对话框 为页面中“编辑”按钮绑定单击事件,在单击事件触发后弹出编辑检查组对话框,再依次提交查询基本信息、查询所有检查项、查询检查组对检查项的引用的请求。

在checkgroup.html页面中定义handleUpdate()方法,用于弹出编辑检查组对话框后回显数据。

handleUpdate(row) {this.activeName = 'first';//每次弹出的编辑对话框默认显示基本信息区this.dialogFormVisible4Edit = true;//编辑对话框显示axios.get("/checkgroup/findById.do?id=" + row.id).then((res) => {......//查询检查组基本信息});axios.get("/checkitem/findAll.do").then((res) => {//查询检查项信息if (res.data.flag){this.tableData = res.data.data;//查询检查项列表成功,为tableData赋值axios.get("/checkgroup/findCheckItemIdsByCheckGroupId.do?checkgroupId="+ row.id).then((res) => {......});}......//省略查询错误的提示信息});
}

为checkgroup.html 页面的“编辑”按钮绑定单击事件,并设置单击按钮时调用handleUpdate( )方法。

<el-button type="primary" class="mini" @click="handleUpdate(scope.row)">编辑</el-button>

(2)接收和处理查询检查组请求 检查组的数据包含基本信息和对检查项的引用信息,因此,客户端发起查询检查组的请求时,除了要提交查询检查组基本信息的请求,还要提交查询所有检查项的请求、查询检查组对检查项的引用的请求。

在CheckGroupController类中定义findById()方法,用于处理根据检查组 id 查询检查组基本信息的请求。

    //根据id查询检查组@RequestMapping("/findById")public Result findById(Integer id){try{//调用服务接口 findById(),发送请求CheckGroup checkGroup = checkGroupService.findById(id);//服务调用成功,返回查询结果与查询成功提示信息return new Result(true,MessageConstant.QUERY_CHECKGROUP_SUCCESS,checkGroup);}catch (Exception e){e.printStackTrace();//服务调用失败,返回查询失败提示信息return new Result(false, MessageConstant.QUERY_CHECKGROUP_FAIL);}}

在CheckGroupController类中定义findCheckItemIdsByCheckGroupId()方法,用于处理根据检查组 id 查询检查组对检查项的引用的请求。

    //根据检查组id查询与之关联的检查项id@RequestMapping("/findCheckItemIdsByCheckGroupId")public Result findCheckItemIdsByCheckGroupId(Integer checkgroupId){try{//调用服务接口,发送请求,返回关联的id列表List<Integer> list = checkGroupService.findCheckItemIdsByCheckGroupId(checkgroupId);//服务调用成功,返回查询结果与查询成功提示信息return new Result(true,MessageConstant.QUERY_CHECKITEM_SUCCESS,list);}catch (Exception e){e.printStackTrace();//服务调用失败,返回查询失败提示信息return new Result(false,MessageConstant.QUERY_CHECKITEM_FAIL);}}

(3)查询检查组数据 ①重写CheckGroupService接口的findById()方法,在方法中调用CheckGroupDao接口中查询基本信息的findById()方法;

②重写findCheckItemIdsByCheckGroupId()方法,在方法中调用CheckGroupDao接口中查询检查组对检查项的引用的findCheckItemIdsByCheckGroupId()方法。

在CheckGroupService接口中定义findById()方法,用于根据检查组id 查询检查组的基本信息;定义findCheckItemIdsByCheckGroupId( )方法,用于根据检查组id 查询检查组对检查项的引用。

     CheckGroup findById(Integer id);//根据id查询检查组List<Integer> findCheckItemIdsByCheckGroupId(Integer checkgroupId);//根据检查组id查询与之关联的检查项id

在CheckGroupServiceImpl类中重写CheckGroupService接口的findById()方法和findCheckItemIdsByCheckGroupId()方法。

    //根据id查询检查组public CheckGroup findById(Integer id) {return checkGroupDao.findById(id);//调用持久层接口}//根据检查组id查询与之关联的检查项idpublic List<Integer> findCheckItemIdsByCheckGroupId(Integer checkgroupId) {//调用持久层接口return checkGroupDao.findCheckItemIdsByCheckGroupId(checkgroupId);}

在CheckGroupDao接口中定义findById()方法,用于根据检查组 id 查询检查组基本信息;定义 findCheckItemIdsByCheckGroupId( )方法,用于根据检查组 id 查询检查组对检查项的引用。

 CheckGroup findById(Integer id);//根据id查询检查组List<Integer> findCheckItemIdsByCheckGroupId(Integer checkgroupId);//根据检查组id查询与之关联的检查项id

在CheckGroupDao.xml映射文件中使用select元素映射查询语句,分别查询检查组基本信息、查询检查组对检查项的引用。

<!--根据id查询检查组--><select id="findById" parameterType="int" resultType="com.health.entity.CheckGroup">SELECT * FROM t_checkgroup WHERE id = #{id}</select><!--根据检查组id查询与之关联的检查项id--><select id="findCheckItemIdsByCheckGroupId" parameterType="int" resultType="int">SELECT checkitem_id FROM t_checkgroup_checkitem WHERE checkgroup_id = #{checkgroup_id}</select>

(4)显示查询结果 将CheckGroupController 类中findById( )方法的查询结果、CheckItemController 类中findAll( )方法的查询结果、CheckGroupController 类中findCheckItemIdsByCheckGroupId( )方法的查询结果依次返回到checkgroup.html页面。

找到检查组编码为0001 的检查组,单击其右侧的“编辑”按钮,弹出编辑检查组对话框。

 

2.完成检查组的编辑

(1)提交编辑检查组数据 为编辑检查组对话框的“确定”按钮绑定单击事件,在单击事件触发后提交对话框中的检查组数据。

为编辑检查组对话框中的“取消”和“确定”按钮绑定单击事件,并设置单击时要执行的操作。

<div slot="footer" class="dialog-footer"><el-button @click="dialogFormVisible4Edit = false">取消</el-button><el-button type="primary" @click="handleEdit()">确定</el-button>
</div>

 在checkgroup.html页面中定义handleEdit()方法,用于提交编辑检查组数据。

handleEdit(){axios.post("/checkgroup/edit.do?checkitemIds="+ this.checkitemIds,this.formData).then((res) => {if (res.data.flag){this.dialogFormVisible4Edit = false;//关闭编辑对话框//弹出提示信息this.$message({type:'success',message:res.data.message});this.findPage();//执行分页查询}else{//执行失败,弹出提示信息this.$message.error(res.data.message);}});
}

(2)接收和处理编辑检查组请求 客户端发起编辑检查组数据的请求后,由控制器类CheckGroupController 的edit( )方法接收页面提交的请求,请求的参数中包含检查组基本信息和对检查项的引用。

在CheckGroupController类中定义edit()方法,用于处理编辑检查组的请求。

    //编辑检查组@RequestMapping("/edit")public Result edit(@RequestBody CheckGroup checkGroup, Integer[] checkitemIds){try{//调用服务接口 edit(),发送请求checkGroupService.edit(checkGroup,checkitemIds);//调用服务成功,返回编辑成功提示信息return new Result(true, MessageConstant.EDIT_CHECKGROUP_SUCCESS);}catch (Exception e){e.printStackTrace();//调用服务失败,返回编辑失败提示信息return new Result(false, MessageConstant.EDIT_CHECKGROUP_FAIL);}}

(3)编辑检查组数据 在CheckItemServiceImpl类中重写CheckGroupService接口的edit()方法,在方法中调用CheckGroupDao接口中的相关方法实现编辑检查组。

在CheckGroupService接口中定义edit()方法,用于编辑检查组。

void edit(CheckGroup checkGroup, Integer[] checkitemIds);//编辑检查组

在CheckGroupServiceImpl类中重写CheckGroupService接口的edit()方法。

    //编辑检查组,同时需要设置关联关系public void edit(CheckGroup checkGroup, Integer[] checkitemIds) {checkGroupDao.edit(checkGroup);//编辑检查组基本信息checkGroupDao.deleteAssociation(checkGroup.getId());//删除关联检查项//重新建立关联检查项this.setCheckGroupAndCheckItem(checkGroup.getId(),checkitemIds);}

在CheckGroupDao接口中定义edit()方法以编辑检查组基本信息;定义deleteAssociation( )方法以删除检查组对检查项的引用。

     void edit(CheckGroup checkGroup);//编辑检查组基本信息void deleteAssociation(Integer checkgroupId);//删除检查组和检查项的关联关系(操作中间关系表)

在CheckGroupDao.xml映射文件中使用update元素映射修改语句,修改检查组的基本信息。

在CheckGroupDao.xml映射文件中使用delete元素映射删除语句,删除检查组对检查项的引用。

<!--编辑检查组基本信息--><update id="edit" parameterType="com.health.entity.CheckGroup">UPDATE t_checkgroup<set><if test="name != null">name = #{name},</if><if test="sex != null">sex = #{sex},</if><if test="code != null">code = #{code},</if><if test="helpCode != null">helpCode = #{helpCode},</if><if test="attention != null">attention = #{attention},</if><if test="remark != null">remark = #{remark},</if></set>WHERE id = #{id}</update><!--清理检查组和检查项的关联关系--><delete id="deleteAssociation" parameterType="int">DELETE FROM t_checkgroup_checkitem WHERE checkgroup_id = #{checkgroup_id}</delete>

(4)提示编辑结果 CheckGroupController 类中的edit( )方法将编辑检查组的结果返回checkgroup.html 页面,checkgroup.html页面根据返回结果提示编辑成功或失败的信息。

 

3-4 删除检查组

对于检查组列表中重复出现的、与检查项搭配不合理的检查组,或者是已经过时的检查组,除了可以进行编辑外,还可以进行删除。

 

(1)弹出提示对话框

为checkgroup.html 页面中的“删除”按钮绑定单击事件,并设置在单击“删除”按钮时调用handleDelete( )方法。

<el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除</el-button>

 在 checkgroup.html 页面中实现 handleDelete( )方法,用于删除检查组。

handleDelete(row) {this.$confirm('你确定要删除当前数据吗?','提示',{confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {axios.get("/checkgroup/delete.do?id=" + row.id).then((res) => {if (res.data.flag){//处理成功this.$message({type:'success',message: res.data.message});this.findPage();//调用分页查询}else{ this.$message.error(res.data.message);//处理失败}});})......省略“取消”
}

(2)实现删除检查组控制器

在CheckGroupController 类中定义方法 delete( ),用于处理根据检查组 id 删除检查组的请求。

    //根据id删除检查组@RequestMapping("/delete")public Result delete(Integer id){try {checkGroupService.delete(id);//调用服务接口,发送请求//服务调用成功,返回删除成功提示信息return new Result(true, MessageConstant.DELETE_CHECKGROUP_SUCCESS);}catch (Exception e){e.printStackTrace();//服务调用失败,返回删除失败提示信息return new Result(false,MessageConstant.DELETE_CHECKGROUP_FAIL);}}

(3)创建删除检查组服务

在CheckGroupService接口中定义delete()方法,用于根据检查组id 删除检查组。

void delete(Integer id);//根据id删除检查组

(4)实现删除检查组服务

在CheckGroupServiceImpl类中重写CheckGroupService接口的delete()方法,用于根据检查组id删除检查组。

    //根据id删除检查组public void delete(Integer id) {//调用持久层接口,根据检查组id查询检查组与套餐是否有关联关系long count = checkGroupDao.selectCountByCheckGroupId(id);if (count > 0){//不能删除,已经被套餐表关联throw new RuntimeException(MessageConstant.DELETE_CHECKGROUP_FAIL);}else{checkGroupDao.deleteAssociation(id);//根据检查组id删除关联检查项信息checkGroupDao.deleteById(id);//删除检查组}}

(5)实现持久层删除检查组

在CheckGroupDao接口中定义selectCountByCheckGroupId()方法和deleteById()方法。

     long selectCountByCheckGroupId(Integer id);//根据检查组id查询检查组与套餐的关联关系void deleteById(Integer id);//根据id删除检查组

在CheckGroupDao.xml映射文件中使用select元素映射查询语句,查询套餐对检查组的引用;使用delete元素映射删除语句,删除检查组基本信息。

 <!--根据检查组id查询检查组与套餐表是否有关联关系--><select id="selectCountByCheckGroupId" parameterType="int" resultType="long">SELECT count(1) FROM t_setmeal_checkgroupWHERE checkgroup_id = #{checkgroup_id}</select><!--根据id删除检查组--><delete id="deleteById" parameterType="int">DELETE FROM t_checkgroup WHERE id = #{id}</delete>

(6)测试删除检查组

 

模块小结

本模块主要对管理端的检查组管理进行了讲解。首先讲解了新增检查组的功能,然后讲解了查询检查组的功能,接下来讲解了编辑检查组和删除检查组的功能。希望通过对本模块的学习,可以掌握检查组管理的增删改查操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CV炼丹师勇闯力扣训练营 Day8】

CV炼丹师勇闯力扣训练营 代码随想录算法训练营第8天 ● 344.反转字符串 ● 541. 反转字符串II ● 卡码网&#xff1a;54.替换数字 一、344 反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额…

# Kafka_深入探秘者(1):初识 kafka

Kafka_深入探秘者&#xff08;1&#xff09;&#xff1a;初识 kafka 一、kafka 特性 1、Kafka &#xff1a;最初是由 Linkedln 公司采用 Scala 语言开发的一个多分区、多副本并且基于 ZooKeeper 协调的分布式消息系统&#xff0c;现在已经捐献给了 Apache 基金会。目前 Kafka…

如何使用kimi智能助手:您的智能生活小助手

Kimi智能助手是一款功能强大的AI工具&#xff0c;旨在帮助用户提高工作效率和生活品质。下面小编将详细介绍如何使用Kimi智能助手&#xff0c;涵盖其主要功能以及一些实用技巧。 一、Kimi智能助手的主要功能 多语言对话能力&#xff1a;Kimi擅长中文和英文的对话&#xff0c;可…

探索计算机视觉(人工智能重要分支)的发展与应用

引言 在当今快速发展的科技时代&#xff0c;计算机视觉作为人工智能领域的重要分支&#xff0c;正日益成为各行各业不可或缺的关键技术。从简单的图像处理到复杂的智能系统&#xff0c;计算机视觉的发展不仅改变了我们看待世界的方式&#xff0c;也深刻影响着工业、医疗、交通等…

Windows安装配置jdk和maven

他妈的远程连接不上公司电脑&#xff0c;只能在家重新配置一遍&#xff0c;在此记录一下后端环境全部配置 Windows安装配置JDK 1.8一、下载 JDK 1.8二、配置环境变量三、验证安装 Windows安装配置Maven 3.8.8一、下载安装 Maven并配置环境变量二、设置仓库镜像及本地仓库三、测…

2024最新版Python 3.12.4安装使用指南

2024最新版Python 3.12.4安装使用指南 2024最新版Python 3.12.4安装使用指南0. Python的受欢迎程度1. 安装最新版Python 3.12.42. 验证Python 3.12.4版本3. 验证Python功能4. 使用IDLE交互式开发模式5. 安装Python扩展库相关阅读&#xff1a; By Jackson 2024最新版Python 3.12…

java基于ssm+jsp 汽车在线销售系统

1 前台功能模块 网站首页 网页首页汽车在线销售系统模块如下&#xff1a;首页、汽车信息、新闻资讯、留言反馈、我的收藏管理等功能图1 图1网页首页 网页前台车辆信息效果图如图2所示 图2 车辆信息界面图 2 管理员功能模块 管理员输入个人的账号、密码登录系统&#xff0c…

压力测试

1.什么是压力测试 压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内&#xff0c;做到心中有数 使用压力测试&#xff0c;我们有希望找到很多种用其他测试方法更难发现的错误&#…

基于matlab的K-means聚类图像分割

1 原理 K-means聚类算法在图像分割中的应用是基于一种无监督的学习方法&#xff0c;它将图像中的像素点或特征区域划分为K个不同的簇或类别。以下是K-means聚类算法用于图像分割的原理&#xff0c;包括步骤和公式&#xff1a; 1.1 原理概述 选择簇的数量(K)&#xff1a; 首先…

YOLOv9基础 | 实时目标检测新SOTA,手把手带你深度解析yolov9论文!

前言:Hello大家好,我是小哥谈。YOLOv9是Chien-Yao Wang等人提出的YOLO系列的最新版本之一(截止到目前,YOLOv10已发布),于2024年2月21日发布。它是 YOLOv7的改进版本,两者均由Chien-Yao Wang及其同事开发。本节课就以YOLOv9论文为基础带大家深入解析YOLOv9算法。🌈 …

浏览器-服务器架构 (BS架构) 详解

目录 前言1. BS架构概述1.1 BS架构的定义1.2 BS架构的基本原理 2. BS架构的优势2.1 客户端简化2.2 易于更新和维护2.3 跨平台性强2.4 扩展性高 3. BS架构的劣势3.1 网络依赖性强3.2 安全性问题3.3 用户体验局限 4. BS架构的典型应用场景4.1 企业内部应用4.2 电子商务平台4.3 在…

java小代码(1)

代码 &#xff1a; 今日总结到此结束&#xff0c;拜拜&#xff01;

1999-2022年 297个地级市-医院卫生院数量及床位数量(数据收集)

全国297个地级市的医院卫生院数量的稳步增长是医疗事业发展的一个重要标志。政府的持续投入和对医疗设施的改善&#xff0c;不仅提升了医疗服务的硬件水平&#xff0c;也通过引进和培养医疗人才、优化服务流程&#xff0c;提高了医疗服务的整体质量。这些举措极大地增强了人民群…

C语言之详解预处理

前言&#xff1a; 预处理也叫预编译&#xff0c;是编译代码时的第一步&#xff0c;经过预处理后生成一个.i文件&#xff0c;如果不明白编译与链接作用的小伙伴可以先看看博主的上一篇博客—— &#xff0c;不然知识连贯性可能会显得很差哦。 正文目录&#xff1a; 预定义符号#…

font-spider按需生成字体文件

font-spider可以全局安装,也可以单个项目内安装,使用npm run xxxx的形式 npm i font-spider "dev": "font-spider ./*.html" <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&…

Android测量

最大模式&#xff08;MeasureSpec.AT_MOST&#xff09; 这个也就是父组件&#xff0c;能够给出的最大的空间&#xff0c;当前组件的长或宽最大只能为这么大&#xff0c;当然也可以比这个小。 最高两位是11的时候表示”最大模式”。即MeasureSpec.AT_MOST未指定模式&#xff08;…

1996年-2023年 全国298个地级市-外商直接投资FDI(数据收集)

外商直接投资&#xff08;FDI&#xff09;是一种跨国界的经济活动&#xff0c;它涉及外国投资者在中国境内进行的直接投资行为。这种投资行为不仅包括以货币、实物、技术等形式的资本投入&#xff0c;还可能包括开办独资企业、合资企业、合作企业&#xff0c;以及参与资源开发等…

微型操作系统内核源码详解系列五(四):cm3下svc启动任务

系列一&#xff1a;微型操作系统内核源码详解系列一&#xff1a;rtos内核源码概论篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列二&#xff1a;微型操作系统内核源码详解系列二&#xff1a;数据结构和对象篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列…

开发者配置项、开发者选项自定义

devOptions.vue源码 <!-- 开发者选项 &#xff08;CtrlAltShiftD&#xff09;--> <template><div :class"$options.name" v-if"visible"><el-dialog:custom-class"sg-el-dialog":append-to-body"true":close-on…

Flutter 如何发布安卓应用?

android:hardwareAccelerated“true” android:windowSoftInputMode“adjustResize”> <meta-data android:name“flutterEmbedding” android:value“2” /> Flutter生成的文件建议是大部分内容可以保留不动&#xff0c;但是可以根据需要进行修改。 具体可能要修…