学习企业应用中组织机构模型,完成用户实体管理
代码下载:git clone –b day5 https://github.com/qixiangchen/gufang_fisys.git
实现用户接口IUser
package com.gf.statusflow;
import java.sql.Date;
import java.util.List;
public interface IUser extends java.io.Serializable
{
public void setId(String id);
public String getId();
public void setLoginId(String loginId);
public String getLoginId();
public void setPassword(String password);
public String getPassword();
public void setName(String name);
public String getName();
public void setAddress(String address);
public String getAddress();
public void setCompanyMail(String companyMail);
public String getCompanyMail();
public void setPrivateMail(String privateMail);
public String getPrivateMail();
public void setCompanyTeleNo(String companyTeleNo);
public String getCompanyTeleNo();
public void setHomeTeleNo(String homeTeleNo);
public String getHomeTeleNo();
public void setMobile(String mobile);
public String getMobile();
public void setTitle(String title);
public String getTitle();
public void setDesc(String desc);
public String getDesc();
public void setOrgId(String orgId);
public String getOrgId();
public void setOrgPath(String orgPath);
public String getOrgPath();
public void setEnabled(boolean enabled);
public boolean getEnabled();
public void setLocked(String locked);
public String getLocked();
public void setManagerId(String managerId);
public String getManagerId();
public Date getBirthday();
public void setBirthday(Date birthday);
public String getCardId();
public void setCardId(String cardId);
public Date getFailureDate();
public void setFailureDate(Date failureDate);
public Integer getFailureCount();
public void setFailureCount(Integer failureCount);
public void setOpenid(String openid);
public String getOpenid();
public void setSeqno(Integer seqno);
public Integer getSeqno();
public void setFlag(String flag);
public String getFlag();
public void setRoleList(List<String> roleList);
public List<String> getRoleList();
public void setTestMode(String testMode);
public String getTestMode();
}
用户实现类
package com.gf.statusflow.def;
import java.util.ArrayList;
import java.sql.Date;
import java.util.List;
import com.gf.statusflow.IUser;
public class DefaultUser implements IUser{
private String id = null;
private String loginId = null;
private String password = null;
private String name = null;// /1/2
private String address = null;// /集团公司/古方红糖厂家/财务部
private String companyMail = null;
private String privateMail = null;
private String companyTeleNo = null;
private String homeTeleNo = null;
private String mobile = null;
private String title = null;
private String desc = null;
private String orgId = null;
private String orgPath = null;
private boolean enabled = true;
private String locked = null;
private String managerId = null;
private Date birthday = null;
private String cardId = null;
private Date failureDate = null;
private Integer failureCount= null;
private String openid = null;
private Integer seqno = null;
private String flag = "gf";
private String testMode = null;
private List<String> roleList = new ArrayList<String>();
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
@Override
public String getLoginId() {
return loginId;
}
@Override
public void setLoginId(String loginId) {
this.loginId = loginId;
}
@Override
public String getPassword() {
return password;
}
@Override
public void setPassword(String password) {
this.password = password;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public String getAddress() {
return address;
}
@Override
public void setAddress(String address) {
this.address = address;
}
@Override
public String getCompanyMail() {
return companyMail;
}
@Override
public void setCompanyMail(String companyMail) {
this.companyMail = companyMail;
}
@Override
public String getPrivateMail() {
return privateMail;
}
@Override
public void setPrivateMail(String privateMail) {
this.privateMail = privateMail;
}
@Override
public String getCompanyTeleNo() {
return companyTeleNo;
}
@Override
public void setCompanyTeleNo(String companyTeleNo) {
this.companyTeleNo = companyTeleNo;
}
@Override
public String getHomeTeleNo() {
return homeTeleNo;
}
@Override
public void setHomeTeleNo(String homeTeleNo) {
this.homeTeleNo = homeTeleNo;
}
@Override
public String getMobile() {
return mobile;
}
@Override
public void setMobile(String mobile) {
this.mobile = mobile;
}
@Override
public String getTitle() {
return title;
}
@Override
public void setTitle(String title) {
this.title = title;
}
@Override
public String getDesc() {
return desc;
}
@Override
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String getOrgId() {
return orgId;
}
@Override
public void setOrgId(String orgId) {
this.orgId = orgId;
}
@Override
public String getOrgPath() {
return orgPath;
}
@Override
public void setOrgPath(String orgPath) {
this.orgPath = orgPath;
}
@Override
public boolean getEnabled() {
return enabled;
}
@Override
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
@Override
public String getLocked() {
return locked;
}
@Override
public void setLocked(String locked) {
this.locked = locked;
}
@Override
public String getManagerId() {
return managerId;
}
@Override
public void setManagerId(String managerId) {
this.managerId = managerId;
}
@Override
public Date getBirthday() {
return birthday;
}
@Override
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String getCardId() {
return cardId;
}
@Override
public void setCardId(String cardId) {
this.cardId = cardId;
}
@Override
public Date getFailureDate() {
return failureDate;
}
@Override
public void setFailureDate(Date failureDate) {
this.failureDate = failureDate;
}
@Override
public Integer getFailureCount() {
return failureCount;
}
@Override
public void setFailureCount(Integer failureCount) {
this.failureCount = failureCount;
}
@Override
public String getOpenid() {
return openid;
}
@Override
public void setOpenid(String openid) {
this.openid = openid;
}
@Override
public Integer getSeqno() {
return seqno;
}
@Override
public void setSeqno(Integer seqno) {
this.seqno = seqno;
}
@Override
public String getFlag() {
return flag;
}
@Override
public void setFlag(String flag) {
this.flag = flag;
}
@Override
public List<String> getRoleList() {
return roleList;
}
@Override
public void setRoleList(List<String> roleList) {
this.roleList = roleList;
}
@Override
public String getTestMode() {
return testMode;
}
@Override
public void setTestMode(String testMode) {
this.testMode = testMode;
}
public String toString()
{
return "DefaultUser[id="+id+",loginId="+loginId+",password="+password+",name="+name+",address="+address+",companyMail="+companyMail
+",privateMail="+privateMail+",companyTeleNo="+companyTeleNo+",homeTeleNo="+homeTeleNo+",mobile="+mobile
+",title="+title+",desc="+desc+",orgId="+orgId+",orgPath="+orgPath+",enabled="+enabled+",locked="+locked
+",managerId="+managerId+",birthday="+birthday+",cardId="+cardId+",failureDate="+failureDate+",failureCount="+failureCount
+",openid="+openid+",seqno="+seqno+",flag="+flag+",testMode="+testMode+"]";
}
}
SQL
create table gf_user(id varchar(32),
loginid varchar(100),
password varchar(32),
name varchar(100),
address varchar(200),
companymail varchar(100),
privatemail varchar(100),
companyteleno varchar(100),
hometeleno varchar(100),
mobile varchar(100),
title varchar(32),
description varchar(200),
orgid varchar(32),
orgpath varchar(200),
enabled int,
locked varchar(20),
managerid varchar(32),
birthday date,
cardid varchar(20),
failuredate datetime,
failurecount int,
openid varchar(50),
seqno int,
flag varchar(50),
testmode varchar(10)
);
Mapper层用户相关方法定义
/**
* 用户相关Mybatis方法
* @param dwi
*/
public void saveUser(DefaultUser user);
public void updateUser(DefaultUser user);
public void deleteUser(@Param("id") String id);
public List<DefaultUser> getUserByOrgId(@Param("orgId") String orgId);
public DefaultUser getManagerById(@Param("userId") String userId);
public List<DefaultUser> getUserByManagerId(@Param("managerId") String managerId);
public DefaultUser checkLogin(@Param("loginId") String loginId,
@Param("password") String password);
public DefaultUser getUserByLoginId(@Param("loginId") String loginId);
组织机构接口IOrgModel用户相关方法
/**
* 用户相关接口
* @param userId
* @return
*/
public void saveUser(DefaultUser user);
public void updateUser(DefaultUser user);
public void deleteUser(String id);
public List<DefaultUser> getUserByOrgId(String orgId);
public DefaultUser getManagerById(String userId);
public List<DefaultUser> getUserByManagerId(String managerId);
public DefaultUser checkLogin(String loginId,String password);
public DefaultUser getUserByLoginId(String loginId);
组织机构服务类DefaultOrgModel
@Override
public void saveUser(DefaultUser user) {
try
{
mapper.saveUser(user);
}
catch(Exception e)
{
log.error(e.getMessage());
}
}
@Override
public void updateUser(DefaultUser user) {
try
{
mapper.updateUser(user);
}
catch(Exception e)
{
log.error(e.getMessage());
}
}
@Override
public void deleteUser(String id) {
try
{
mapper.deleteUser(id);
}
catch(Exception e)
{
log.error(e.getMessage());
}
}
@Override
public List<DefaultUser> getUserByOrgId(String orgId) {
try
{
return mapper.getUserByOrgId(orgId);
}
catch(Exception e)
{
log.error(e.getMessage());
}
return null;
}
@Override
public DefaultUser getManagerById(String userId) {
try
{
return mapper.getManagerById(userId);
}
catch(Exception e)
{
log.error(e.getMessage());
}
return null;
}
@Override
public List<DefaultUser> getUserByManagerId(String managerId) {
try
{
return mapper.getUserByManagerId(managerId);
}
catch(Exception e)
{
log.error(e.getMessage());
}
return null;
}
@Override
public DefaultUser checkLogin(String loginId, String password) {
try
{
return mapper.checkLogin(loginId,password);
}
catch(Exception e)
{
log.error(e.getMessage());
}
return null;
}
public DefaultUser getUserByLoginId(String loginId)
{
try
{
return mapper.getUserByLoginId(loginId);
}
catch(Exception e)
{
log.error(e.getMessage());
}
return null;
}
组织机构Controller
@RequestMapping("/user")
public String user()
{
return "/orgmodel/user";
}
@RequestMapping("/userload")
@ResponseBody
public Map userload(Integer page,Integer rows,String orgId)
{
if(page == null)
page = 1;
if(rows == null)
rows = 10;
Map m = new HashMap();
if("".equals(Util.fmtStr(orgId)))
{
m.put("total", 0);
m.put("rows", new ArrayList<DefaultUser>());
return m;
}
PageHelper.startPage(page,rows);
List<DefaultUser> list = orgmodel.getUserByOrgId(orgId);
PageInfo pi = new PageInfo(list);
Long total = pi.getTotal();
List<DefaultUser> users = pi.getList();
m.put("total", total);
m.put("rows", users);
return m;
}
@RequestMapping("/usersave")
@ResponseBody
public Boolean usersave(DefaultUser duser)
{
log.debug("usersave duser="+duser);
String id = duser.getId();
String pwd = duser.getPassword();
String md5 = Util.getMD5(pwd);
log.debug("usersave pwd="+pwd+",md5="+md5);
duser.setPassword(md5);
String loginId = duser.getLoginId();
DefaultUser loginUser = orgmodel.getUserByLoginId(loginId);
log.debug("usersave loginUser="+loginUser);
if("".equals(Util.fmtStr(id)))
{
if(loginUser != null)
{
return false;
}
duser.setId(UUID.create("user"));
orgmodel.saveUser(duser);
}
else
{
log.debug("usersave id="+id+",loginUser.getId()="+loginUser);
//说明当前用户对应的LoginId存在两个
if(loginUser != null && !id.equals(loginUser.getId()))
{
return false;
}
orgmodel.updateUser(duser);
}
return true;
}
用户JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String menu = (String)request.getAttribute("menu");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<script type="text/javascript" src="/easyui/jquery.min.js"></script>
<script type="text/javascript" src="/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="/easyui/easyui-lang-zh_CN.js"></script>
<link rel="stylesheet" href="/easyui/themes/default/easyui.css"/>
<link rel="stylesheet" href="/easyui/themes/icon.css"/>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>财务报销系统</title>
<script>
function addsuborg()
{
var objs = $('#tree').tree('getChecked');
if(objs.length != 1)
{
$.messager.alert('错误','请选中一个父节点');
return;
}
var id = objs[0].id;
$('#parentId').val(id);
$('#frm').form('submit', {
url:'/orgsubsave',
onSubmit: function(){
},
success:function(data){
reloadtree();
}
});
}
function updatesuborg()
{
$('#frm').form('submit', {
url:'/orgsave',
onSubmit: function(){
},
success:function(data){
reloadtree();
}
});
}
function deleteorg()
{
var objs = $('#tree').tree('getChecked');
if(objs.length == 0)
{
$.messager.alert('错误','请选中一个需要删除部门');
return;
}
var id = '';
for(var i=0;i<objs.length;i++)
{
id = id + objs[i].id + ',';
}
console.log('deleteorg()='+objs.length+','+id);
$.ajax({
url:'/orgdelete?id='+id,
success:function(data)
{
$.messager.alert('信息',data);
reloadtree();
}
})
}
function reloadtree()
{
//$('#tree').tree('loadData',[{"id":"1","text":"Root","iconCls":null,"url":null,"state":"closed","attributes":{"type":"system","isload":"false","path":"/","parentId":null}}]);
$.get('/orgroot',function(data)
{
$('#tree').tree({
data: data
});
}
)
}
function loaddatagrid(orgId)
{
$('#userdg').datagrid({
url:'/userload?orgId='+orgId
})
}
function chkpwd()
{
var pwd = $('#password').val();
var repwd = $('#repwd').val();
if(pwd != repwd)
{
$.messager.alert('信息','两次密码不一致');
}
}
function adduser()
{
$('#win').window('open');
}
function closeuser()
{
$('#win').window('close');
}
function saveuser()
{
var rtn = $('#frm').form('validate');
if(rtn)
{
orgId = $('#orgId').val();
$('#frm').form('submit', {
url:'/usersave',
onSubmit: function(){
},
success:function(data){
loaddatagrid(orgId);
closeuser();
}
});
}
}
function openuser(index,rowObj)
{
$('#win').window('open');
$('#id').val(rowObj.id);
$('#orgPath').val(rowObj.orgPath);
$('#openid').val(rowObj.openid);
$('#flag').val(rowObj.flag);
$('#testMode').val(rowObj.testMode);
$('#loginId').textbox('setValue',rowObj.loginId);
$('#name').textbox('setValue',rowObj.name);
$('#password').passwordbox('setValue',rowObj.password);
$('#companyMail').textbox('setValue',rowObj.companyMail);
$('#privateMail').textbox('setValue',rowObj.privateMail);
$('#address').textbox('setValue',rowObj.address);
$('#companyTeleNo').textbox('setValue',rowObj.companyTeleNo);
$('#mobile').textbox('setValue',rowObj.mobile);
$('#title').textbox('setValue',rowObj.title);
$('#desc').textbox('setValue',rowObj.desc);
$('#enabled').combobox('setValue',rowObj.enabled);
$('#managerId').textbox('setValue',rowObj.managerId);
$('#birthday').datebox('setValue',rowObj.birthday);
$('#cardId').textbox('setValue',rowObj.cardId);
$('#seqno').textbox('setValue',rowObj.seqno);
$('#failureDate').datebox('setValue',rowObj.failureDate);
$('#cardId').textbox('setValue',rowObj.cardId);
$('#orgId').combobox('setValue',rowObj.orgId);
}
$(document).ready(
function()
{
reloadtree();
$('#tree').tree({
onBeforeExpand:function(node,param)
{
if(node.attributes.isload=='false')
{
$.ajaxSettings.async = false;
var url = '/orgchild?id='+node.id;
$.get(url,function(data)
{
$('#tree').tree('append', {
parent: node.target,
data: data
});
}
)
$.ajaxSettings.async = true;
node.attributes.isload = 'true';
}
},
onClick: function(node){
var orgId = node.id;
loaddatagrid(orgId);
}
});
$('#repwd').textbox({
'onChange':chkpwd
});
$('#win').window('close');
$('#userdg').datagrid({'onClickRow':openuser})
}
);
</script>
</head>
<body class="easyui-layout">
<div data-options="region:'west',title:'自定义导航'" style="width:250px;">
<ul id="tree" class="easyui-tree" data-options="lines:true,checkbox:true,cascadeCheck:false">
</ul>
</div>
<div data-options="region:'center',title:'用户维护'" style="padding:5px;">
<table id="userdg" class="easyui-datagrid" style="width:100%;height:250px"
data-options="url:'/userload',fitColumns:true,pagination:true,
pageSize:10,pageList:[10,50,100,200],toolbar:'#tb'">
<thead>
<tr>
<th data-options="field:'id',width:100,hidden:true">ID</th>
<th data-options="field:'loginId',width:100">登录ID</th>
<th data-options="field:'name',width:100">姓名</th>
<th data-options="field:'address',width:100">地址</th>
<th data-options="field:'companyMail',width:100">公司邮箱</th>
<th data-options="field:'privateMail',width:100">私人邮箱</th>
<th data-options="field:'companyTeleNo',width:100">公司电话</th>
<th data-options="field:'homeTeleNo',width:100">家庭电话</th>
<th data-options="field:'mobile',width:100">手机</th>
<th data-options="field:'title',width:100">职位</th>
<th data-options="field:'desc',width:100,hidden:true">ID</th>
<th data-options="field:'orgId',width:100,hidden:true">ID</th>
<th data-options="field:'orgPath',width:100,hidden:true">ID</th>
<th data-options="field:'enabled',width:100,hidden:true">ID</th>
<th data-options="field:'locked',width:100,hidden:true">ID</th>
<th data-options="field:'managerId',width:100,hidden:true">ID</th>
<th data-options="field:'birthday',width:100,hidden:true">ID</th>
<th data-options="field:'cardId',width:100,hidden:true">ID</th>
<th data-options="field:'failureDate',width:100,hidden:true">ID</th>
<th data-options="field:'failureCount',width:100,hidden:true">ID</th>
<th data-options="field:'openid',width:100,hidden:true">ID</th>
<th data-options="field:'seqno',width:100,hidden:true">ID</th>
<th data-options="field:'flag',width:100,hidden:true">ID</th>
<th data-options="field:'testMode',width:100,hidden:true">ID</th>
</tr>
</thead>
</table>
<div id="tb">
<a id="btn" onclick="adduser()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">添加用户</a>
<a id="btn" onclick="deleteuser()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">删除用户</a>
</div>
<div id="win" class="easyui-window" title="用户窗口" style="width:600px;height:480px"
data-options="iconCls:'icon-save',modal:true">
<div class="easyui-layout" data-options="fit:true">
<div data-options="region:'center'">
<form id="frm" method="post">
<input type="hidden" id="id" name="id"/>
<input type="hidden" id="orgPath" name="orgPath"/>
<input type="hidden" id="openid" name="openid"/>
<input type="hidden" id="flag" name="flag"/>
<input type="hidden" id="testMode" name="testMode"/>
<div style="margin-left:50px;margin-top:10px">
<input class="easyui-textbox" type="text" id="loginId" name="loginId" data-options="width:250,label:'登录名:',required:true" />
<input class="easyui-textbox" type="text" id="name" name="name" data-options="width:250,label:'姓名:'" />
</div>
<div style="margin-left:50px;margin-top:10px">
<input class="easyui-passwordbox" type="text" id="password" name="password" data-options="width:250,label:'密码:'" />
<input class="easyui-passwordbox" type="text" id="repwd" name="repwd" onclick="chkpwd()" data-options="width:250,label:'密码:'" />
</div>
<div style="margin-left:50px;margin-top:10px">
<input class="easyui-textbox" type="text" id="companyMail" name="companyMail" data-options="width:250,label:'公司邮箱:',required:true,validType:'email'" />
<input class="easyui-textbox" type="text" id="privateMail" name="privateMail" data-options="width:250,label:'私人邮箱:'" />
</div>
<div style="margin-left:50px;margin-top:10px">
<input class="easyui-textbox" type="text" id="address" name="address" data-options="width:250,label:'地址:'" />
<input class="easyui-textbox" type="text" id="companyTeleNo" name="companyTeleNo" data-options="width:250,label:'公司电话:'" />
</div>
<div style="margin-left:50px;margin-top:10px">
<input class="easyui-textbox" type="text" id="mobile" name="mobile" data-options="width:250,label:'手机号:'" />
<input class="easyui-textbox" type="text" id="title" name="title" data-options="width:250,label:'职位:'" />
</div>
<div style="margin-left:50px;margin-top:10px">
<input class="easyui-textbox" type="text" id="desc" name="desc" data-options="width:250,label:'描述:'" />
<select id="enabled" name="enabled" class="easyui-combobox" data-options="width:250,label:'是否有效:'" >
<option value="0">有效</option>
<option value="1">无效</option>
</select>
</div>
<div style="margin-left:50px;margin-top:10px">
<select id="enabled" name="enabled" class="easyui-combobox" data-options="width:250,label:'是否锁定:'" >
<option value="no">正常</option>
<option value="yes">已锁</option>
</select>
<input class="easyui-textbox" type="text" id="managerId" name="managerId" data-options="width:250,label:'上司:'" />
</div>
<div style="margin-left:50px;margin-top:10px">
<input class="easyui-datebox" type="text" id="birthday" name="birthday" data-options="width:250,label:'生日:'" />
<input class="easyui-textbox" type="text" id="cardId" name="cardId" data-options="width:250,label:'身份证:'" />
</div>
<div style="margin-left:50px;margin-top:10px">
<input class="easyui-textbox" type="text" id="seqno" name="seqno" data-options="width:250,label:'序号:'" />
<input class="easyui-datebox" type="text" id="failureDate" name="failureDate" data-options="width:250,label:'登录失败时间:'" />
</div>
<div style="margin-left:50px;margin-top:10px">
<select id="orgId" name="orgId" class="easyui-combobox"
data-options="width:250,label:'所在部门:',valueField:'id',textField:'name',url:'/orgload'" >
</select>
</div>
<div style="margin-left:50px;margin-top:30px">
<a id="btn" onclick="saveuser()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">保存</a>
<a id="btn" onclick="closeuser()" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'">关闭</a>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>