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

2023-11-20

1、效果

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

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首先,使用个人用户信息登录时的首页,要在菜单项中设置好链接和角色权限

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语言上面已经列出

 

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

 

 

/ *小白一个,仅留做自我学习记忆,时常修改,有不对不全之处还望不吝赐教!* /

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jeesite学习笔记——新增一条信息时同步创建用户 的相关文章

  • jeesite mysql_Jeesite框架mysql数据库初始报错

    INFO Scanning for projects WARNING WARNING Some problems were encountered while building the effective model for com thi
  • jeesite中的ztree应用

    话不多说 xff0c 直接开始一二三 jeesite页面上通过以自定义jstl lt sys treeselect gt 方式引入树形选择 1 lt sys treeselect id 61 34 company 34 name 61 34
  • Jeesite框架实用 如何实现本公司内数据权限功能使用

    文章目录 前言 一 数据库中创建一张视图表 非常重要 二 创建自己的表 三 使用jeesite导入表 生成代码 四 在此表生成的 service层中 加上过滤 五 在此表生成的 controller层中查看数据处 加上过滤 六 在此表生成的
  • jeesite前端页面与后台业务逻辑数据交互

    Key Word jsp controller json model parameter request response result param ajax data success http 1 jsp中提交请求的方式有哪些 get p
  • jeesite框架介绍

    1 jeesite框架介绍 http wenku baidu com view 7e543c24e45c3b3567ec8baf html 2 jeesite开发环境搭建及部署 http wenku baidu com link url L
  • 909422229_Jeesite 列表数据自定义排序规则

    技术交流群 958923746 有学习视频 文档等 1 列表排序 假排序哦 非数据库排序 page是查询到的列表数据 Collections sort page getList new Comparator
  • jeesite框架分析理解

    前文 jeesite代码生成器的使用 实例 报销表 地址 http blog csdn net m0 38021128 article details 68490920 前文中使用了jeesite框架的代码生成功能实现了一个小实例 但是实际
  • JEESITE4实战之旅(四) 去版权信息

    在用JEESITE4做项目的时候 我们当然不想看到系统上显示的是JEESITE的版权信息 并且还显示的是官网的链接 其实THINKGEM大神已经告诉了我们方法 只是很多人可能没有注意到 http jeesite4 mydoc io t 26
  • jeesite上传文件

    RequestMapping value saveFile public String saveFile Document document Model model RedirectAttributes redirectAttributes
  • Jeesite 登录逻辑分析

    最近项目需求研究免登录进入jeesite系统 于是对jeesite的登录逻辑进行了研究 一 当用户从url访问jeesite系统时 首先会通过下面方法 RequestMapping value adminPath login method
  • Jeesite开发平台限制用户多点登录

    Jeesite开发平台限制用户多点登录 授权查询回调函数 进行鉴权但缓存中无用户的授权信息时调用 Override protected AuthorizationInfo doGetAuthorizationInfo PrincipalCo
  • [已解决]jeesite生成页面的弹窗问题

    jeesite生成的页面如需弹窗layer写法会有问题 actions push a href class btnList title i class fa fa check i a nbsp data confirm text 提示信息
  • JeeSite数据权限控制解决方案

    支持如下数据范围设置 所有数据 所在公司及以下数据 所在公司数据 所在部门及以下数据 所在部门数据 仅本人数据 按明细设置 特殊情况下 跨机构授权 User user UserUtils getUser 使用标准查询 DetachedCri
  • 搭建jeesite开发环境

    jeesite tomcat7 mysql eclipse maven jeesite下载路径 https github com thinkgem jeesite 下载jeesite并解压 在D 01 Projects 06 jeesite
  • jeesite快速开发平台(一)----简介

    以下内容来自官网 一 平台简介 JeeSite是基于多个优秀的开源项目 高度整合封装而成的高效 高性能 强安全性的开源Java EE快速开发平台 JeeSite是您快速完成项目的最佳基础平台解决方案 JeeSite是您想学习Java平台的最
  • Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等

    jeesite关于权限这方面的记录或者文章很少 看官方文档又看不懂 自己的业务又需要进行权限处理 怎么办 当然问大佬了 我就记录下我的解决办法 给jeesite权限方面的文章做点贡献 我先说下我的业务逻辑 我需要实现不同公司的人登陆后台 只
  • jeesite实战(四)——用户权限

    系列文章目录 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 例如 第一章 Python 机器学习入门之pandas的使用 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一
  • jeesite学习笔记——新增一条信息时同步创建用户

    1 效果 截图 添加一条个人信息时同步创建它的用户信息 2 部分代码展示 因为要为个人同步创建 主体在 个人信息 模块 与 用户信息 添加模块无关 只会调用它的部分方法 所以所有代码都在 个人信息 模块进行操作 2 1因为操作涉及到两个数据
  • Jeesite框架实用 前端页面展示表如何插入其他表数据

    目录 前言 问题 解决方法 第一步 第二步 第三步 前言 最近做类似于OA产品时选用了Jeesite框架 也学习有一段时间 这个框架的初级操作嘛就是 设计好表然后用代码生成器生成 一张表生成一个前端页面显示 问题 代码生成器根据一张数据库表
  • 5分钟带你看懂Jeesite10大功能要点

    jeesite内容丰富 集成了大量优秀的组件 是一个值得研究的框架 它有 1 shiro安全权限控制 2 mybatis查询缓存接口扩展 3 ecache分布式缓存整合 4 页面资源缓存优化 5 多数据源灵活切换 6 mybatismapp

随机推荐

  • TypeScript从入门到精通(六)数组类型的定义

    常见且单一的数组 const numberArr string 123 456 789 数组有多种类型格式的 const AtWill string number 小爱好 18 数组中对象的定义 const obj name string
  • Lattice PCIe 学习 1

    我自己之前没有使用过lattice 平台 这次公司准备使用lattice 的PCIe IPCore 我准备在CSDN上写一系列学习笔记 记录使用过程 我使用的平台 win10 lattice diamond 3 12 这个软件下载地址 ht
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • [ 容器 ] Docker 的数据管理

    目录 一 Docker 的数据管理 1 1 数据卷 2 数据卷容器 二 端口映射 三 容器互联 使用centos镜像 四 Docker 镜像的创建 1 基于现有镜像创建 2 基于本地模板创建 3 基于Dockerfile 创建 3 1 联合
  • [776]github fork 别人的项目源作者更新后如何同步更新

    1 打开fork 过来的项目如下所示 2 点击new pull request 3 在进入的界面 后进行将左边的设置为你自己的仓库 fork 过来的源在右边 如下图 4 当选择完后会变成下图 5 接下来 将其展示出可以调整状态 右边改为源f
  • Linux修改hostname的几种方式,及遇到的问题

    之前修改主机名全都是采用的network方式 今天遇到点问题 发现hostname并非之前理解的那样 自己配置hostname的问题 这与系统的版本有关系么 腾讯云7 5的 百度云的是6 5 我自己在VMware上安装的6 5就没 etc
  • pybind播放视频

    解码挺快的 0 16ms 但是不知道为什么 还没传数据 特别慢 400 800ms一张图片 coding utf 8 import pysdk as demo import time filepath 0217 h264 start tim
  • Sprng依赖注入(三):构造方法注入是如何工作的?

    前言 这是Spring依赖注入系列的第三篇 前两篇主要分析了Spring bean依赖属性注入的两种方式 是字段注入和setter方法注入 单独比较这两种方式 会发现其过程和工作原理非常类似 那么构造方法注入会不会也和前两种比较类似呢 本篇
  • Android EditText TextWatcher应用实例

    Android TextWatcher应用实例 2012 02 21 15 52 12 转载 标签 android textwatcher 杂谈 分类 手机世界 1 使用TextWathcer限制输入字符个数 布局中EditText在and
  • 5类6类7类网线对比_3类、5类、超5类网线大家了解多少?

    随着时代的进步 网络成为大家必不可少的东西 在安装网络的时候网线是大家最容易忽略的部件 在组建网络时 大家大多都重视光猫 交换机 路由器等设备 但是对于网线 大家一般都不会挑剔 可是随着网络的提速 网线的重要性也越来越明显 今天蜗牛就和大家
  • 给定一个序列快速计算不同二叉树的个数

    给定一个序列求二叉树的个数 就相当于n个数进栈然后得到一个出栈序列种树 假设用f n 表示n个数的出栈序列数的种树 假设第一个出栈序数是k 则k将1 n的序列分为两个序列 其中一个是1 k 1 序列个数是k 1 另一个是 k 1 n 序列个
  • mybatis批量插入后获取自增ID

    mybatis批量插入后获取自增ID 上代码 Mapper java 批量新增产品元素 param elementList 产品元素列表 return 结果 public int insertOrderElement List
  • 分享常用的开发资源

    前言 分享一些本人工作至今整理的一些资源 主要是包括工作 生活 博文中用到的文档 软件和网站 1 文档暂时未整理好 就先不放上来 如需要某方面的文档 可以联系本人 如果有的话可以进行分享 包括但不限于java 大数据 Python SQL等
  • DC-DC的功率电感 是越大越好? 还是越小越好?

    DC DC的功率电感 是越大越好 还是越小越好 问题 DC DC的功率电感 是越大越好 还是越小越好 回答 刚刚好最好 过大过小都不好 首先由公式可知 电感值越大 其Ripple越小 亦即电流越稳定 进而降EMI辐射干扰 但过大的电感值 会
  • 微信小程序之map地图规划路线以及显示距离

    有个问题 在选择公交路线 包含步行和公交 时 怎么才能让不同的路线显示不同的颜色 ps 有个方式 自己写坐标解压往后的存入新数组 把步行时的数据标注下 有什么简单的方法呢 自定义函数文件 自动获取定位信息 function getLocat
  • Kraken:一款基于爆破技术的多平台分布式密码安全测试工具

    关于Kraken Kraken是一个功能强大的多平台在线分布式密码安全测试工具 该平台基于暴力破解技术来实现对密码安全性的测试 并允许广大研究人员在多台设备上以并行处理的方式遍历字典 基于crunch字典生成器 除此之外 该工具不仅可以通过
  • 密码学替代密码

    1 请指出一般替代密码的明文空间 密文空间和密钥空间各是什么 明文空间M和密文空间C都是26个英文字母的集合 密钥空间K Z 26 gt Z 26 是置换 是所有可能置换的集合 2 单表替代密码和多表替代密码的主要特点是什么 单表替代密码
  • python读取文件名存到list_Python之从文件读取数据到list的实例

    本篇文章小编为大家分享一篇Python之从文件读取数据到list的实例讲解 文章中有代码列出供大家参考 本篇文章具有很好的参考价值 希望对大家有所帮助 下面随扣丁学堂Python培训小编一起来看一下Python之从文件读取数据到list的实
  • TJmaie - 阅读作业

    读了邹老师的讲义以及移山之道 有不小的收获 不过按要求 先说说疑问吧 由于邹老师大多都以讲故事的方式来讲道理 严格意义上来说 是很难找到 错误 的 只是各人认不认同罢了 我在团队中的身份是Dev 我也重点关注了这一块 顶级程序员的心得 Co
  • jeesite学习笔记——新增一条信息时同步创建用户

    1 效果 截图 添加一条个人信息时同步创建它的用户信息 2 部分代码展示 因为要为个人同步创建 主体在 个人信息 模块 与 用户信息 添加模块无关 只会调用它的部分方法 所以所有代码都在 个人信息 模块进行操作 2 1因为操作涉及到两个数据