【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) {//遍历检查项id
                Map<String,Integer> map = new HashMap<>();
                map.put("checkgroupId",checkGroupId);//检查组id
                map.put("checkitemId",checkitemId);//勾选的检查项id
                checkGroupDao.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查询与之关联的检查项id
    public 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_checkgroup
                WHERE checkgroup_id = #{checkgroup_id}
    </select>

    <!--根据id删除检查组-->
    <delete id="deleteById" parameterType="int">
        DELETE FROM t_checkgroup WHERE id = #{id}
    </delete>

(6)测试删除检查组

 

模块小结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ANR灵魂拷问:四大组件中的onCreate-onReceive方法中Thread-sleep(),会产生几个ANR-

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { sleepTest(); } }); sleepTest方法详情 public void sleepTest(){ new Handler().postDelayed(new Runnable() { Override public void run() { Button but…

<Rust><iced>在iced中显示gif动态图片的一种方法

前言 本文是在rust的GUI库iced中在窗口显示动态图片GIF格式图片的一种方法。 环境配置 系统&#xff1a;window 平台&#xff1a;visual studio code 语言&#xff1a;rust 库&#xff1a;iced、image 概述 在iced中&#xff0c;提供了image部件&#xff0c;从理论上说&…

软考 系统架构设计师系列知识点之杂项集萃(44)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;43&#xff09; 第71题 设有员工实体Employee&#xff08;员工号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;电话&#xff0c;家庭住址&#xff0c;家庭成员&#xff0c;关系…

自动驾驶⻋辆环境感知:多传感器融合

目录 一、多传感器融合技术概述 二、基于传统方法的多传感器融合 三、基于深度学习的视觉和LiDAR的目标级融合 四、基于深度学习的视觉和LiDAR数据的前融合方法 概念介绍 同步和配准 时间同步 标定 摄像机内参标定&#xff08;使用OpenCV&#xff09; 摄像机与LiDAR外…

【FreeRTOS】任务状态改进播放控制

这里写目录标题 1 任务状态1.1 阻塞状态(Blocked)1.2 暂停状态(Suspended)1.3 就绪状态(Ready)1.4 完整的状态转换图 2 举个例子3 编写代码 参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 本节课实现音乐任务的创建&#xff0c;音乐播放的暂停与继续播放&#xff0c;删…

java泛型学习

没有java泛型会存在的问题 假设我们有一个方法&#xff0c;希望通过传递不同类型的参数&#xff0c;输出不同类型的对象值。正常情况下我们可能会写不同的方法来实现&#xff0c;但是这样会导致类不断增加&#xff0c;并且类方法很相似&#xff0c;不能够复用。进而导致类爆炸…

C#实现音乐在线播放和下载——Windows程序设计作业3

1. 作业内容 编写一个C#程序&#xff0c;在作业二实现的本地播放功能的基础上&#xff0c;新增在线播放和在线下载功能&#xff0c;作业二博客地址&#xff1a;C#实现简单音乐文件解析播放——Windows程序设计作业2 2. 架构选择 考虑到需求中的界面友好和跨版本兼容性&#xf…

网站监控定时计划任务

网站监控是一种保护网站安全和稳定性的重要手段&#xff0c;而定时计划任务则是网站监控的一种常见方法。通过设置定时计划任务&#xff0c;可以定期对网站进行监测和检测&#xff0c;及时发现并解决潜在的问题&#xff0c;从而保障网站的正常运行。 首先&#xff0c;网站监控定…

AI播客下载:Eye on AI(AI深度洞察)

"Eye on A.I." 是一档双周播客节目&#xff0c;由长期担任《纽约时报》记者的 Craig S. Smith 主持。在每一集中&#xff0c;Craig 都会与在人工智能领域产生影响的人们交谈。该播客的目的是将渐进的进步置于更广阔的背景中&#xff0c;并考虑发展中的技术的全球影响…

MySQL的自增 ID 用完了,怎么办?

MySQL 自增 ID 一般用的数据类型是 INT 或 BIGINT&#xff0c;正常情况下这两种类型可以满足大多数应用的需求。 当然也有不正常的情况&#xff0c;当达到其最大值时&#xff0c;尝试插入新的记录会导致错误&#xff0c;错误信息类似于&#xff1a; ERROR 167 (22003): Out o…

【深度学习驱动流体力学】计算流体力学openfoam-paraview与python3交互

目的1:配置 ParaView 中的 Python Shell 和 Python 交互环境 ParaView 提供了强大的 Python 接口,允许用户通过 Python 脚本来控制和操作其可视化功能。在 ParaView 中,可以通过 View > Python Shell 菜单打开 Python Shell 窗口,用于执行 Python 代码。要确保正确配置 …

Mkdocs中文系列教程补充(1)

什么是requirements.txt 我的理解是mkdocs依赖的py库 第一次建立MKdocs文档使用 mkdocs new . 完后&#xff0c;比较建议执行一下&#xff1a; pip install -r requirements.txt 不然mkdocs serve后会出现什么 xxx not found &#xff0c;比如下面这位老哥 示例 mkdocs …

【大数据】—量化交易实战案例(基础策略)

声明&#xff1a;股市有风险&#xff0c;投资需谨慎&#xff01;本人没有系统学过金融知识&#xff0c;对股票有敬畏之心没有踏入其大门&#xff0c;所以只能写本文来模拟炒股。 量化交易&#xff0c;也被称为算法交易&#xff0c;是一种使用数学模型和计算机算法来分析市场数…

骑马与砍杀战团mod制作-基础-军队笔记(一)

骑马与砍杀战团mod制作-基础-军队装备笔记&#xff08;一&#xff09; 资料来源 学习的资料来源&#xff1a; b站【三啸解说】手把手教你做【骑砍】MOD&#xff0c;基础篇&#xff0c;链接为&#xff1a; https://www.bilibili.com/video/BV19x411Q7No?p4&vd_sourcea507…

设施布置之车间布局优化SLP分析

一 物流分析&#xff08;Flow Analysis&#xff09; 的基本方法 1、当物料移动是工艺过程的主要部分时&#xff0c;物流分析就是工厂布置设计的核心工作&#xff0c;也是物料搬运分析的开始。 2、零部件物流是该部件在工厂内移动时所走过的路线&#xff0c; 物流分析不仅要考虑…

Python18 数据结构与数据类型转换

1.python中的数据结构 在Python中&#xff0c;数据结构是用来存储、组织和管理数据的方式&#xff0c;以便有效地执行各种数据操作。Python提供了几种内置的数据结构&#xff0c;每种都有其特定的用途和操作方法。以下是Python中一些主要的数据结构&#xff1a; 1.列表&#…

Linux下Cmake安装或版本更新

下载Cmake源码 https://cmake.org/download/ 找到对应的版本和类型 放进linux环境解压 编译 安装 tar -vxvf cmake-3.13.0.tar.gz cd cmake-3.13.0 ./bootstrap make make install设置环境变量 vi ~/.bashrc在文件尾加入 export PATH/your_path/cmake-3.13.0/bin:$PAT…

css-vxe列表中ant进度条与百分比

1.vxe列表 ant进度条 <vxe-column field"actualProgress" title"进度" align"center" width"200"><template #default"{ row }"><a-progress:percent"Math.floor(row.actualProgress)"size"s…

KEIL5软件仿真观察PIN脚电平(软件仿真逻辑分析仪的使用)

仿真前的调整&#xff1a; 例&#xff1a;STM32F103C8T6 &#xff08;如果是F4的板子稍微对着修改一下&#xff09; 逻辑分析仪的使用 输入 PORTA.6( PORAT(哪一组).(哪一个引脚) )