以前按照要求写过一个树型的分支移动的代码,具体的要求呢是当选中某一个节点时,这个节点的分支,通过修改树型结构中的节点的依次的顺序, 做上或者下的移动。主要是代码的结构,觉得有总结的必要
这只是当时写的,现在觉得有一点启发的代码,肯定有不足,希望给予指点。
经过修改和补充之后的代码:
/**
* @pro_code 项目编码
* @selectId 选中的节点的ID
* @isUp 移动的方向
*
**/
public void moveUpDown(String pro_code, Long selectId, Long isUp) {
try {
ProjectOrder selectOrder = dataOrderDao.getProjectOrder(pro_code, selectId);
List selectList = dataOrderDao.findBranch(selectOrder);
ProjectOrder targetOrder =
dataOrderDao.findTargetProjectOrder (selectOrder, isUp);
if (targetOrder == null)
throw new BusinessException("不能再移动");
List targetList = dataOrderDao.findBranch(targetOrder);
long selectLen = selectList.size();
long targetLen = targetList.size();
updateOrder(targetList, isUp == 2 ? -selectLen:selectLen);
updateOrder(selectList, isUp == 1 ? -targetLen:targetLen);
dataOrderDao.updateOrder(selectList);
dataOrderDao.updateOrder(targetList);
} catch (Exception e) {
if (e instanceof BusinessException) throw (BusinessException) e;
LOG.error("移动出现错误", e);
throw new BusinessException("移动出现错误");
}
}
这只是当时写的,现在觉得有一点启发的代码,肯定有不足,希望给予指点。
经过修改和补充之后的代码:
/**
* @projectCode 项目编码
* @selectId 选中的节点的ID
* @upDown 移动的方向 0:down 1:up
**/
public void moveBranch(String projectCode, Long selectId, Integer upDown) {
try {
ProjectOrder startOrder = dataOrderDao.getProjectOrder(projectCode, selectId);
List nowBranch = getBranch(startOrder);
ProjectOrder targetOrder = findTargetOrder(startOrder, upDown);
List targetBranch = getBranch(targetOrder);
updateNowBranch(nowBranch, upDown, targetBranch.size());
updateTargetBranch(targetBranch,upDown, nowBranch.size());
} catch (Exception e) {
if (e instanceof BusinessException) throw (BusinessException) e;
LOG.error("移动出现错误", e);
throw new BusinessException("移动出现错误");
}
}
private void updateNowBranch(List nowBranch, Integer upDown, Long size) {
updateBranchOrder(nowBranch, upDown == 1 ? -size : size);
}
private void updateTargetBranch(List targetBranch, Integer upDown, Long size) {
updateBranchOrder(targetBranch, upDown == 1 ? size : -size);
}
private ProjectOrder findTargetOrder(ProjectOrder startOrder, Integer upDown) {
ProjectOrder targetOrder =
dataOrderDao.findTargetProjectOrder (startOrder, upDown);
return targetOrder;
}
private List getBranch(ProjectOrder startOrder) {
if (startOrder == null)
throw new BusinessException("不能再移动");
List branch = dataOrderDao.findBranch(startOrder);
return branch
}
private void updateBranchOrder(List branch, long size){
updateOrder(branch, size);
dataOrderDao.updateOrder(branch);
}
private void updateOrder(List<ProjectOrder> branch, long size) {
for (ProjectOrder each : branch) {
order.setOrder_num(each.getOrder_num() + size);
}
}