3-3 更新部门接口

原创 2018年04月16日 19:12:46

SysDeptService

@Service
public class SysDeptService {
	
	@Autowired
	private SysDeptMapper sysDeptMapper;
	
	public void update(@Valid DeptParam param) {
		if(checkExist(param.getParentId(), param.getName(), param.getId())) {
			throw new ParamException("同一层级下存在相同名称的部门");
		}
		SysDept before = sysDeptMapper.selectByPrimaryKey(param.getId());
		// 使用 checkNotNull 方法进行校验会抛空指针异常,还可以用自定义异常说明的方法
		Preconditions.checkNotNull(before, "待更新的部门不存在");
		
		SysDept after = SysDept.builder().id(param.getId()).name(param.getName()).parentId(param.getParentId())
	                					 .seq(param.getSeq()).remark(param.getRemark()).build();
	    after.setLevel(LevelUtil.calculateLevel(getLevel(param.getParentId()), param.getParentId()));
	    after.setOperator("system-update");	// TODO
	    after.setOperateId("127.0.0.1");	// TODO
	    after.setOperateTime(new Date());
	    
	    updateWithChild(before, after);
	}
	
	// 更新子部门
	@Transactional
	public void updateWithChild(SysDept before, SysDept after) {
		String newLevelPrefix = after.getLevel();
		String oldLevelPrefix = before.getLevel();
		if(!after.getLevel().equals(before.getLevel())) {
			List<SysDept> oldChildDeptList = sysDeptMapper.getChildDeptListByLevel(oldLevelPrefix);
			if(CollectionUtils.isNotEmpty(oldChildDeptList)) {
				for(SysDept dept: oldChildDeptList) {
					String oldChildDeptLevel = dept.getLevel();
					if(oldChildDeptLevel.indexOf(oldLevelPrefix) == 0) {
						String newChildDeptLevel = newLevelPrefix + oldChildDeptLevel.substring(oldLevelPrefix.length());
	                    dept.setLevel(newChildDeptLevel);
					}
				}
				sysDeptMapper.batchUpdateLevel(oldChildDeptList);
			}
		}
		sysDeptMapper.updateByPrimaryKey(after);
	}
	
	// 检查同一层级下是否存在相同名称的部门
	private boolean checkExist(Integer parentId, String deptName, Integer deptId) {
		// TODO
		return false;
	}
	
	// 获取部门的 Level
	private String getLevel(Integer deptId) {
		SysDept dept = sysDeptMapper.selectByPrimaryKey(deptId);
		if(dept == null) {
			return null;
		}
		return dept.getLevel();
	}
}

SysDeptMapper 添加 getChildDeptListByLevel、batchUpdateLevel 方法

<select id="getChildDeptListByLevel" resultMap="BaseResultMap">
  select
  <include refid="Base_Column_List" />
  from sys_dept
  where level like #{level} || '.%' 
</select>

<update id="batchUpdateLevel" parameterType="map">
  <foreach collection="oldChildDeptList" item="dept" separator=";">
    UPDATE sys_dept
    SET level = #{dept.level}
    WHERE id = #{dept.id}
  </foreach>
</update>

SysDeptController

@RequestMapping("/update")
@ResponseBody
public JsonData updateDept(DeptParam param) {
	sysDeptService.update(param);
	return JsonData.success();
}

注:对象不存在抛出异常函数(import com.google.common.base.Preconditions)

Preconditions.checkNotNull(object, "message");


微信企业号开发九:异步任务(全员覆盖成员)

微信异步任务是在批量更新部门或者人员时使用,向微信服务器发送一个CVS的文件,微信服务器会根据CVS文件进行更新,下面是批量更新人员的模板。注意代码中CVS换行使用\n        全员覆盖成员时,...
  • myfmyfmyfmyf
  • myfmyfmyfmyf
  • 2015-12-17 15:34:23
  • 3419

小紫书 习题 3-3(UVA 1225) 数数字(Digit Counting)

一开始想了想,没有什么好的办法,以为要用什么科技。 然后没有什么想法,就去网上查题解,原来暴力打表就可以… 以后还得看数据范围分析时间空间复杂度啊… 想复杂了…本来就是一道水题 AC代...
  • code12hour
  • code12hour
  • 2015-08-07 10:57:33
  • 616

钉钉API接口开发(二) 部门 /department

打通钉钉接口之后,测试获取部门列表等信息. 获取部门列表也没什么区别,唯一的大坑就是,没有部门权限,  很奇怪,全部已经打勾了,但是还是没有权限,最后发现.公司那里也要打勾.点击下拉层的通讯录那里...
  • JxcNet
  • JxcNet
  • 2017-10-18 16:12:00
  • 388

习题3-3 数数字

#include #include int main() { int m; scanf("%d",&m); for(int times=0;times
  • dherorunner
  • dherorunner
  • 2017-03-02 20:18:28
  • 96

3-3 构造函数的调用(高级)--SDUT

3-3 构造函数的调用(高级) Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握创建普通对象、创建对象数组和动态创建...
  • M17865923255
  • M17865923255
  • 2015-11-01 14:18:44
  • 710

微信企业号开发(五)--成员管理,增删改查

1、打开企业号开发文档之成员管理http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AE%A1%E7%90%86%E6%88%90%E5%91%98...
  • u014520797
  • u014520797
  • 2016-02-03 10:21:38
  • 3631

微信企业号开发(四)-管理部门,增删改查

微信企业号开发之部门管理,增删改查
  • u014520797
  • u014520797
  • 2016-02-02 17:47:08
  • 4010

项目-系统接口实现 如何做好接口

1.1     前言 在大型公司的软件实施中,软件接口在实施中占有较大比重。由于大型公司企业信息化程度相对较高,使用的软件系统也较多,当需将多个系统协调配合进行工作时,接口是进行数据沟通、整合信息最...
  • zhao6886
  • zhao6886
  • 2014-04-01 18:12:14
  • 555

企业信息部门的定位是什么

【IT168 编者按】IT部门自诞生以来就被定义为一个辅助性的服务部门,它的主要任务的就是维护公司的IT资产并为公司提供IT运营支撑。可这几年国内企业的IT部门定位在潜移默化的发生着微妙改变,一方面由...
  • happypolo
  • happypolo
  • 2010-07-31 17:08:00
  • 1739

ACM 算法3-3 迷宫 程序

有一个 10 x 10 的迷宫,起点是‘S’,终点是‘E’,墙是‘#’,道路是空格。一个机器人从起点走到终点。当机器人走到一个通道块,前面已经没有路可走时,它会转向到当前面向的右手方向继续走。如果机器...
  • Procher
  • Procher
  • 2015-03-29 20:58:25
  • 662
收藏助手
不良信息举报
您举报文章:3-3 更新部门接口
举报原因:
原因补充:

(最多只允许输入30个字)