Index: forgon-core/src/main/java/com/forgon/treenode/service/THTreeNodeManagerImpl.java =================================================================== diff -u -r17241 -r17777 --- forgon-core/src/main/java/com/forgon/treenode/service/THTreeNodeManagerImpl.java (.../THTreeNodeManagerImpl.java) (revision 17241) +++ forgon-core/src/main/java/com/forgon/treenode/service/THTreeNodeManagerImpl.java (.../THTreeNodeManagerImpl.java) (revision 17777) @@ -131,7 +131,7 @@ } return JSONUtil.buildJsonObject(false , "以下科室有申请单,不能删除." + StringUtils.join(nameList, ",")); } - //2.进行批量删除(删除前先删除对应的科室供应室配置) + //2.进行批量删除(删除前先删除对应的科室供应室配置,被删除的科室如果是某个用户当前登录科室,则把此用户的当前登录科室置空,至于科室与用户的关系可以不用管,hibernate会自动清除) objectDao.excuteSQL("delete from SupplyRoomConfig where orgUnitCoding in (select orgUnitCoding from "+ OrgUnit.class.getSimpleName() +" where id in (" + idListCondition + "))"); objectDao.excuteSQL("update SS_USERS set currentOrgUnitCode = null where currentOrgUnitCode in (select orgUnitCoding from "+ OrgUnit.class.getSimpleName() +" where id in (" + idListCondition + "))"); list = objectDao.findBySql(OrgUnit.class.getSimpleName(), "where id in ("+ idListCondition +")"); Index: ssts-web/src/test/java/test/forgon/directory/service/OrgUnitManagerTest.java =================================================================== diff -u -r17763 -r17777 --- ssts-web/src/test/java/test/forgon/directory/service/OrgUnitManagerTest.java (.../OrgUnitManagerTest.java) (revision 17763) +++ ssts-web/src/test/java/test/forgon/directory/service/OrgUnitManagerTest.java (.../OrgUnitManagerTest.java) (revision 17777) @@ -1,11 +1,15 @@ package test.forgon.directory.service; import java.sql.ResultSet; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Set; +import net.sf.json.JSONObject; + import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.testng.annotations.Test; import com.forgon.directory.model.BarcodeDevice; @@ -42,8 +46,11 @@ import com.forgon.disinfectsystem.entity.returnmaterialrecord.ReturnMaterialRecord; import com.forgon.disinfectsystem.entity.satisfactionsurvey.SatisfactionSurveyTable; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; +import com.forgon.security.model.User; +import com.forgon.security.service.UserManager; import com.forgon.serialnumber.model.SerialNum; import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; import test.forgon.constant.Constants; @@ -56,6 +63,8 @@ */ public class OrgUnitManagerTest extends AbstractCSSDTest { + @Autowired + private UserManager userManager; /** * 此方法主要测试新增科室 * 测试以下1种场景 @@ -388,5 +397,64 @@ assertEquals(ipm.getOrgUnitName(), newName); } + /** + * 此方法主要测试删除科室 + * 测试以下5种场景 + * 1、删除“测试供应室” 预期结果:删除失败,因为此科室为一级供应室 + * 2、删除“测试手术室” 预期结果:删除失败,因为此科室为二级供应室 + * 3、删除“测试内科” 预期结果:删除成功,并且清除此科室在SupplyRoomConfig的所有配置,如果有用户的当前科室为此科室的,则把此用户的当前科室置空 + * 4、删除“测试外科” 预期结果:删除失败,因为此科室是某一张申请单的申请科室 + * 5、删除“测试妇科” 预期结果:删除失败,因为此科室是某一张申请单的结算科室 + */ + @Test + public void testDeleteOrgUnit() { + initCSSDData(); + + //“测试供应室” + OrgUnit orgUnitCSSD = orgUnitManager.getByCode(Constants.ORG_UNIT_CODE_CSSD); + List ids1 = new ArrayList(); + ids1.add(orgUnitCSSD.getId()); + JSONObject jsonObj1 = thTreeNodeManager.batchDeleteTHTreeNode(ids1); + assertEquals(jsonObj1.get(JSONUtil.JSON_KEY_SUCCESS), false); + + //“测试手术室” + OrgUnit orgUnitOR = orgUnitManager.getByCode(Constants.ORG_UNIT_CODE_OR); + List ids2 = new ArrayList(); + ids2.add(orgUnitOR.getId()); + JSONObject jsonObj2 = thTreeNodeManager.batchDeleteTHTreeNode(ids2); + assertEquals(jsonObj2.get(JSONUtil.JSON_KEY_SUCCESS), false); + + //“测试内科” + OrgUnit neike = orgUnitManager.getByCode(Constants.ORG_UNIT_CODE_NEIKE); + List ids3 = new ArrayList(); + ids3.add(neike.getId()); + JSONObject jsonObj3 = thTreeNodeManager.batchDeleteTHTreeNode(ids3); + assertEquals(jsonObj3.get(JSONUtil.JSON_KEY_SUCCESS), true); + String hql = String.format("where po.orgUnitCoding='%s'", Constants.ORG_UNIT_CODE_NEIKE); + List list = objectDao.findBySql(SupplyRoomConfig.class.getSimpleName(), hql); + assertTrue(CollectionUtils.isEmpty(list)); + hql = String.format("where po.currentOrgUnitCode='%s'", Constants.ORG_UNIT_CODE_NEIKE); + list = objectDao.findBySql(User.class.getSimpleName(), hql); + assertTrue(CollectionUtils.isEmpty(list)); + + //“测试外科” + OrgUnit waike = orgUnitManager.getByCode(Constants.ORG_UNIT_CODE_WAIKE); + //创建“测试妇科” + OrgUnit fuke = directoryHelper.createOrgUnit("测试妇科", "testFuke", "310000122", orgUnitCSSD); + InvoicePlan ip = new InvoicePlan(); + ip.setDepartCoding(waike.getOrgUnitCoding()); + ip.setSettleAccountsDepartCoding(fuke.getOrgUnitCoding()); + objectDao.save(ip); + + List ids5 = new ArrayList(); + ids5.add(waike.getId()); + JSONObject jsonObj5 = thTreeNodeManager.batchDeleteTHTreeNode(ids5); + assertEquals(jsonObj5.get(JSONUtil.JSON_KEY_SUCCESS), false); + + List ids6 = new ArrayList(); + ids6.add(fuke.getId()); + JSONObject jsonObj6 = thTreeNodeManager.batchDeleteTHTreeNode(ids6); + assertEquals(jsonObj6.get(JSONUtil.JSON_KEY_SUCCESS), false); + } } Index: ssts-web/src/main/java/test/forgon/disinfectsystem/AbstractCSSDTest.java =================================================================== diff -u -r17726 -r17777 --- ssts-web/src/main/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 17726) +++ ssts-web/src/main/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 17777) @@ -3503,15 +3503,15 @@ String rId5 = role_审核员.getId().toString(); String rId6 = role_灭菌员.getId().toString(); - User admin = createUser("admin", "0100001008", orgUnitCSSDId, rId0); - User cssdUser1 = createUser("cssduser1", "0100001001", orgUnitCSSDId, rId0); - User cssdUser2 = createUser("cssduser2", "0100001002", orgUnitCSSDId, rId2); - User cssdUser3 = createUser("cssduser3", "0100001003", orgUnitCSSDId, String.format("%s;%s;%s;%s", rId3, rId4, rId5, rId6)); - User orUser1 = createUser("oruser1", "0100002001", orgUnitORId, rId0); - User orUser2 = createUser("oruser2", "0100002002", orgUnitORId, rId1); - User orUser3 = createUser("oruser3", "0100002003", orgUnitORId, rId1); - User neikeUser1 = createUser("neikeuser1", "0100003001", neikeId, rId1); - User neikeUser2 = createUser("neikeuser2", "0100003002", neikeId, rId1); + User admin = createUser("admin", "0100001008", Constants.ORG_UNIT_CODE_CSSD, orgUnitCSSDId, rId0); + User cssdUser1 = createUser("cssduser1", "0100001001", Constants.ORG_UNIT_CODE_CSSD, orgUnitCSSDId, rId0); + User cssdUser2 = createUser("cssduser2", "0100001002", Constants.ORG_UNIT_CODE_CSSD, orgUnitCSSDId, rId2); + User cssdUser3 = createUser("cssduser3", "0100001003", Constants.ORG_UNIT_CODE_CSSD, orgUnitCSSDId, String.format("%s;%s;%s;%s", rId3, rId4, rId5, rId6)); + User orUser1 = createUser("oruser1", "0100002001", Constants.ORG_UNIT_CODE_OR, orgUnitORId, rId0); + User orUser2 = createUser("oruser2", "0100002002", Constants.ORG_UNIT_CODE_OR, orgUnitORId, rId1); + User orUser3 = createUser("oruser3", "0100002003", Constants.ORG_UNIT_CODE_OR, orgUnitORId, rId1); + User neikeUser1 = createUser("neikeuser1", "0100003001", Constants.ORG_UNIT_CODE_NEIKE, neikeId, rId1); + User neikeUser2 = createUser("neikeuser2", "0100003002", Constants.ORG_UNIT_CODE_NEIKE, neikeId, rId1); assertTrue(directoryHelper.isUserName(admin.getName())); assertTrue(directoryHelper.isUserName(cssdUser1.getName())); @@ -3706,17 +3706,19 @@ /** * 创建用户 - * @param name 用户登录名 - * @param barcode 用户条码 - * @param orgUnitIds 用户所属的科室id集合,用分号分隔 - * @param roleIds 用户拥有的角色id,用分号分隔 - * @return 此用户对象 + * @param name 用户登录名 + * @param barcode 用户条码 + * @param currentOrgUnitCode 用户当前的科室编码 + * @param orgUnitIds 用户所属的科室id集合,用分号分隔 + * @param roleIds 用户拥有的角色id,用分号分隔 + * @return 此用户对象 */ - private User createUser(String name, String barcode, String orgUnitIds, String roleIds) { + private User createUser(String name, String barcode, String currentOrgUnitCode, String orgUnitIds, String roleIds) { User user = new User(); user.setName(name); user.setFullName(name + "全名"); user.setBarcode(barcode); + user.setCurrentOrgUnitCode(currentOrgUnitCode); user.setPasswd("1"); user.setOrgUnitIds(orgUnitIds); user.setRoleIds(roleIds);