/** 更新所有子部门的SerialNo */ @Transactional public void updateChildrenSerialNo(Dept parent, Map serialMap) { logger.debug("Update " + parent.getName() + "'s children serial No."); Set<Dept> children = parent.getChildDepts(); Integer serial = null; for (Dept child : children) { serial = this.getSerial(child, serial); child.setSerialNo(buildSerialNo(parent, serial)); serialMap.put(child.getId(), buildSerialNo(parent, serial)); // getDao().saveObject(child); if (child.getChildDepts().size() > 0) { updateChildrenSerialNo(child, serialMap); } } }
/** 重设所有部门编号。 */ @Transactional public void updateAllSerialNo() { List<Dept> tops = getDao().query("from Dept d where d.parentDept is null"); Map serialMap = new HashMap(100); // 用于存放部门ID-SerialNo // 计算所有部门编号,并将部门ID-部门编号的对应关系存入serialMap Integer serial = null; for (Dept top : tops) { serial = this.getSerial(top, serial); // String serialNo = getSerialNo(top); top.setSerialNo(buildSerialNo(null, serial)); serialMap.put(top.getId(), buildSerialNo(null, serial)); // getDao().saveObject(top); if (top.getChildDepts().size() > 0) { this.updateChildrenSerialNo(top, serialMap); } } // 批量更新部门编号 Set<Integer> ids = serialMap.keySet(); for (Integer id : ids) { Dept dept = get(id); getDao().evict(dept); dept.setSerialNo((String) serialMap.get(id)); getDao().getHibernateTemplate().update(dept); } }