jeesite学习笔记——新增一条信息时同步创建用户

1、效果

截图:(添加一条个人信息时同步创建它的用户信息)

jeesite学习笔记——新增一条信息时同步创建用户

jeesite学习笔记——新增一条信息时同步创建用户

jeesite学习笔记——新增一条信息时同步创建用户

2、部分代码展示

因为要为个人同步创建,主体在“个人信息”模块,与“用户信息”添加模块无关,只会调用它的部分方法,所以所有代码都在“个人信息”模块进行操作。

2.1因为操作涉及到两个数据库(expert和user),所以实体表要保存expert的用户id,同时还要在xml中进行链接。

2.1.1 实体层expert.java需要插入:

private User user;					//专家的用户信息

public User getUser() {
	return user;
}
	
public void setUser(User user) {
	this.user = user;
}

2.1.2 dao层expertDao.xml的链接

 

<sql id="expertColumns">
    ..
    ..
    ..
    a.userId AS "user.id",
    ..
    ..
    ..
</sql>

<sql id="expertJoins">
	...
	LEFT JOIN sys_user su ON su.id = a.userId
</sql>

<select id="getUser" resultType="User">
	SELECT *
	FROM sys_user su
	WHERE su.login_name = #{string} AND su.del_flag = 0
</select>

<select id="findTheData" resultType="Expert">
	SELECT 
		<include refid="expertColumns"/>
	FROM expert a
	    <include refid="expertJoins"/>
	WHERE a.userId = #{user.id}
</select>

后面的insert和update部分参照sql,省略..

2.2.2 controller层expertController.java协调调用,但主要方法都在service层,所以新增用户的方法写在expertService.java中

这是save方法

@Transactional(readOnly = false)
public void save(Expert expert) {
	//新增专家时插入“已分配论文数”为0
	if(expert.getDistributeNum() == null || expert.getDistributeNum() < 0 ) {
		expert.setDistributeNum(0);
	}
	User expertUser = new User();
	if(expert.getUser() == null){				//用户信息为空,
		expertUser = addUser(expert);			//新增一条专家的用户信息并返回这条信息
		expert.setUser(expertUser);				//将这条信息插入专家信息中
	}else{
		expertUser = this.updateExpertUser(expert);			//更新用户信息并返回
		expert.setUser(expertUser);							//保存更新后的用户信息
	}
	encryption(expert);
	super.save(expert);							//保存**专家表**中的专家信息
}

这是addUser方法,这里默认使用手机号作为登录名,手机号后六位作为登录密码

//新生成一条专家数据时自动生成一个用户
@Transactional(readOnly = false)
public User addUser(Expert expert) {
	User user = new User();
	user.setId(IdGen.uuid());
	Office company = new Office();
	Office office = new Office();
	//根据专家类型分配用户归属(校内1和校外5)
	if(expert.getExpertType().equals("0")) {
		company.setId("1");
		office.setId("2");
	}else {
		company.setId("5");
		office.setId("6");
	}
	//根据用户类型获取一整条数据
	company = officeService.findTheData(company);
	office = officeService.findTheData(office);
	user.setCompany(company);
	user.setOffice(office);
	
	//新用户默认用手机号作为登录名
	user.setLoginName(expert.getPhone());
	//用手机号后6位作为登录密码
	user.setPassword(this.getUserPassword(expert.getPhone()));
	user.setNo(expert.getId());
	user.setName(expert.getExpertName());
	user.setEmail(expert.getEmail());
	user.setPhone(expert.getPhone());
	user.setUserType("2");
	user.setUpdateDate(new Date());
	user.setCreateDate(user.getUpdateDate());
	user.setCreateBy(UserUtils.getUser());
	user.setUpdateBy(UserUtils.getUser());
	
	userDao.insert(user);
	//角色数据有效性验证,过滤不在授权内的角色
	List<Role> roleList = Lists.newArrayList();
	Role r = new Role();
	r.setId(Expert_Role);
	roleList.add(r);
	user.setRoleList(roleList);
			
	systemService.saveUser(user);
	return user;
}

private String getUserPassword(String phone_num){ 
	if(phone_num != null && phone_num.length() > 6) { 
		return SystemService.entryptPassword(phone_num.substring(phone_num.length()-6));	
	}else{ 
		return SystemService.entryptPassword("123456");
	} 
}

这是updateExpertUser方法,用于更新用户信息

//更新**用户表**中的专家用户信息,返回更新后的用户信息
@Transactional(readOnly = false)
public User updateExpertUser(Expert expert) {
	User expertUser = systemService.getUser(expert.getUser().getId());		//获取**用户表**中该专家的用户数据
	expertUser.setName(expert.getExpertName());
	expertUser.setLoginName(expert.getPhone());								//更新登录名
	expertUser.setPhone(expert.getPhone());									//更新手机号
	expertUser.setEmail(expert.getEmail());									//更新邮箱
	systemService.saveUser(expertUser);										//更新**用户表**中的用户信息
	return expertUser;
}

同时,还要注意,在删除该个人信息时还要同步删除他的用户信息

@Transactional(readOnly = false)
public void delete(Expert expert) {
	super.delete(expert);
	this.deleteUser(expert);
}

//删除一条专家数据时同步删除该用户数据
public void deleteUser(Expert expert) {
	User user = expert.getUser();
	systemService.deleteUser(user);
}

到此,同步新增用户基本结束了,但如果使用该用户登录时,还要注意个人信息与用户信息的同步

3、个人登录时对个人信息的修改

3.1首先,使用个人用户信息登录时的首页,要在菜单项中设置好链接和角色权限

jeesite学习笔记——新增一条信息时同步创建用户

jeesite学习笔记——新增一条信息时同步创建用户

3.2 controller层调转到jsp

@RequiresPermissions("jwcmis:expert:view")
@RequestMapping(value = "expertLogin")
public String expertLogin(Expert expert, Model model) {						//专家通过账号信息登录
	expert.setUser(UserUtils.getUser());									//把当前登录的用户信息放入登录的专家个人信息中
	expert = expertService.findTheData(expert);								//通过用户信息找到该专家的所有个人信息,但此时用户信息中被覆盖只有用户id
	expert.setUser(UserUtils.getUser());									//重新插入登录的用户信息
	expert = expertService.decryption(expert);								//对个人信息解密
	model.addAttribute("expert", expert);
	return "imd/jwcmis/expertUpdate";
}

//登录用户信息更新
@RequiresPermissions("jwcmis:expert:edit")
@RequestMapping(value = "updateToSave")
public String updateToSave(Expert expert, String oldPhone, Model model, RedirectAttributes redirectAttributes) {
	if (!beanValidator(model, expert)){
		return form(expert, model);
	}
	expertService.save(expert);
	expertService.decryption(expert);
	if(!expert.getPhone().equals(oldPhone)) {		//由于手机号作为登录名,当手机号改变时,保存后需要重新登录
		UserUtils.getSubject().logout();
		return "redirect:" + adminPath + "/login";
	}else {
		addMessage(redirectAttributes, "已成功保存您的个人信息!");
		return "redirect:"+Global.getAdminPath()+"/jwcmis/expert/expertLogin";
	}
}

3.3 jsp层展示个人信息(这个文件需要自己在from文件相同位置处新增,可以复制form的部分代码)

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<html>
<head>
	<title>专家信息管理</title>
	<meta name="decorator" content="default" charset="UTF-8" />
	<script type="text/javascript">
		var emailOld = "";
		var phoneOld = "";
		var bankCardNumberOld = "";
		$(document).ready(function() {
			$("#inputForm").validate({
				submitHandler: function (form){
					if(checkEmail()){
						if(checkPhone()) {
							if(checkBankCardNumber()){
								loading('正在提交,请稍等...');
								form.submit();
							}else {
								alert("银行卡号验证未通过! ");
								return false;
							}
						}else {
							alert("手机号码验证未通过! ");
							return false;
						}
					}else{
						alert("邮箱验证未通过! ");
						return false;
					}
				},
				errorContainer: "#messageBox",
				errorPlacement: function(error, element) {
					$("#messageBox").text("输入有误,请先更正。");
					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
						error.appendTo(element.parent().parent());
					} else {
						error.insertAfter(element);
					}
				}
			}); 
			//已分配论文数填充
			var distributeNum = $("#distributeNum").val();
			if(distributeNum == null || distributeNum == ""){
				$("#distributeNum").val(0);
			}
			//获取原有的用户名、邮箱、手机号、银行卡号
			emailOld = $("#email").val();
			phoneOld = $("#phone").val();
			bankCardNumberOld = $("#bankCardNumber").val();
		});	
		
		/*这一部分是邮箱、手机号、银行卡号的验证,可以参照我的其他笔记*/
	</script>
</head>
<body>
	<ul class="nav nav-tabs">
		<li><a href="${ctx}/jwcmis/expert/expertLogin">基本信息修改</a></li>
	</ul><br/>
	<form:form id="inputForm" modelAttribute="expert" action="${ctx}/jwcmis/expert/updateToSave?oldPhone=${expert.phone}" method="post" class="form-horizontal">
		<form:hidden path="id" />
		<sys:message content="${message}" />
		<div class="control-group">
			<label class="control-label">专家姓名:</label>
			<div class="controls">
				<span class="help-inline"><font color="black" size="4" >${expert.expertName}</font></span>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label">专业:</label>
			<div class="controls">
				<form:input path="major" htmlEscape="false" maxlength="64" class="input-xlarge required" />
				<span class="help-inline"><font color="red">*</font> </span>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label">研究方向:</label>
			<div class="controls">
				<form:input path="researchName" htmlEscape="false" maxlength="64" class="input-xlarge required" />
				<span class="help-inline"><font color="red">*</font> </span>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label">专家类型:</label>
			<div class="controls">
				<form:radiobuttons path="expertType" id="expertType" items="${fns:getDictList('expertType')}" itemLabel="label" itemValue="value" htmlEscape="false" class="required" />
				<span class="help-inline"><font color="red">*</font> </span>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label">已分配论文数:</label>
			<div class="controls">
				<span class="help-inline"><font color="black">${expert.distributeNum}</font> </span>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label">邮箱:</label>
			<div class="controls">
				<form:input path="email" id="email" value="" oninput="checkEmail()" htmlEscape="false" maxlength="64" class="input-xlarge required" />
				<span class="help-inline" id="email_notice"><font color="red">*</font> </span>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label">手机号:</label>
			<div class="controls">
				<form:input path="phone" id="phone" value="" oninput="checkPhone()" htmlEscape="false" maxlength="11" class="input-xlarge required" />
				<span class="help-inline" id="phone_notice"><font color="red">*</font> </span>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label">银行卡号:</label>
			<div class="controls">
				<form:input path="bankCardNumber" id="bankCardNumber" oninput="checkBankCardNumber()" htmlEscape="false" maxlength="64" class="input-xlarge required" />
				<span class="help-inline" id="bankCardNumber_notice"><font color="red">*</font> </span>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label">单位:</label>
			<div class="controls">
				<form:input path="place" htmlEscape="false" maxlength="64" class="input-xlarge required" />
				<span class="help-inline"><font color="red">*</font> </span>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label">备注信息:</label>
			<div class="controls">
				<form:textarea path="remarks" htmlEscape="false" rows="4" maxlength="255" class="input-xxlarge " />
			</div>
		</div>
		<div class="form-actions">
			<shiro:hasPermission name="jwcmis:expert:edit">
				<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存" />&nbsp;
			</shiro:hasPermission>
		</div>
	</form:form>
</body>
</html>

3.4 service层用户信息调用

//根据登录名返回用户数据 
@Transactional(readOnly = false)
public Expert findTheData(Expert expert) {
	return expertDao.findTheData(expert);
}

3.5 xml中的sql语言上面已经列出

 

该功能的代码差不多就是这样了,有错误红叉的地方可以根据错误提示修改

 

 

/ *小白一个,仅留做自我学习记忆,时常修改,有错的希望留言指正,不喜勿喷!* /