采购系统(二)
一、用户列表
1.实体分析
(1)数据库表分析
系统用户表: SYSUSER
记录系统所有的用户。
Id: 主键
USERID: 账号
USERNAME: 名称
GROUPID: 用户类别 0:系统管理员 1:卫生局 2:卫生院 3:卫生室 4:供货商
SYSID: 系统用户所属的单位
监督单位表: USERJD
Id: 主键
MC: 单位名称
DQ: 管理区域
医院单位表: USERYY
Id: 主键
MC: 单位名称
DQ: 所属区域
供货商单位表: USERGYS
Id: 主键
Mc: 单位名称
2.需求
(1)自定义查询,查询用户信息
SQL语句:
第一种查询
select * from (select SYSUSER.id, SYSUSER.userid, SYSUSER.username, SYSUSER.groupid, SYSUSER.sysid, nvl(userjd.mc, nvl(useryy.mc, usergys.mc)) sysmc from SYSUSER left join userjd on SYSUSER.Sysid = userjd.id left join useryy on SYSUSER.Sysid = useryy.id left join usergys on SYSUSER.Sysid = usergys.id ) u where u.sysmc like '%高村%';
NVL函数
格式: NVL(E1,E2)
解释: 如果E1为NULL,则函数返回E2,否则就返回E1。
NVL2函数
格式: NVL2(E1,E2,E3)
解释: 如果E1为NULL,则函数返回E3,若E1不为null,则返回E2。
第二种查询
select * from (select SYSUSER.id, SYSUSER.userid, SYSUSER.username, SYSUSER.groupid, SYSUSER.sysid, 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)) sysmc from SYSUSER)u where u.sysmc like '%高村%'
DECODE函数
格式: DECODE(value, if1, then1, if2,then2, if3,then3, . . . else)
解释: 如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2。
3.后台代码
(1)实体类
查询结果的包装类
SysuserCustom.java
查询条件的包装类
SysuserQueryVo.java
由于页面是DataGrid所以查询结果还要封装一个对象
(2)Mapper相关
SysuserMapperCustom.xml
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="yycg.base.dao.mapper.SysuserMapperCustom"> <!-- sql片段 --> <!-- 用户查询条件 --> <sql id="quey_sysuser_where"> <if test="sysuserCustom != null"> <if test="sysuserCustom.sysmc != null and sysuserCustom.sysmc !=''"> and sysuser.sysmc like '%${sysuserCustom.sysmc}%' </if> <if test="sysuserCustom.userid != null and sysuserCustom.userid !=''"> and sysuser.userid = #{sysuserCustom.userid} </if> <if test="sysuserCustom.username != null and sysuserCustom.username !=''"> and sysuser.username = #{sysuserCustom.username} </if> <if test="sysuserCustom.groupid != null and sysuserCustom.groupid !=''"> and sysuser.groupid = #{sysuserCustom.groupid} </if> </if> </sql> <!-- 用户查询 --> <select id="findSysuserList" parameterType="yycg.base.pojo.vo.SysuserQueryVo" resultType="yycg.base.pojo.vo.SysuserCustom"> select * from ( select SYSUSER.id, SYSUSER.userid, SYSUSER.username, SYSUSER.groupid, SYSUSER.userstate, SYSUSER.sysid, 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) ) sysmc from SYSUSER )sysuser <where> <include refid="quey_sysuser_where"/> </where> </select> </mapper>
SysuserMapperCustom.java
(3)Service/Action
SqlMapconfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置分页插件 --> <plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <!-- 指定使用的数据库 --> <property name="dialect" value="oracle" /> </plugin> </plugins> </configuration>
SysuserAction.java
4.前台页面
JS
<script type="text/javascript"> //datagrid列定义 var columns_v = [ [ { field : 'userid',//对应json中的key title : '账号', width : 120 }, { field : 'username',//对应json中的key title : '名称 ', width : 180 }, { 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 "系统管理员"; } } }, { field : 'sysmc',//对应json中的key title : '所属单位', width : 120 }, { field : 'userstate',//对应json中的key title : '状态', width : 120, formatter : function(value, row, index) {
//通过此方法格式化显示内容,value表示从json中取出该单元格的值,row表示这一行的数据,是一个对象,index:行的序号 if(value =='1'){ return "正常"; }else if(value =='0'){ return "暂停"; } } } ] ]; //定义 datagird工具 var toolbar_v = [ {//工具栏 id : 'btnadd', text : '添加', iconCls : 'icon-add', handler : function() { //打开一个窗口,用户添加页面 //参数:窗口的title、宽、高、url地址 createmodalwindow("添加用户信息", 800, 250, '${baseurl}user/queryuserlist.action'); } } ]; //加载datagrid $(function() { $('#sysuserlist').datagrid({ title : '用户查询',//数据列表标题 nowrap : true,//单元格中的数据不换行,如果为true表示不换行,不换行情况下数据加载性能高,如果为false就是换行,换行数据加载性能不高 striped : true,//条纹显示效果 url : '${baseurl}user/queryuserlist.do',//加载数据的连接,引连接请求过来是json数据 idField : 'id',//此字段很重要,数据结果集的唯一约束(重要),如果写错影响 获取当前选中行的方法执行 loadMsg : '', columns : columns_v, pagination : true,//是否显示分页 rownumbers : true,//是否显示行号 pageList:[15,30,50], toolbar : toolbar_v }); }); //查询方法 function queryuser(){ var grid = $('#sysuserlist'); var options = grid.datagrid('getPager').data("pagination").options; var page = options.pageNumber; var rows = options.pageSize; $('#page').val(page); $('#rows').val(rows); //datagrid的方法load方法要求传入json数据,最终将 json转成key/value数据传入action //将form表单数据提取出来,组成一个json var formdata = $("#sysuserqueryForm").serializeJson(); $('#sysuserlist').datagrid('load',formdata); } </script> </head> <body> <!-- html的静态布局 --> <form id="sysuserqueryForm" action="${baseurl}user/queryuserlist.do"> <!-- 查询条件 --> <TABLE class="table_search"> <TBODY> <TR> <TD class="left">用户账号:</td> <input type="hidden" name="page" id="page"/> <input type="hidden" name="rows" id="rows"/> <td><INPUT type="text" name="sysuserCustom.userid" /></TD> <TD class="left">用户名称:</TD> <td><INPUT type="text" name="sysuserCustom.username" /></TD> <TD class="left">单位名称:</TD> <td><INPUT type="text" name="sysuserCustom.sysmc" /></TD> <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> </select></TD> <td><a id="btn" href="#" onclick="queryuser()" class="easyui-linkbutton" iconCls='icon-search'>查询</a></td> </TR> </TBODY> </TABLE> <!-- 查询列表 --> <TABLE border=0 cellSpacing=0 cellPadding=0 width="99%" align=center> <TBODY> <TR> <TD> <table id="sysuserlist"></table> </TD> </TR> </TBODY> </TABLE> </form> </body> </html>
//form表单数据转成json (function($){ $.fn.serializeJson=function(){ var serializeObj={}; var array=this.serializeArray(); var str=this.serialize(); $(array).each(function(){ if(serializeObj[this.name]){ if($.isArray(serializeObj[this.name])){ serializeObj[this.name].push(this.value); }else{ serializeObj[this.name]=[serializeObj[this.name],this.value]; } }else{ serializeObj[this.name]=this.value; } }); return serializeObj; }; })(jQuery);
5.Orcale分页查询
SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM sysuser) A WHERE ROWNUM <= 40) WHERE RN >= 21
二、保存用户
1.需求
2.后台代码
(1)Service层
@Override public void insertSysuser(SysuserCustom sysuser) throws Exception{ Sysuser user = findSysuserByUserId(sysuser.getUserid()); if(user != null){ throw new Exception("账号已经存在了"); } String groupid = sysuser.getGroupid(); String mc = sysuser.getSysmc(); String mcID = null; if(groupid.equals("1") || groupid.equals("2")){ // 监督单位 Userjd userjd = findUserjdByMc(mc); if(userjd == null){ // 抛出异常 throw new Exception("用户单位不存在"); } mcID = userjd.getId(); }else if(groupid.equals("3")){ // 监督单位 Useryy useryy = findUseryyByMc(mc); if(useryy == null){ // 抛出异常 throw new Exception("用户单位不存在"); } mcID = useryy.getId(); }else if(groupid.equals("4")){ // 监督单位 Usergys usergys = findUsergysByMc(mc); if(usergys == null){ // 抛出异常 throw new Exception("用户单位不存在"); } mcID = usergys.getId(); } // 设置主键 UUID uuid = UUID.randomUUID(); String uuid32 = uuid.toString().replace("-", ""); sysuser.setId(uuid32); sysuser.setSysid(mcID); sysuserMapoer.insert(sysuser); }
(2)Action层
3.前台页面
(1)JS代码
表单Ajax提交JS代码
var pathName = window.location.pathname.substring(1); var webName = pathName == '' ? '' : pathName.substring(0, pathName.indexOf('/')); var BaseUrl= window.location.protocol + '//' + window.location.host + '/'+ webName + '/'; /* *jquery预读方法 */ jQuery(document).ready(function(){ loadingReady(); }); function loading(){ $("body").append('<div id="load" style="width:100%;position:absolute;top:250px;text-align:center;"><img src="'+BaseUrl+'images/loading2.gif" /></div>'); } function removeLoading(){ $("#load").remove(); } function loadingReady(){ jQuery("body").ajaxSend(function(request,settings,uu){ loading(); }); jQuery("body").ajaxComplete(function(request, settings){ removeLoading(); }); jQuery("body").ajaxError(function(request, settings){ removeLoading(); }); } /* *form提交(post方式) *formname form Name *callbackfn 回调函数名(要求函数必须有参数且不能多与两个,一个参数时参数为响应文本,两个参数时第一个参数为响应文本) *param 回调函数参数(如果为null,那么调用一个参数的回调函数,否则调用两个参数的回调函数) */ function jquerySubByFName(formName,callbackFn,param){ var formObj = jQuery("form[@name=" + formName + "]"); var options = {success: function(responseText) { if(param === null){ callbackFn(responseText); }else{ callbackFn(responseText,param); } }}; formObj.ajaxSubmit(options); } /* *form提交(post方式) *formId form Id *callbackfn 回调函数名(要求函数必须有参数且不能多与两个,一个参数时参数为响应文本,两个参数时第一个参数为响应文本) *param 回调函数参数(如果为null,那么调用一个参数的回调函数,否则调用两个参数的回调函数) */ function jquerySubByFId(formId,callbackFn,param,dataType){ var formObj = jQuery("#" + formId); var options = { dataType: ("undefined"!=dataType && null!=dataType)?dataType:"json", success: function(responseText) { if(param === null){ callbackFn(responseText); }else{ callbackFn(responseText,param); } } }; formObj.ajaxSubmit(options); }
(2)JSP代码
<form id="userform" action="${baseurl}user/addsysusersubmit.do" method="post"> <table border=0 cellSpacing=0 cellPadding=0 width="100%" bgColor=#c4d8ed> <tbody> <tr> <td background=images/r_0.gif width="100%"> <table cellSpacing=0 cellPadding=0 width="100%"> <tbody> <tr> <td> 系统用户信息</td> <td align=right> </td> </tr> </tbody> </table> </td> </tr> <tr> <td> <table class="toptable grid" border=1 cellSpacing=1 cellPadding=4 align=center> <tbody> <tr> <td height=30 width="15%" align=right >用户账号:</td> <td class=category width="35%"> <div> <input type="text" id="sysuser_userid" name="sysuserCustom.userid" /> </div> <!-- sysuser_useridTip用于显示提示信息,提示div的id等于校验input的id+Tip --> <div id="sysuser_useridTip"></div> </td> <td height=30 width="15%" align=right >用户名称:</td> <td class=category width="35%"> <div> <input type="text" id="sysuser_username" name="sysuserCustom.username" /> </div> <div id="sysuser_usernameTip"></div> </td> </tr> <tr> <td height=30 width="15%" align=right >用户密码:</td> <td class=category width="35%"> <div> <input type="password" id="sysuser_password" name="sysuserCustom.pwd" /> </div> <div id="sysuser_passwordTip"></div> </td> <td height=30 width="15%" align=right >用户类型:</td> <td class=category width="35%"> <div> <select name="sysuserCustom.groupid" id="sysuser_groupid"> <option value="">请选择</option> <option value="1">卫生局</option> <option value="2">卫生院</option> <option value="3">卫生室</option> <option value="4">供货商</option> <option value="0">系统管理员</option> </select> </div> <div id="sysuser_groupidTip"></div> </td> </tr> <tr> <td height=30 width="15%" align=right >用户单位名称:</td><!-- 用处:根据名称获取单位id --> <td class=category width="35%"> <input type="text" name="sysuserCustom.sysmc" /> </td> <td height=30 width="15%" align=right>用户状态:</td> <td class=category width="35%"> <input type="radio" name="sysuserCustom.userstate" value="1" />正常 <input type="radio" name="sysuserCustom.userstate" value="0" />暂停 </td> </tr> <tr> <td colspan=4 align=center class=category> <a id="submitbtn" class="easyui-linkbutton" iconCls="icon-ok" href="#" onclick="sysusersave()">提交</a> <a id="closebtn" class="easyui-linkbutton" iconCls="icon-cancel"
href="#" onclick="parent.closemodalwindow()">关闭</a> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </form>