Index: forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManager.java =================================================================== diff -u -r17562 -r17564 --- forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManager.java (.../OrgUnitManager.java) (revision 17562) +++ forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManager.java (.../OrgUnitManager.java) (revision 17564) @@ -93,6 +93,13 @@ public CssdServiceDepts getCssdServiceDeptsById(String id); /** + * 根据临床科室的编码查询供应室服务科室 + * @param clinicOrgUnitCode 临床科室的编码 + * @return + */ + public List getCssdServiceDeptsByClinicOrgUnitCode(String clinicOrgUnitCode); + + /** * 根据id查询供应室处理的器械包 * @param id * @return Index: forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java =================================================================== diff -u -r17562 -r17564 --- forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java (.../OrgUnitManagerImpl.java) (revision 17562) +++ forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java (.../OrgUnitManagerImpl.java) (revision 17564) @@ -412,39 +412,39 @@ } //如果为新建科室,将建立默认仓库,并自动新增一级供应室对器械包和一次性物品服务该科室 if(newAdd){ + LoginUserData user = AcegiHelper.getLoginUser(); + //创建仓库条码 + BarcodeDevice barcodeDevice = new BarcodeDevice(); + barcodeDevice.setType(BarcodeDevice.BARCODE_TYPE_WAREHOUSE); + barcodeDevice.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + objectDao.saveOrUpdate(barcodeDevice); + + //1.新建该科室对应仓库 + String sql = "insert into warehouse(id,name,orgUnitId,orgUnitCode,orgUnitName,remark,sequence,createdUserId,createdUserName,createTime) values ("; + sql += barcodeDevice.getId() + ","; + sql += "'" + orgUnit.getName() + "仓库',"; + sql += orgUnit.getId() + ","; + sql += "'" + orgUnit.getOrgUnitCoding() + "',"; + sql += "'" + orgUnit.getName() + "',"; + sql += "'新建科室时默认创建其仓库',"; + sql += "1,"; + sql += user.getUserId() + ","; + sql += "'" + user.getUserFullName() + "',"; + if(dbConnection.isSqlServer()){ + sql += "GETDATE()"; + }else if(dbConnection.isOracle()){ + sql += "sysdate"; + }else if(dbConnection.isMySQL()){ + sql += "currentdate"; + }else{ + sql += "null"; + } + sql += ")"; + objectDao.executeUpdate(sql); + + //2.查找出一级供应室 + ResultSet rs = objectDao.executeSql("select orgUnitCoding,orgUnitName from SupplyRoomConfig where supplyRoomType='1'");; try{ - LoginUserData user = AcegiHelper.getLoginUser(); - //创建仓库条码 - BarcodeDevice barcodeDevice = new BarcodeDevice(); - barcodeDevice.setType(BarcodeDevice.BARCODE_TYPE_WAREHOUSE); - barcodeDevice.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); - objectDao.saveOrUpdate(barcodeDevice); - - //1.新建该科室对应仓库 - String sql = "insert into warehouse(id,name,orgUnitId,orgUnitCode,orgUnitName,remark,sequence,createdUserId,createdUserName,createTime) values ("; - sql += barcodeDevice.getId() + ","; - sql += "'" + orgUnit.getName() + "仓库',"; - sql += orgUnit.getId() + ","; - sql += "'" + orgUnit.getOrgUnitCoding() + "',"; - sql += "'" + orgUnit.getName() + "',"; - sql += "'新建科室时默认创建其仓库',"; - sql += "1,"; - sql += user.getUserId() + ","; - sql += "'" + user.getUserFullName() + "',"; - if(dbConnection.isSqlServer()){ - sql += "GETDATE()"; - }else if(dbConnection.isOracle()){ - sql += "sysdate"; - }else if(dbConnection.isMySQL()){ - sql += "currentdate"; - }else{ - sql += "null"; - } - sql += ")"; - objectDao.executeUpdate(sql); - - //2.查找出一级供应室 - ResultSet rs = objectDao.executeSql("select orgUnitCoding,orgUnitName from SupplyRoomConfig where supplyRoomType='1'"); if(rs.next()){ String cssdOrgUnitCoding = rs.getString("orgUnitCoding"); String cssdOrgUnitName = rs.getString("orgUnitName"); @@ -466,9 +466,10 @@ cssdServiceDepts.setTousseType(CssdServiceDepts.TOUSSETYPE_DIPOSABLEGOODS); objectDao.saveOrUpdate(cssdServiceDepts); } - }catch(Exception e){ - + e.printStackTrace(); + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); } } } @@ -569,7 +570,10 @@ objectDao.excuteSQL(sql39); } - // 设置部门管理者 + /** + * 设置部门管理者 + * @param orgUnit + */ private void setManagerRelations(OrgUnit orgUnit) { if (orgUnit == null || StringUtils.isBlank(orgUnit.getManagerIds())) { return; @@ -593,7 +597,10 @@ orgUnit.setManagerList(managerRelations); } - // 设置分管领导 + /** + * 设置某科室的分管领导 + * @param orgUnit 目标科室 + */ private void setLeaderRelations(OrgUnit orgUnit) { if (orgUnit == null) { return; @@ -621,6 +628,10 @@ } } + /** + * 设置某科室包含的用户. + * @param orgUnit 目标科室 + */ private void setOrgUserRelations(OrgUnit orgUnit) { if (orgUnit == null) return; @@ -646,6 +657,12 @@ orgUnit.setOrgUserRelationes(orgUserRelations); } + /** + * 获取OrgUserRelation对象(orgUnit和user的中间表对象),若不存在此关系则创建之 + * @param user 用户 + * @param orgUnit 科室 + * @return + */ private OrgUserRelation getRelationBetweenUserAndOrgUnit(User user, OrgUnit orgUnit) { for (OrgUserRelation orgUserRelation : orgUnit.getOrgUserRelationes()) { @@ -676,6 +693,11 @@ return orgUserRelation; } + /** + * 原来存在的关系现在不存在了,需要删除 + * @param oldOrgUserRelations 原来存在的关系集合 + * @param newOrgUserRelations 现在存在的关系集合 + */ private void deleteOrgUserRelations( Set oldOrgUserRelations, Set newOrgUserRelations) { @@ -696,6 +718,10 @@ } } + /** + * 对某科室存在的用户进行排序,主要体现在“userOrder”属性 + * @param orgUserRelations 某科室与所有用户的关系集合 + */ private void compositorRelations(Set orgUserRelations) { long i = 1; for (OrgUserRelation orgUserRelation : orgUserRelations) { @@ -1526,4 +1552,11 @@ }*/ return result; } + + @Override + public List getCssdServiceDeptsByClinicOrgUnitCode( + String clinicOrgUnitCode) { + String sql = String.format("where po.clinicOrgUnitCode='%s'", clinicOrgUnitCode); + return objectDao.findBySql(CssdServiceDepts.class.getSimpleName(), sql); + } } Index: ssts-web/src/main/webapp/systemmanage/orgUnitExt.js =================================================================== diff -u -r16279 -r17564 --- ssts-web/src/main/webapp/systemmanage/orgUnitExt.js (.../orgUnitExt.js) (revision 16279) +++ ssts-web/src/main/webapp/systemmanage/orgUnitExt.js (.../orgUnitExt.js) (revision 17564) @@ -474,7 +474,7 @@ } function edit(){ - oldName = Ext.getCmp('name').getValue(); //如果用户要更新则先把久的部门名称接收起来(陈家儒改) + oldName = Ext.getCmp('name').getValue(); //如果用户要更新则先把旧的部门名称接收起来 this.setVisible(false); Ext.getCmp('saveBtn').setVisible(true); Ext.getCmp('saveAndNewBtn').setVisible(true); Index: ssts-web/src/test/java/test/forgon/directory/OrgUnitManagerTest.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/directory/OrgUnitManagerTest.java (revision 0) +++ ssts-web/src/test/java/test/forgon/directory/OrgUnitManagerTest.java (revision 17564) @@ -0,0 +1,98 @@ +package test.forgon.directory; + +import java.sql.ResultSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.collections4.CollectionUtils; +import org.testng.annotations.Test; + +import com.forgon.directory.model.BarcodeDevice; +import com.forgon.directory.model.CssdServiceDepts; +import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.model.OrgUserRelation; +import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; +import com.forgon.serialnumber.model.SerialNum; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.string.StringTools; + +import test.forgon.constant.Constants; +import test.forgon.disinfectsystem.AbstractCSSDTest; +import static org.testng.Assert.*; +/** + * 此类主要测试科室的一些业务方法 + * @author Chenjiaru + * + */ +public class OrgUnitManagerTest extends AbstractCSSDTest { + + /** + * 此方法主要测试新增科室 + * 测试以下1种场景 + * 1、新增科室“测试科室1” 预期结果:保存后部分属性和设置的相同,并且会为此科室新建一个仓库,并且科室服务临床科室也有对应的两条记录 + */ + @Test + public void testSaveOrgUnit() { + initCSSDData(); + + OrgUnit orgUnit = new OrgUnit(); + String testName1 = "测试科室1"; + String testCode1 = "forgon_666"; + + //设置科室名称和编码 + orgUnit.setName(testName1); + orgUnit.setOrgUnitCoding(testCode1); + //设置条码 + BarcodeDevice bd = new BarcodeDevice(); + String barcode = serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE); + bd.setBarcode(barcode); + bd.setType(BarcodeDevice.BARCODE_TYPE_ORGUNIT); + orgUnit.setBarcodeDevice(bd); + //设置包含的用户 + String userIds = com.forgon.tools.Constants.PREFIX_USERID + "admin" + OrgUnit.ORGUNIT_USER_SEPARATOR + com.forgon.tools.Constants.PREFIX_USERID + "cssduser3"; + orgUnit.setUserIds(userIds); + //设置父科室 + OrgUnit parent = orgUnitManager.getByCode(Constants.ORG_UNIT_CODE_CSSD); + orgUnit.setParent(parent); + orgUnit.setParentId(parent.getId()); + + //保存之前该科室在WareHouse(仓库)和CssdServiceDepts(科室服务临床科室)都是没有记录 + List wareHouseList = null; + List cssdServiceDeptsList = null; + wareHouseList = wareHouseManager.getWareHouseListByUnitCode(testCode1); + cssdServiceDeptsList =orgUnitManager.getCssdServiceDeptsByClinicOrgUnitCode(testCode1); + assertTrue(CollectionUtils.isEmpty(wareHouseList)); + assertTrue(CollectionUtils.isEmpty(cssdServiceDeptsList)); + + orgUnitManager.saveOrUpdata(orgUnit); //保存 + + assertEquals(orgUnit.getName(), testName1); + assertEquals(orgUnit.getOrgUnitCoding(), testCode1); + assertEquals(orgUnit.getBarcode(), barcode); + //有两个用户 + Set orgUserRelations = orgUnit.getOrgUserRelationes(); + assertEquals(orgUserRelations.size(), 2); + for (OrgUserRelation or : orgUserRelations) { + assertEquals(or.getOrgUnit().getId(), orgUnit.getId()); + assertTrue((StringTools.equals(or.getUser().getName(), "admin") || StringTools.equals(or.getUser().getName(), "cssduser3"))); + } + //在WareHouse(仓库)有一条记录 + ResultSet rs = objectDao.executeSql(String.format("select orgUnitId from WareHouse where orgUnitCode='%s'", testCode1)); + try { + if(rs.next()){ + assertEquals(rs.getLong("orgUnitId"), orgUnit.getId().longValue()); + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + //在CssdServiceDepts(科室服务临床科室)有两条记录 + cssdServiceDeptsList =orgUnitManager.getCssdServiceDeptsByClinicOrgUnitCode(testCode1); + assertEquals(cssdServiceDeptsList.get(0).getClinicOrgUnitName(), testName1); + assertEquals(cssdServiceDeptsList.get(0).getTousseType(), CssdServiceDepts.TOUSSETYPE_TOUSSE); + assertEquals(cssdServiceDeptsList.get(1).getClinicOrgUnitName(), testName1); + assertEquals(cssdServiceDeptsList.get(1).getTousseType(), CssdServiceDepts.TOUSSETYPE_DIPOSABLEGOODS); + } + +}