016医疗项目 数据字典(概念和在本系统中的应用)

 2023-09-05 阅读 156 评论 0

摘要:相同类型的配置项: 在系统中创建一个张记录数据字典类型: 数据字典类型表 创建一张表记录数据字典明细: 数据字典明细表 我们看一下数据字典的应用在实际中的算是分类吧: 上面那个药品的类别,后续修改的可能性大,比如会新添一个药

相同类型的配置项:

在系统中创建一个张记录数据字典类型

 数据字典类型表

 创建一张表记录数据字典明细

数据字典明细表

 

 

我们看一下数据字典的应用在实际中的算是分类吧:

上面那个药品的类别,后续修改的可能性大,比如会新添一个药品,或减少一个药品,所以称他为"普通配置项"。

上面的那个用户状态,一般系统在设计时规定了用户有哪几种状态,是定死了的,后续的改动不大,所以称之为“业务代码";

 

 

 

接下来介绍数据字典表结构:

我们之前不是说过要建立 数据字典类型表数据字典明细表,我给出本系统的这两张表,来分析。

数据字典类型表DICTTYPE:

表结构:

表的数据:

 

 

 

数据字典明细表DICTINFO

表的结构

表的数据:

上面两张表就是我们这个系统的数据字典,他们的关联方式是:

 

 

 

字典明表中如何存储普通配置项和业务代码。

 

普通配置项存储:

普通配置项名称存储在DICTINFO表中info字段

普通配置项对应的类型id存储在DICTINFO表中TYPECODE

 

查询普通配置顶:

 

 

 

业务代码存储:

业务代码对应的名称存储在DICTINFO表中info字段

业务代码对应的类型id存储在DICTINFO表中TYPECODE

业务代码存储在DICTINFO表中DICTCODE(是和普通配置顶的区别)

 如:

 

业务代码查询:

 

 总结:

普通配置项:对业务数据进行简单的归类,这些归类受用户要求变化较灵活,将这些配置项作普通配置项配置数据字典表。

 业务代码:系统运行所必须的,在系统设计时定义的固定代码,这些代码可能需要在程序代码进行硬编码。

 

 

 

 

数据字典在项目中的应用:

应用1.用户查询页面用户类型下拉框:

我们之前的做法:

 {field : 'groupid',//对应json中的key title : '用户类型',width : 120,formatter : function(value, row, index) {//通过此方法格式化显示内容,value表示从json中取出该单元格的值,row表示这一行的数据,是一个对象,index:行的序号if(value =='1'){return "卫生局";}else if(value =='2'){return "卫生院";}else if(value =='3'){return "卫生室";}else if(value =='4'){return "供货商";}else if(value =='0'){return "系统管理员";}} 

就是说是用js直接写死的,然后我想要换成,每一个用户类型直接从数据库中拿,然后遍历一下,显示出来。这样就不是硬编码了。

 

 

Dao:

直接用逆向工程生成的DictinfoMapper.selectByExample()来做。

Service层:

定义SystemConnfigServiceImpl.java接口:

package yycg.base.service;import java.util.List;import yycg.base.pojo.po.Basicinfo;
import yycg.base.pojo.po.Dictinfo;/*** 系统级别service* @author Thinkpad**/
public interface SystemConfigService {/*** 根据typecode获取数据字典的信息*/public List findDictinfoByType(String typecode) throws Exception;/*** 根据数据字典中的typecode,和dictcode获取一条信息*/public Dictinfo  findDictinfoByDictcode(String typecode,String dictcode) throws Exception;/*** 根据系统参数id获取系统参数表信息*/public Basicinfo findBasicinfoById(String id)throws Exception;
}

 

SystemConfigService的实现类SystemConfigServiceImpl:
package yycg.bae.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import yycg.base.dao.mapper.BasicinfoMapper;
import yycg.base.dao.mapper.DictinfoMapper;
import yycg.base.pojo.po.Basicinfo;
import yycg.base.pojo.po.Dictinfo;
import yycg.base.pojo.po.DictinfoExample;
import yycg.base.service.SystemConfigService;public class SystemConfigServiceImpl  implements SystemConfigService{@AutowiredDictinfoMapper dictinfoMapper;@AutowiredBasicinfoMapper basicinfoMapper;//根据数据字典typecode获取字典明细信息
    @Overridepublic List findDictinfoByType(String typecode) throws Exception {DictinfoExample dictinfoExample = new DictinfoExample();DictinfoExample.Criteria criteria = dictinfoExample.createCriteria();criteria.andTypecodeEqualTo(typecode);return dictinfoMapper.selectByExample(dictinfoExample);}//根据typeocde和dictcode获取单个字典明细public Dictinfo  findDictinfoByDictcode(String typecode,String dictcode) throws Exception{DictinfoExample dictinfoExample = new DictinfoExample();DictinfoExample.Criteria criteria = dictinfoExample.createCriteria();criteria.andDictcodeEqualTo(dictcode);criteria.andTypecodeEqualTo(typecode);List<Dictinfo> list = dictinfoMapper.selectByExample(dictinfoExample);if(list!=null && list.size()==1){return list.get(0);}return null;}/*** 根据id获取系统配置信息*/@Overridepublic Basicinfo findBasicinfoById(String id) throws Exception {return basicinfoMapper.selectByPrimaryKey(id);}}
 

 

Action层:

我们在进入到查询之前,把这些数据(用户的类别卫生院啊,卫生室啊什么的)查出来,显示在页面上.

@RequestMapping("/queryuser")public String queryUser(Model model)throws Exception{List<Dictinfo> lists=systemConfigService.findDictinfoByType("s01");model.addAttribute("lists", lists);//查询到的卫生室啊,卫生院啊什么的都放在lists里面return "/base/user/queryuser";}

 

页面;

 

<TD class="left">用户类型:</TD><td><select name="sysuserCustom.groupid"><option value="">请选择</option><!-- <option value="1">卫生局</option><option value="2">卫生院</option><option value="3">卫生室</option><option value="4">供货商</option><option value="0">系统管理员</option> --><c:forEach items="${lists}" var="dictinfo"><option value="${dictinfo.dictcode}">${dictinfo.info}</option></c:forEach></select></TD>

 

把在Action中得到的lists数据全部遍历一遍显示,

达到的效果是:

 

 

 

 

 

 

应用2用户查询列表中用户类型列:

要达到的效果:

 

之前是在javascript里面直接写死的,现在从数据库中去获取。

代码如下:

Dao层:

我们先看之前的查找函数怎么写的:打开SysuserMapperCustom.xml

select * from(select SYSUSER.ID,SYSUSER.USERID,SYSUSER.USERNAME,SYSUSER.GROUPID,SYSUSER.SYSID,
SYSUSER.USERSTATE,DECODE(SYSUSER.Groupid,'1',(select mc from userjd where id=sysuser.sysid),'2',(select mc from userjd where id=sysuser.sysid),'3',(select mc from useryy where id=sysuser.sysid),'4',(select mc from usergys where id=sysuser.sysid))sysmcfrom SYSUSER)sysuser

我们看到这里并没有去查找groupname(单位类型的名字),只是去找了单位的id,groupid。

然后在页面上是这么处理的:

 {field : 'groupid',//对应json中的key 
        title : '用户类型',width : 120,formatter : function(value, row, index) {//通过此方法格式化显示内容,value表示从json中取出该单元格的值,row表示这一行的数据,是一个对象,index:行的序号if(value =='1'){return "卫生局";}else if(value =='2'){return "卫生院";}else if(value =='3'){return "卫生室";}else if(value =='4'){return "供货商";}else if(value =='0'){return "系统管理员";}} },

他是把groupid查出来,然后在页面上根据groupid直接写死了用户类型。

 

 

 

 

 

 

 

但是我们要用数据字典的方式,不能这么写,我们要把数据库里面的单位名字查出来然后显示在页面上。

我们查出来是自定义的SysuserCustom,之前已经扩充了一个单位名称属性private String sysmc,我们还要再扩充一个用户类型属性:    private String groupname;。

所以SysuserCustom的代码是:

package yycg.base.pojo.vo;import yycg.base.pojo.po.Sysuser;
//这是自己写的扩展的pojo类,统一放在vo包下面。同时去继承原始的po类,继承po类有什么规则呢,
//要继承查询的列数多的那个po类。
public class SysuserCustom extends Sysuser {//单位名称private String sysmc;
//用户的类型
private String groupname;public String getGroupname() {return groupname;}public void setGroupname(String groupname) {this.groupname = groupname;}public String getSysmc() {return sysmc;}public void setSysmc(String sysmc) {this.sysmc = sysmc;}}

Dao:

select * from(select SYSUSER.ID,SYSUSER.USERID,SYSUSER.USERNAME,SYSUSER.GROUPID,SYSUSER.SYSID,
 (select  info from dictinfo where dictinfo.dictcode=SYSUSER.GROUPID AND typecode='s01' )groupname,SYSUSER.USERSTATE,DECODE(SYSUSER.Groupid,'1',(select mc from userjd where id=sysuser.sysid),'2',(select mc from userjd where id=sysuser.sysid),'3',(select mc from useryy where id=sysuser.sysid),'4',(select mc from usergys where id=sysuser.sysid))sysmcfrom SYSUSER)sysuser

比之前的的写法就多了这么一句: (select info from dictinfo where dictinfo.dictcode=SYSUSER.GROUPID AND typecode='s01' )groupname,

这里用了子查询,子查询的条件是子查询查出来的只能是一条数据,所以typecode='s01'保证查出来的是:

 

再根据 dictinfo.dictcode=SYSUSER.GROUPID  就能确定这里的是卫生局还是什么的了,查出一条数据

 

Service层:

和之前不变。还是

@Override
public SysuserCustom findsysuserByid(String id) throws Exception {Sysuser sysuser=sysuserMapper.selectByPrimaryKey(id);SysuserCustom sysuserCustom=new SysuserCustom();//根据主键id查单位名称
    
String groupid=sysuser.getGroupid();//用户类型
String Sysid=sysuser.getSysid();//单位id
String sysmc=null;//单位表的idsysmc
if(groupid.equals("1")||groupid.equals("2"))
{//监督单位//根据单位的主键查找单位信息Userjd userjd=userjdMapper.selectByPrimaryKey(Sysid);if(userjd==null){//throw new Exception("单位名称输入错误");//使用系统自定义的异常类ResultUtil.throwExcepion(ResultUtil.createFail(Config.MESSAGE, 204, null));}sysmc=userjd.getMc();}
//卫生室
else if(groupid.equals("3"))
{//根据单位名称查询单位的信息,查不到就报错Useryy useryy=useryyMapper.selectByPrimaryKey(Sysid);if(useryy==null){//throw new Exception("单位名称输入错误");//使用系统自定义的异常类ResultUtil.throwExcepion(ResultUtil.createFail(Config.MESSAGE, 204, null));}sysmc=useryy.getMc();
}
else if(groupid.equals("4")){Usergys usergys=usergysMapper.selectByPrimaryKey(Sysid);if(usergys==null){//throw new Exception("单位名称输入错误");//使用系统自定义的异常类ResultUtil.throwExcepion(ResultUtil.createFail(Config.MESSAGE, 204, null));}sysmc=usergys.getMc();
}
BeanUtils.copyProperties(sysuser, sysuserCustom);//使用BeanUtil这个工具类把sysuer这个对象里面的属性值全部拷贝到sysuserCustom这个对象里面
sysuserCustom.setSysmc(sysmc);return sysuserCustom;
}

 

Action也是不变的:

//用户查询页面的结果集//最终DataGridResultInfo通过@ResponseBody将java对象转换成json对象。//这里的形参包装类会一直从Action传到Service然后传到Mapper@RequestMapping("/queryuser_result")public @ResponseBody DataGridResultInfo queryUser_result(SysuserQueryVo sysuserQueryVo,int page,int rows)throws Exception{//这些都是根据EASYUI的规则来的DataGridResultInfo dataGridResultInfo=new DataGridResultInfo();int total=userService.findSysuserCount(sysuserQueryVo);PageQuery pageQuery=new PageQuery();pageQuery.setPageParams(total, rows, page);sysuserQueryVo.setPageQuery(pageQuery);/** 这里还要填充total和rows*///把查到的信息填充到DataGridResultInfo中,然后把DataGridResult转换成json。当外面的链接//访问这个函数时,返回json数据。List<SysuserCustom> list=userService.findSysuserCustom(sysuserQueryVo);dataGridResultInfo.setRows(list);dataGridResultInfo.setTotal(total);return dataGridResultInfo;}

页面变化了如下:

 {field : 'groupname',//对应json中的keytitle : '用户类型',width : 120,}, 

因为在SysuserCustom中有了那个groupname属性所以这里已经直接变成JSON了,属性名字groupname就是这里JSON的key.

 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/927.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息