Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoomForm.js =================================================================== diff -u -r18004 -r18164 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoomForm.js (.../operationRoomForm.js) (revision 18004) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoomForm.js (.../operationRoomForm.js) (revision 18164) @@ -19,12 +19,13 @@ method : 'POST', success : function(thisForm, action) { windowObj.close(); - showResult('保存成功'); + showResult(action.result.message); Ext.getCmp('west-panel').root.reload(); grid.dwrReload(); }, failure : function(thisForm, action) { - showResult('保存失败了,请联系管理员'); + showResult(action.result.message); + saveBtn.enable(); } }); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManagerImpl.java =================================================================== diff -u -r18022 -r18164 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManagerImpl.java (.../OperationRoomManagerImpl.java) (revision 18022) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManagerImpl.java (.../OperationRoomManagerImpl.java) (revision 18164) @@ -116,32 +116,52 @@ public void saveOrUpdateOperationRoom(OperationRoom operationRoom) { String isInvoice = operationRoom.getIsInvoice(); Long id = operationRoom.getId(); - if (id != null) { - if (Constants.STR_NO.equals(isInvoice)) { - LinkedList idList = new LinkedList(); - getAllSubordinateOperationRoomId(id, idList); - if (CollectionUtils.isNotEmpty(idList)) { - String inMember = SqlUtils.getNonStringFieldInCollectionsPredicate("id", idList); - String sql = String.format("update OperationRoom set isInvoice='%s' where %s", Constants.STR_NO, inMember); - objectDao.executeUpdate(sql); + Long parentOperationRoomId = operationRoom.getParentOperationRoomId(); + String operationRoomName = operationRoom.getOperationRoomName(); + + //手术间名称不可以相同 + String hql = String.format("where operationRoomName='%s' and id<>%s", + operationRoomName, id == null ? -1 : id); + OperationRoom temp = (OperationRoom) objectDao.getBySql(OperationRoom.class.getSimpleName(), hql); + if (temp != null) { + throw new RuntimeException("此手术间已经存在,保存失败!"); + } + + if (parentOperationRoomId != null) { + OperationRoom parent = getOperationRoomById(Long.valueOf(parentOperationRoomId)); + operationRoom.setParentOperationRoomId(parent.getId()); + operationRoom.setParentOperationRoomName(parent.getOperationRoomName()); + operationRoom.setParentOperationRoomCoding(parent.getOperationRoomCoding()); + + if (id != null) { + if (Constants.STR_NO.equals(isInvoice)) { //把是否发货属性改成“否”,那么他的所有子手术间也要设置成“否” + LinkedList idList = new LinkedList(); + getAllSubordinateOperationRoomId(id, idList); + if (CollectionUtils.isNotEmpty(idList)) { + String inMember = SqlUtils.getNonStringFieldInCollectionsPredicate("id", idList); + String sql = String.format("update OperationRoom set isInvoice='%s' where %s", Constants.STR_NO, inMember); + objectDao.executeUpdate(sql); + } } - } - String whereHql = String.format("where parentOperationRoomId=%s", id); - OperationRoom subordinateOperationRoom = (OperationRoom) objectDao - .getBySql(OperationRoom.class.getSimpleName(), whereHql); - if (subordinateOperationRoom != null - && !StringTools.equals(subordinateOperationRoom.getOrgUnitName(), operationRoom.getOrgUnitName())) { - LinkedList idList = new LinkedList(); - getAllSubordinateOperationRoomId(id, idList); - if (CollectionUtils.isNotEmpty(idList)) { - String inMember = SqlUtils.getNonStringFieldInCollectionsPredicate("id", idList); - String sql = String.format("update OperationRoom set orgUnitName='%s',orgUnitCoding='%s' where %s", - operationRoom.getOrgUnitName(), operationRoom.getOrgUnitCoding(), inMember); - objectDao.executeUpdate(sql); + + //随便找一个子手术间,既可以知道是否修改过所属科室 + String whereHql = String.format("where parentOperationRoomId=%s", id); + OperationRoom subordinateOperationRoom = (OperationRoom) objectDao + .getBySql(OperationRoom.class.getSimpleName(), whereHql); + if (subordinateOperationRoom != null + && !StringTools.equals(subordinateOperationRoom.getOrgUnitName(), operationRoom.getOrgUnitName())) { //修改了所属科室,所有下级的也要修改 + LinkedList idList = new LinkedList(); + getAllSubordinateOperationRoomId(id, idList); + if (CollectionUtils.isNotEmpty(idList)) { + String inMember = SqlUtils.getNonStringFieldInCollectionsPredicate("id", idList); + String sql = String.format("update OperationRoom set orgUnitName='%s',orgUnitCoding='%s' where %s", + operationRoom.getOrgUnitName(), operationRoom.getOrgUnitCoding(), inMember); + objectDao.executeUpdate(sql); + } } } + objectDao.saveOrUpdate(operationRoom); } - objectDao.saveOrUpdate(operationRoom); } @Override public void deleteOperationRoomByIds(List idList) { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManager.java =================================================================== diff -u -r18004 -r18164 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManager.java (.../OperationRoomManager.java) (revision 18004) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManager.java (.../OperationRoomManager.java) (revision 18164) @@ -20,7 +20,12 @@ public OperationRoom getOperationRoomById(Long id); /** - * 保存或者更新手术间(注意:1、如果把是否发货属性值为否,则所有下级的值也要改成否 2、如果修改了所属科室,所有下级的也要修改) + * 保存或者更新手术间,注意以下3点 + *
    + *
  • 手术间已经存在(即手术间名称相同),保存失败 + *
  • 如果把是否发货属性值修改为否,则所有下级的值也要改成否 + *
  • 如果修改了所属科室,所有下级的也要修改 + *
* @param operationRoom 目标手术间 */ public void saveOrUpdateOperationRoom(OperationRoom operationRoom); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/action/OperationRoomAction.java =================================================================== diff -u -r18004 -r18164 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/action/OperationRoomAction.java (.../OperationRoomAction.java) (revision 18004) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/action/OperationRoomAction.java (.../OperationRoomAction.java) (revision 18164) @@ -53,17 +53,16 @@ /** * 保存手术间 - * @param parentOperationRoomId 上级手术间的id,通过这个可以得到上级手术间的名称和编码 */ public void saveOperationRoom() { - String parentOperationRoomId = StrutsParamUtils.getPraramValue("parentOperationRoomId", ""); - if (StringTools.isNotBlank(parentOperationRoomId)) { - OperationRoom parent = operationRoomManager.getOperationRoomById(Long.valueOf(parentOperationRoomId)); - operationRoom.setParentOperationRoomId(parent.getId()); - operationRoom.setParentOperationRoomName(parent.getOperationRoomName()); - operationRoom.setParentOperationRoomCoding(parent.getOperationRoomCoding()); + JSONObject json = JSONUtil.buildJsonObject(true, "保存成功!"); + try { operationRoomManager.saveOrUpdateOperationRoom(operationRoom); + } catch (Exception e) { + e.printStackTrace(); + json = JSONUtil.buildJsonObject(false, e.getMessage()); } + StrutsResponseUtils.output(json); } /**