Index: forgon-core/src/main/java/com/forgon/directory/action/BrancheOfHospitalAction.java =================================================================== diff -u -r29996 -r30151 --- forgon-core/src/main/java/com/forgon/directory/action/BrancheOfHospitalAction.java (.../BrancheOfHospitalAction.java) (revision 29996) +++ forgon-core/src/main/java/com/forgon/directory/action/BrancheOfHospitalAction.java (.../BrancheOfHospitalAction.java) (revision 30151) @@ -53,7 +53,8 @@ */ public void saveOrUpdateBrancheOfHospital(){ try { - brancheOfHospitalManager.save(brancheOfHospital); + //brancheOfHospitalManager.save(brancheOfHospital); + brancheOfHospitalManager.saveOrUpdateBrancheOfHospital(brancheOfHospital); StrutsResponseUtils.output(true, "保存成功!"); } catch (Exception e) { e.printStackTrace(); Index: forgon-core/src/main/java/com/forgon/directory/service/BrancheOfHospitalManagerImpl.java =================================================================== diff -u -r30014 -r30151 --- forgon-core/src/main/java/com/forgon/directory/service/BrancheOfHospitalManagerImpl.java (.../BrancheOfHospitalManagerImpl.java) (revision 30014) +++ forgon-core/src/main/java/com/forgon/directory/service/BrancheOfHospitalManagerImpl.java (.../BrancheOfHospitalManagerImpl.java) (revision 30151) @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -163,4 +164,58 @@ } return arr; } + + + @Override + public void saveOrUpdateBrancheOfHospital(BrancheOfHospital brancheOfHospital) { + + String sql = String.format("select bh.name as brancheOfHospital, o.name as orgUnitName from BrancheOfHospital bh " + + "join Org_OrgGroup oo on oo.orgGroupId = bh.orgUnitGroupId " + + "join OrgUnit o on o.id = oo.orgUnitId " + + "where o.id in (select orgUnitId from Org_OrgGroup where orgGroupId = %s)", brancheOfHospital.getOrgUnitGroupId()); + if(DatabaseUtil.isPoIdValid(brancheOfHospital.getId())){ + sql += " and bh.id <> " + brancheOfHospital.getId(); + } + + Set orgUnitNames = new LinkedHashSet(); + Set bhNames = new LinkedHashSet(); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + if(bhNames.size() < 5){ + bhNames.add(rs.getString("brancheOfHospital")); + } + if(orgUnitNames.size() < 5){ + orgUnitNames.add(rs.getString("orgUnitName")); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + if(CollectionUtils.isNotEmpty(bhNames) && CollectionUtils.isNotEmpty(orgUnitNames)){ + throw new SystemException("如下科室同时属于【" + StringTools.join(bhNames, "、") + "】所引用的科室分组,不允许一个科室属于多个院区,请修改后再保存!【" + StringTools.join(orgUnitNames, "、") + "】"); + } + + String countSql = "select count(po.id) from BrancheOfHospital po where po.serialNumber = " + brancheOfHospital.getSerialNumber(); + if(DatabaseUtil.isPoIdValid(brancheOfHospital.getId())){ + sql += " and po.id <> " + brancheOfHospital.getId(); + } + if(objectDao.countBySql(countSql) > 0){ + throw new SystemException("已经存在相同序号的院区,请修改后再保存!"); + } + + countSql = "select count(po.id) from BrancheOfHospital po where po.name = " + brancheOfHospital.getName(); + if(DatabaseUtil.isPoIdValid(brancheOfHospital.getId())){ + sql += " and po.id <> " + brancheOfHospital.getId(); + } + if(objectDao.countBySql(countSql) > 0){ + throw new SystemException("已经存在相同名称的院区,请修改后再保存!"); + } + + this.saveOrUpdateBrancheOfHospital(brancheOfHospital); + } } Index: forgon-core/src/main/java/com/forgon/directory/service/OrgUnitGroupManagerImpl.java =================================================================== diff -u -r29991 -r30151 --- forgon-core/src/main/java/com/forgon/directory/service/OrgUnitGroupManagerImpl.java (.../OrgUnitGroupManagerImpl.java) (revision 29991) +++ forgon-core/src/main/java/com/forgon/directory/service/OrgUnitGroupManagerImpl.java (.../OrgUnitGroupManagerImpl.java) (revision 30151) @@ -1,11 +1,13 @@ package com.forgon.directory.service; +import java.sql.ResultSet; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; @@ -153,6 +155,40 @@ if(CollectionUtils.isEmpty(orgList)){ throw new SystemException("科室不存在!"); } + + String sql = String.format("select bh.name as brancheOfHospital, o.name as orgUnitName from BrancheOfHospital bh " + + "join OrgUnitGroup og on bh.orgUnitGroupId = og.id " + + "join Org_OrgGroup oo on oo.orgGroupId = og.id " + + "join OrgUnit o on o.id = oo.orgUnitId " + + "where %s", + SqlUtils.getStringFieldInLargeCollectionsPredicate("o.orgUnitCoding", departCodeList)); + if(DatabaseUtil.isPoIdValid(orgUnitGroup.getId())){ + sql += " and og.id <> " + orgUnitGroup.getId(); + } + + Set orgUnitNames = new LinkedHashSet(); + Set bhNames = new LinkedHashSet(); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + if(bhNames.size() < 5){ + bhNames.add(rs.getString("brancheOfHospital")); + } + if(orgUnitNames.size() < 5){ + orgUnitNames.add(rs.getString("orgUnitName")); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + if(CollectionUtils.isNotEmpty(bhNames) && CollectionUtils.isNotEmpty(orgUnitNames)){ + throw new SystemException("如下科室同时属于【" + StringTools.join(bhNames, "、") + "】所引用的科室分组,不允许一个科室属于多个院区,请修改后再保存!【" + StringTools.join(orgUnitNames, "、") + "】"); + } + String deleteOrg_GroupSql = String.format("delete from %s where orgGroupId = %s ", Org_OrgGroup.class.getSimpleName(), orgUnitGroup.getId()); objectDao.excuteSQL(deleteOrg_GroupSql); Index: forgon-core/src/main/java/com/forgon/directory/service/BrancheOfHospitalManager.java =================================================================== diff -u -r30014 -r30151 --- forgon-core/src/main/java/com/forgon/directory/service/BrancheOfHospitalManager.java (.../BrancheOfHospitalManager.java) (revision 30014) +++ forgon-core/src/main/java/com/forgon/directory/service/BrancheOfHospitalManager.java (.../BrancheOfHospitalManager.java) (revision 30151) @@ -41,4 +41,10 @@ * @return */ public JSONArray getBrancheOfHospitalList(); + + /** + * 保存院区前,检查科室是否被其它院区引用 + * @param brancheOfHospital + */ + public void saveOrUpdateBrancheOfHospital(BrancheOfHospital brancheOfHospital); }