Index: ssts-web/src/test/resources/test/forgon/AllTests.xml
===================================================================
diff -u -r17148 -r17506
--- ssts-web/src/test/resources/test/forgon/AllTests.xml (.../AllTests.xml) (revision 17148)
+++ ssts-web/src/test/resources/test/forgon/AllTests.xml (.../AllTests.xml) (revision 17506)
@@ -27,6 +27,7 @@
-
+
+
\ No newline at end of file
Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/orgUnit/OrgUnitDataProvider.java
===================================================================
diff -u
--- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/orgUnit/OrgUnitDataProvider.java (revision 0)
+++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/orgUnit/OrgUnitDataProvider.java (revision 17506)
@@ -0,0 +1,46 @@
+package test.forgon.disinfectsystem.dataProvider.orgUnit;
+
+import com.forgon.directory.model.OrgUnit;
+import com.forgon.directory.service.OrgUnitManager;
+import com.forgon.tools.SpringBeanManger;
+import org.testng.annotations.DataProvider;
+
+/**
+ * @author zhonghaowen
+ * @apiNote 部门数据驱动类
+ * @since 2017-03-14
+ */
+public class OrgUnitDataProvider {
+
+ private static OrgUnitManager orgUnitManager = (OrgUnitManager) SpringBeanManger.getBean("orgUnitManager");
+
+ /**
+ * 根据部门编号查找对应的部门
+ *
+ * @param code 部门的编号
+ * @return
+ */
+ public static OrgUnit getOrgUnit(String code) {
+ return orgUnitManager.getByCode(code);
+ }
+
+
+ @DataProvider(name = "orgUnitProvider")
+ public static Object[][] orgUnitProvider() {
+ OrgUnit orgUnit = createOrgUnit("testCSSD");
+ return new Object[][]{{orgUnit}};
+ }
+
+ /**
+ * 根据部门编码设置返回部门对象
+ * @param code 模板编号
+ * @return {@link OrgUnit}
+ */
+ public static OrgUnit createOrgUnit(String code){
+ OrgUnit orgUnit = new OrgUnit();
+ orgUnit.setOrgUnitCoding(code);
+ return orgUnit;
+ }
+
+
+}
Index: ssts-web/src/test/java/test/forgon/disinfectsystem/goodFilterConfig/GoodFilterConfigTest.java
===================================================================
diff -u
--- ssts-web/src/test/java/test/forgon/disinfectsystem/goodFilterConfig/GoodFilterConfigTest.java (revision 0)
+++ ssts-web/src/test/java/test/forgon/disinfectsystem/goodFilterConfig/GoodFilterConfigTest.java (revision 17506)
@@ -0,0 +1,347 @@
+package test.forgon.disinfectsystem.goodFilterConfig;
+
+import com.forgon.directory.model.OrgUnit;
+import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition;
+import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan;
+import com.forgon.disinfectsystem.entity.tousseitem.TousseItem;
+import com.forgon.disinfectsystem.goodFilterConfig.entity.GoodFilterConfig;
+import com.forgon.disinfectsystem.goodFilterConfig.entity.OrgUnitTemplateItem;
+import com.forgon.disinfectsystem.goodFilterConfig.entity.TousseDefinitionTemplateItems;
+import com.forgon.disinfectsystem.goodFilterConfig.enums.ListType;
+import com.forgon.disinfectsystem.goodFilterConfig.service.GoodFilterConfigManager;
+import com.forgon.disinfectsystem.goodFilterConfig.vo.GoodFilterConfigVo;
+import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionHelper;
+import net.sf.json.JSONObject;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.orm.hibernate4.HibernateTemplate;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import test.forgon.constant.Constants;
+import test.forgon.disinfectsystem.AbstractCSSDTest;
+import test.forgon.disinfectsystem.dataProvider.goodFilterConfig.GoodFilterConfigDataProvider;
+import test.forgon.disinfectsystem.dataProvider.orgUnit.OrgUnitDataProvider;
+import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider;
+
+import javax.annotation.Resource;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+/**
+ * @author zhonghaowen
+ * @apiNote 科室黑白名单过滤测试类
+ * @since 2017-03-14
+ */
+public class GoodFilterConfigTest extends AbstractCSSDTest {
+
+ @Resource
+ private GoodFilterConfigManager goodFilterConfigManagerImpl;
+
+
+ @BeforeClass
+ public void setUp() {
+ initCSSDData();
+ makeActiveUser("admin");
+ }
+
+
+ /**
+ * 一.创建一个黑名单模板和一个白名单白名单, 模板信息如下:
+ *
1.名字:测试模板名字
+ * 2.配置的部门:测试内科和测试外科
+ * 3.配置的器械包:Test开胸包和Test开颅包
+ * 二.更新该模板的配置部门(删除测试外科,新增测试供应室)
+ * 三.更新该模板的器械包(删除Test开颅包,新增Test穿刺包)
+ * 四.删除该模板
+ *
+ * @param goodFilterConfigVo {@link GoodFilterConfigVo}
+ * @param orgUnitCount 期望保存后这个模板下科室个数
+ * @param tousseDefinitionTemplateItemsCount 期望保存后这个模板的物品个数
+ */
+ @Test(dataProvider = "createGoodFilterConfigProvider", dataProviderClass = GoodFilterConfigDataProvider.class)
+ public void testCreateGoodFilter(GoodFilterConfigVo goodFilterConfigVo, int orgUnitCount, int tousseDefinitionTemplateItemsCount) throws InvocationTargetException, IllegalAccessException {
+ assertNotNull(goodFilterConfigVo);
+ goodFilterConfigManagerImpl.saveOrUpdate(goodFilterConfigVo);
+ HibernateTemplate ht = objectDao.getHt();
+ ht.flush();
+ @SuppressWarnings("unchecked")
+ List goodFilterConfigList = (List) ht.find("from GoodFilterConfig");
+ assertEquals(goodFilterConfigList.size(), 1);
+ GoodFilterConfig goodFilterConfig = goodFilterConfigList.get(0);
+ assertNotNull(goodFilterConfig);
+ //断言这个模板下的科室数量
+ List orgUnitTemplateItems = goodFilterConfig.getOrgUnitTemplateItems();
+ assertEquals(orgUnitTemplateItems.size(), orgUnitCount);
+ //断言这个模板下的物品数量
+ List tousseDefinitionTemplateItems = goodFilterConfig.getTousseDefinitionTemplateItems();
+ assertEquals(tousseDefinitionTemplateItems.size(), tousseDefinitionTemplateItemsCount);
+ assertEquals(goodFilterConfig.getListType().getDesc(), goodFilterConfigVo.getTemplateType());
+ @SuppressWarnings("unchecked")
+ List filterGoodByType = goodFilterConfigManagerImpl.findFilterGoodByType(goodFilterConfig.getListType(), Constants.ORG_UNIT_CODE_NEIKE);
+ assertEquals(filterGoodByType.size(), 2);
+ goodFilterConfigVo.setId(goodFilterConfig.getId());
+ //更新模板下的科室
+ goodFilterConfigVo = GoodFilterConfigDataProvider.prepareUpdateOrgUnit(goodFilterConfigVo, orgUnitTemplateItems);
+ //更新模板下的器械包
+ goodFilterConfigVo = GoodFilterConfigDataProvider.prepareUpdateTousse(goodFilterConfigVo, tousseDefinitionTemplateItems);
+ goodFilterConfigManagerImpl.saveOrUpdate(goodFilterConfigVo);
+ ht.flush();
+ this.assertOrgUnit(goodFilterConfig);
+ this.assertTousse(goodFilterConfig);
+ goodFilterConfigManagerImpl.delete(goodFilterConfigVo.getId().toString());
+ ht.flush();
+ assertEquals(ht.find("select id from GoodFilterConfig ").size(), 0);
+ }
+
+
+ /**
+ * 测试器械包申请单的查询物品(不启用黑白名单过滤)
+ */
+ @Test(dataProvider = "orgUnitProvider", dataProviderClass = OrgUnitDataProvider.class)
+ public void testSearchTousseAppFormNotUseBWList(OrgUnit cssd) {
+ String tousseType = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM;
+ Set predicates = this.prepareSearch(tousseType);
+ List list = this.tousseDefinitionManager.getCssdHandleTousseDefinitionList(cssd, "", 0, 1000, predicates, new JSONObject());
+ // 查找结果是否包含专科器械组和一次性物品
+ Collection select = CollectionUtils.select(list, td -> TousseDefinition.TOUSSE_GROUP_SPECIALIZED_INSTRUMENT.equals(td.getTousseType()) || TousseItem.TYPE_DIPOSABLE_GOODS.equals(td.getTousseType()));
+ //断言不包含这两种物品
+ assertEquals(select.size(), 0);
+ }
+
+ /**
+ * 科室申领物品搜索使用黑名单
+ * 1.申请科室为testOR
+ * 2.结算科室为testCSSD
+ * 3.黑名单的物品是Test开胸包
+ *
+ * @param cssd 结算科室
+ */
+ @Test(dataProvider = "orgUnitProvider", dataProviderClass = OrgUnitDataProvider.class)
+ public void testSearchTousseAppFormUseBlackList(OrgUnit cssd) {
+ String tousseType = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM;
+ String appCode = "testOR";
+ String[] name = new String[]{TousseDefinitionDataProvider.Test开胸包};
+ List list = this.doSearchTousseDefinition(tousseType, appCode, name, null, cssd);
+ //从搜索结果查找Test开胸包
+ Collection result = CollectionUtils.select(list, td -> TousseDefinitionDataProvider.Test开胸包.equals(td.getName()));
+ assertEquals(result.size(), 0);
+ }
+
+ /**
+ * 科室申领物品搜索使用白名单
+ * 1.申请科室为testOR
+ * 2.结算科室为testCSSD
+ * 3.白名单的物品是Test开胸包
+ *
+ * @param cssd 结算科室
+ */
+ @Test(dataProvider = "orgUnitProvider", dataProviderClass = OrgUnitDataProvider.class)
+ public void testSearchTousseAppFormUseWhiteList(OrgUnit cssd) {
+ String tousseType = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM;
+ String appCode = "testOR";
+ String[] name = new String[]{TousseDefinitionDataProvider.Test开胸包};
+ List list = this.doSearchTousseDefinition(tousseType, appCode, null, name, cssd);
+ //断言使用白名单后查询出来的结果只有一个
+ assertEquals(list.size(), 1);
+ assertEquals(TousseDefinitionDataProvider.Test开胸包, list.get(0).getName());
+ }
+
+ /**
+ * 科室申领物品搜索黑白名单一起混用(分别是器械包申请单和通用申请单)
+ * 黑名单里包含白名单的物品,期待结果:只有Test开颅包被屏蔽
+ * 1.黑名单:Test开胸包,Test开颅包
+ * 2.白名单:Test开胸包
+ *
+ * @param tousseType 申请单的类型
+ * @param appCode 申请科室编号
+ * @param blackNames 黑名单的器械包
+ * @param whiteNames 白名单的器械包
+ * @param cssd 结算科室
+ */
+
+ @Test(dataProvider = "searchTousseAppFormUseBWListProvider", dataProviderClass = GoodFilterConfigDataProvider.class)
+ public void testSearchTousseAppFormUseBWListBGranterThanW(String tousseType, String appCode, String[] blackNames, String[] whiteNames, OrgUnit cssd) {
+ assertTrue(blackNames.length > whiteNames.length);
+ List list = this.doSearchTousseDefinition(tousseType, appCode, blackNames, whiteNames, cssd);
+ //从结果查询是否存在Test开颅包
+ Collection result = CollectionUtils.select(list, object -> TousseDefinitionDataProvider.Test开颅包.equals(object.getName()));
+ //断言结果不存在Test开颅包
+ assertEquals(result.size(), 0);
+ }
+
+ /**
+ * 科室申领物品搜索黑白名单一起混用(分别是器械包申请单和通用申请单)
+ * 白名单里包含黑名单的物品,期待结果:只有Test开颅包能被搜索
+ * 1.白名单:Test开胸包,Test开颅包
+ * 2.黑名单:Test开胸包
+ *
+ * @param tousseType 申请单的类型
+ * @param appCode 申请科室编号
+ * @param whiteNames 白名单的器械包
+ * @param blackNames 黑名单的器械包
+ * @param cssd 结算科室
+ */
+ @Test(dataProvider = "searchTousseAppFormUseBWListProvider", dataProviderClass = GoodFilterConfigDataProvider.class)
+ public void testSearchTousseAppFormUseBWListWGranterThanB(String tousseType, String appCode, String[] whiteNames, String[] blackNames, OrgUnit cssd) {
+ assertTrue(whiteNames.length > blackNames.length);
+ List list = this.doSearchTousseDefinition(tousseType, appCode, blackNames, whiteNames, cssd);
+ //断言查到的结果只有一条
+ assertEquals(list.size(), 1);
+ //断言器械包的名字是Test开颅包
+ assertEquals(list.get(0).getName(), TousseDefinitionDataProvider.Test开颅包);
+ }
+
+ /**
+ * 科室申领物品搜索黑白名单一起混用(分别是器械包申请单和通用申请单)
+ * 白名单和黑名单数量一样,期待结果:只有Test开胸包搜索不到
+ * 1.白名单:Test开胸包
+ * 2.黑名单:Test开胸包
+ * @param tousseType 申请单的类型
+ * @param appCode 申请科室编号
+ * @param whiteNames 白名单的器械包
+ * @param blackNames 黑名单的器械包
+ * @param cssd 结算科室
+ */
+ @Test(dataProvider = "searchTousseAppFormUseBWListProvider2", dataProviderClass = GoodFilterConfigDataProvider.class)
+ public void testSearchTousseAppFormUseBWListWEqualsB(String tousseType, String appCode, String[] whiteNames, String[] blackNames, OrgUnit cssd) {
+ assertEquals(whiteNames.length, blackNames.length);
+ List list = this.doSearchTousseDefinition(tousseType, appCode, blackNames, whiteNames, cssd);
+ //从结果查询是否存在Test开胸包
+ Collection result = CollectionUtils.select(list, object -> TousseDefinitionDataProvider.Test开胸包.equals(object.getName()));
+ //断言结果不存在Test开胸包
+ assertEquals(result.size(), 0);
+ }
+
+ /**
+ * 科室申领物品搜索黑白名单一起混用(分别是器械包申请单和通用申请单)
+ * 白名单和黑名单数量一样,期待结果:只有Test开颅包能搜到
+ * 1.白名单:Test开颅包
+ * 2.黑名单:Test开胸包
+ * @param tousseType 申请单的类型
+ * @param appCode 申请科室编号
+ * @param whiteNames 白名单的器械包
+ * @param blackNames 黑名单的器械包
+ * @param cssd 结算科室
+ */
+ @Test(dataProvider = "searchTousseAppFormUseBWListProvider3", dataProviderClass = GoodFilterConfigDataProvider.class)
+ public void testSearchTousseAppFormUseBWListWEqualsB2(String tousseType, String appCode, String[] whiteNames, String[] blackNames, OrgUnit cssd) {
+ assertEquals(whiteNames.length, blackNames.length);
+ List list = this.doSearchTousseDefinition(tousseType, appCode, blackNames, whiteNames, cssd);
+ //断言查到的结果只有一条
+ assertEquals(list.size(), 1);
+ //断言器械包的名字是Test开颅包
+ assertEquals(list.get(0).getName(), TousseDefinitionDataProvider.Test开颅包);
+ }
+
+ /**
+ * 使用模板来查询对应的器械包
+ *
+ * @param tousseType 申请单类型
+ * @param appCode 申请科室编号
+ * @param blackNames 模板下黑名单的器械包
+ * @param whiteNames 模板下白名单的器械包
+ * @param cssd 结算科室
+ * @return 返回使用模板过滤后的结果
+ */
+ private List doSearchTousseDefinition(String tousseType, String appCode, String[] blackNames, String[] whiteNames, OrgUnit cssd) {
+ //查询前先创建对应的模板
+ this.saveGoodFilterConfig(appCode, blackNames, whiteNames);
+ Set predicates = this.prepareSearch(tousseType);
+ JSONObject retObj = this.buildBWListPara(appCode);
+ return this.tousseDefinitionManager.getCssdHandleTousseDefinitionList(cssd, "", 0, 0, predicates, retObj);
+ }
+
+ /**
+ * 创建一个黑名单的模板和一个白名单的模板
+ *
+ * @param appCode 模板下的科室编号
+ * @param blackNames 模板下黑名单的器械包
+ * @param whiteNames 模板下白名单的器械包
+ */
+ private void saveGoodFilterConfig(String appCode, String[] blackNames, String[] whiteNames) {
+ if (blackNames != null) {
+ GoodFilterConfigVo black = GoodFilterConfigDataProvider.createBlackOrWhite(ListType.BLACK, appCode, blackNames);
+ goodFilterConfigManagerImpl.saveOrUpdate(black);
+ }
+ if (whiteNames != null) {
+ GoodFilterConfigVo white = GoodFilterConfigDataProvider.createBlackOrWhite(ListType.WHITE, appCode, whiteNames);
+ goodFilterConfigManagerImpl.saveOrUpdate(white);
+ }
+ objectDao.getHt().flush();
+ }
+
+ /**
+ * 构建黑白名单过滤的参数
+ *
+ * @param appCode 申请科室编码
+ * @return 返回构造好的结果
+ */
+ private JSONObject buildBWListPara(String appCode) {
+ JSONObject retObj = new JSONObject();
+ retObj.put("needToBw", true);
+ retObj.put("appCode", appCode);
+ return retObj;
+ }
+
+ /**
+ * 查询前的构造查询参数
+ *
+ * @param tousseType 申请单类型
+ * @return 返回去需要过滤的参数set
+ */
+ private Set prepareSearch(String tousseType) {
+ TousseDefinitionHelper tousseDefinitionHelper = TousseDefinitionHelper.getInstance();
+ tousseDefinitionHelper.setTousseDefinitionManager(tousseDefinitionManager);
+ tousseType = tousseDefinitionHelper.setGoodTypeByFormType(tousseType);
+ logger.debug(tousseType);
+ return tousseDefinitionHelper.getPredicates(tousseType);
+ }
+
+
+ /**
+ * 断言更新模板后的器械包情况
+ *
+ * @param goodFilterConfig {@link GoodFilterConfig}
+ */
+ private void assertTousse(GoodFilterConfig goodFilterConfig) {
+ TousseDefinition td1 = TousseDefinitionDataProvider.getTousseDefinition("Test穿刺包");
+ TousseDefinition td2 = TousseDefinitionDataProvider.getTousseDefinition("Test开胸包");
+ assertNotNull(td1);
+ assertNotNull(td2);
+ @SuppressWarnings(value = {"unchecked"})
+ List newTousseDefinitionTemplateItems = (List) objectDao.getHt().find("from TousseDefinitionTemplateItems where goodFilterConfig.id = ?", goodFilterConfig.getId());
+ //更新后断言器械包数量为2
+ assertEquals(newTousseDefinitionTemplateItems.size(), 2);
+ Collection select = CollectionUtils.select(newTousseDefinitionTemplateItems, item -> {
+ Long id = item.getTousseDefinition().getId();
+ return td1.getId().equals(id) || td2.getId().equals(id);
+ });
+ //查找Test穿刺包和Test开胸包,断言该模板下的器械包只剩下这个两个
+ assertEquals(select.size(), newTousseDefinitionTemplateItems.size());
+ }
+
+ /**
+ * 断言更新模板后的科室情况
+ *
+ * @param goodFilterConfig {@link GoodFilterConfig}
+ */
+ private void assertOrgUnit(GoodFilterConfig goodFilterConfig) {
+ List orgUnitTemplateItems = goodFilterConfig.getOrgUnitTemplateItems();
+ @SuppressWarnings(value = {"unchecked"})
+ List newOrgUnitTemplateItems = (List) objectDao.getHt().find("from OrgUnitTemplateItem where goodFilterConfig.id = ?", goodFilterConfig.getId());
+ //更新后断言科室数量为2
+ assertEquals(newOrgUnitTemplateItems.size(), 2);
+ Collection select = CollectionUtils.select(newOrgUnitTemplateItems, orgUnit -> {
+ String orgUnitCoding = orgUnit.getOrgUnitCoding();
+ return Constants.ORG_UNIT_CODE_CSSD.equals(orgUnitCoding) || orgUnitTemplateItems.get(0).getOrgUnitCoding().equals(orgUnitCoding);
+ });
+ //由于上面已经断言该模板下的科室为2,所以现在查找测试内科和测试供应室,如果是2,证明已经成功删除测试外科和新增测试供应室
+ assertEquals(select.size(), newOrgUnitTemplateItems.size());
+ }
+
+}
Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/goodFilterConfig/AllTests.xml
===================================================================
diff -u
--- ssts-web/src/test/resources/test/forgon/disinfectsystem/goodFilterConfig/AllTests.xml (revision 0)
+++ ssts-web/src/test/resources/test/forgon/disinfectsystem/goodFilterConfig/AllTests.xml (revision 17506)
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/GoodFilterConfigManagerImpl.java
===================================================================
diff -u -r16862 -r17506
--- ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/GoodFilterConfigManagerImpl.java (.../GoodFilterConfigManagerImpl.java) (revision 16862)
+++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/GoodFilterConfigManagerImpl.java (.../GoodFilterConfigManagerImpl.java) (revision 17506)
@@ -286,7 +286,7 @@
int count = objectDao.countObjectBySql(GoodFilterConfig.class.getSimpleName(), hql);
if (count > 0 && !templateName.equals(goodFilterConfig.getTemplateName())) {
logger.debug(count);
- throw new ParameterException("该模板名称已经存在!不能修改");
+ throw new ParameterException("该模板名称已经存在!不能添加");
}
goodFilterConfig.setModifyTime(new Date());
goodFilterConfig.setListType(ListType.parseOfDesc(goodFilterConfigVo.getTemplateType()));
Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/TousseDefinitionDataProvider.java
===================================================================
diff -u -r17498 -r17506
--- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/TousseDefinitionDataProvider.java (.../TousseDefinitionDataProvider.java) (revision 17498)
+++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/TousseDefinitionDataProvider.java (.../TousseDefinitionDataProvider.java) (revision 17506)
@@ -23,7 +23,12 @@
private static TousseDefinitionManager tousseDefinitionManager = (TousseDefinitionManager) SpringBeanManger.getBean("tousseDefinitionManager");
+ public final static String Test开胸包 = "Test开胸包";
+ public final static String Test开颅包 = "Test开颅包";
+
+ public final static String Test穿刺包 = "Test穿刺包";
+
/**
* 为这个器械包创建已灭菌的包实例,用于直接扫描条码发货
*
Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java
===================================================================
diff -u -r17404 -r17506
--- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 17404)
+++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 17506)
@@ -1893,39 +1893,7 @@
return null;
}
- private Set getPredicates(String tousseType) {
- Set predicates = new HashSet();
- Set tousseTypes = new HashSet();
- //如果类型为消毒物品,则只保留类型为消毒物品的数据
- if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType)) {
- tousseTypes.add(tousseType);
- }
- //如果类型为敷料包,则只保留类型为敷料包的数据
- else if (TousseDefinition.PACKAGE_TYPE_DRESSING.equals(tousseType)) {
- tousseTypes.add(tousseType);
- }
- //如果类型为组合申请单或者器械包申请单,则保留类型为器械包,消毒物品,敷料包(组合申请单后面会添加一次性物品,器械包申请单则不会)
- else if (TousseDefinition.PACKAGE_TYPE_INSIDE.equals(tousseType)) {
- tousseTypes.add(TousseDefinition.PACKAGE_TYPE_INSIDE);
- tousseTypes.add(TousseDefinition.PACKAGE_TYPE_DISINFECTION);
- tousseTypes.add(TousseDefinition.PACKAGE_TYPE_DRESSING);
- }else if ("combo".equals(tousseType)) {
- tousseTypes.add(TousseDefinition.PACKAGE_TYPE_INSIDE);
- tousseTypes.add(TousseDefinition.PACKAGE_TYPE_DISINFECTION);
- tousseTypes.add(TousseDefinition.PACKAGE_TYPE_DRESSING);
- }
- //如果器械包分组为专科器械组,则只保留类型为专科器械组的数据
- else if (TousseDefinition.TOUSSE_GROUP_SPECIALIZED_INSTRUMENT.equals(tousseType)) {
- predicates.add(SqlUtils.getStringFieldPredicate("tousseGroupName", TousseDefinition.TOUSSE_GROUP_SPECIALIZED_INSTRUMENT));
- }
- else {
-
- }
- if(!tousseTypes.isEmpty()){
- predicates.add(SqlUtils.getStringFieldInCollectionsPredicate("tousseType", tousseTypes));
- }
- return predicates;
- }
+
// 搜索组合物品,包含器械包和一次性物品
public String searchComboGoodsData() {
//下拉框分页(开始记录数及每页记录数)
@@ -1977,7 +1945,7 @@
if(!TousseItem.TYPE_DIPOSABLE_GOODS.equals(tousseType)){
OrgUnit cssd = new OrgUnit();
cssd.setOrgUnitCoding(cssdOrgUnitCode);
- Set predicates = getPredicates(tousseType);
+ Set predicates = tousseDefinitionHelper.getPredicates(tousseType);
String appIsUseBwList = CssdUtils.getSystemSetConfigByName("appIsUseBwList");
if (StringUtils.isNotBlank(appIsUseBwList) && "true".equals(appIsUseBwList)){
Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionHelper.java
===================================================================
diff -u -r16820 -r17506
--- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionHelper.java (.../TousseDefinitionHelper.java) (revision 16820)
+++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionHelper.java (.../TousseDefinitionHelper.java) (revision 17506)
@@ -5,12 +5,15 @@
import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition;
import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan;
import com.forgon.disinfectsystem.entity.tousseitem.TousseItem;
+import com.forgon.tools.util.SqlUtils;
import org.apache.commons.lang.StringUtils;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* Created by zhonghaowen on 2016/10/18.
@@ -19,7 +22,7 @@
public class TousseDefinitionHelper {
- private static TousseDefinitionHelper tousseDefinitionHelper;
+ private volatile static TousseDefinitionHelper tousseDefinitionHelper;
private TousseDefinitionHelper() {
}
@@ -90,28 +93,28 @@
// }
// return map;
// }
-
+
public Map filterResultByTousseType2(String tousseType, TousseDefinition tousseDefinition) {
Map map = null;
Double price = tousseDefinition.getPrice();
//如果类型为消毒物品,则只保留类型为消毒物品的数据
if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType)) {
- price = tousseDefinitionManager.getDisinfectGoodsPrice(tousseDefinition);
+ price = tousseDefinitionManager.getDisinfectGoodsPrice(tousseDefinition);
map = this.setReturnResult(tousseDefinition, price);
}
//如果类型为敷料包,则只保留类型为敷料包的数据
else if (TousseDefinition.PACKAGE_TYPE_DRESSING.equals(tousseType)) {
- map = this.setReturnResult(tousseDefinition, price);
+ map = this.setReturnResult(tousseDefinition, price);
}
//如果类型为组合申请单或者器械包申请单,则保留类型为器械包,消毒物品,敷料包(组合申请单后面会添加一次性物品,器械包申请单则不会)
else if ("combo".equals(tousseType) || TousseDefinition.PACKAGE_TYPE_INSIDE.equals(tousseType)) {
String type = tousseDefinition.getTousseType();
//器械包和敷料包
- if (tousseDefinition.PACKAGE_TYPE_INSIDE.equals(type) || TousseDefinition.PACKAGE_TYPE_DRESSING.equals(type)) {
+ if (tousseDefinition.PACKAGE_TYPE_INSIDE.equals(type) || TousseDefinition.PACKAGE_TYPE_DRESSING.equals(type)) {
map = this.setReturnResult(tousseDefinition, price);
}
//消毒物品
- else if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(type)){
+ else if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(type)) {
price = tousseDefinitionManager.getDisinfectGoodsPrice(tousseDefinition);
map = this.setReturnResult(tousseDefinition, price);
}
@@ -188,6 +191,47 @@
}
/**
+ * 根据申请单的类型获得过滤的sql条件
+ *
+ * @param tousseType 物品的类型
+ * @return
+ */
+ public Set getPredicates(String tousseType) {
+ Set predicates = new HashSet();
+ Set tousseTypes = new HashSet();
+ //如果类型为消毒物品,则只保留类型为消毒物品的数据
+ if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType)) {
+ tousseTypes.add(tousseType);
+ }
+ //如果类型为敷料包,则只保留类型为敷料包的数据
+ else if (TousseDefinition.PACKAGE_TYPE_DRESSING.equals(tousseType)) {
+ tousseTypes.add(tousseType);
+ }
+ //如果类型为组合申请单或者器械包申请单,则保留类型为器械包,消毒物品,敷料包(组合申请单后面会添加一次性物品,器械包申请单则不会)
+ else if (TousseDefinition.PACKAGE_TYPE_INSIDE.equals(tousseType)) {
+ tousseTypes.add(TousseDefinition.PACKAGE_TYPE_INSIDE);
+ tousseTypes.add(TousseDefinition.PACKAGE_TYPE_DISINFECTION);
+ tousseTypes.add(TousseDefinition.PACKAGE_TYPE_DRESSING);
+ }
+ else if ("combo".equals(tousseType)) {
+ tousseTypes.add(TousseDefinition.PACKAGE_TYPE_INSIDE);
+ tousseTypes.add(TousseDefinition.PACKAGE_TYPE_DISINFECTION);
+ tousseTypes.add(TousseDefinition.PACKAGE_TYPE_DRESSING);
+ }
+ //如果器械包分组为专科器械组,则只保留类型为专科器械组的数据
+ else if (TousseDefinition.TOUSSE_GROUP_SPECIALIZED_INSTRUMENT.equals(tousseType)) {
+ predicates.add(SqlUtils.getStringFieldPredicate("tousseGroupName", TousseDefinition.TOUSSE_GROUP_SPECIALIZED_INSTRUMENT));
+ }
+ else {
+
+ }
+ if (!tousseTypes.isEmpty()) {
+ predicates.add(SqlUtils.getStringFieldInCollectionsPredicate("tousseType", tousseTypes));
+ }
+ return predicates;
+ }
+
+ /**
* 设置返回结果
*
* @param tousseDefinition
Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/goodFilterConfig/GoodFilterConfigDataProvider.java
===================================================================
diff -u
--- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/goodFilterConfig/GoodFilterConfigDataProvider.java (revision 0)
+++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/goodFilterConfig/GoodFilterConfigDataProvider.java (revision 17506)
@@ -0,0 +1,208 @@
+package test.forgon.disinfectsystem.dataProvider.goodFilterConfig;
+
+import com.forgon.directory.model.OrgUnit;
+import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition;
+import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan;
+import com.forgon.disinfectsystem.goodFilterConfig.entity.OrgUnitTemplateItem;
+import com.forgon.disinfectsystem.goodFilterConfig.entity.TousseDefinitionTemplateItems;
+import com.forgon.disinfectsystem.goodFilterConfig.enums.ListType;
+import com.forgon.disinfectsystem.goodFilterConfig.vo.GoodFilterConfigVo;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.apache.log4j.Logger;
+import org.testng.annotations.DataProvider;
+import test.forgon.constant.Constants;
+import test.forgon.disinfectsystem.dataProvider.orgUnit.OrgUnitDataProvider;
+import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider;
+
+import java.util.List;
+
+/**
+ * @author zhonghaowen
+ * @apiNote 黑白名单数据驱动提供类
+ * @since 2017-03-14
+ */
+public class GoodFilterConfigDataProvider {
+
+ protected static Logger logger = Logger.getLogger(GoodFilterConfigDataProvider.class);
+
+
+ /**
+ * 黑白名单模板创建驱动
+ *
+ * @return 分别创建一个黑名单模板和一个白名单模板的相关数据
+ */
+ @DataProvider(name = "createGoodFilterConfigProvider")
+ public static Object[][] createGoodFilterConfigProvider() {
+ int orgUnitCount = 2;
+ int tousseDefinitionTemplateItemsCount = 2;
+ try {
+ TousseDefinition td1 = TousseDefinitionDataProvider.getTousseDefinition(TousseDefinitionDataProvider.Test开胸包);
+ TousseDefinition td2 = TousseDefinitionDataProvider.getTousseDefinition(TousseDefinitionDataProvider.Test开颅包);
+ TousseDefinition[] tds = {td1, td2};
+ //部门是测试内科和测试外科
+ String[] orgUnitCoding = {Constants.ORG_UNIT_CODE_NEIKE, Constants.ORG_UNIT_CODE_WAIKE};
+ GoodFilterConfigVo black = createGoodFilterConfigVo(ListType.BLACK.getDesc(), tds, orgUnitCoding);
+ GoodFilterConfigVo white = createGoodFilterConfigVo(ListType.WHITE.getDesc(), tds, orgUnitCoding);
+ return new Object[][]{
+ {black, orgUnitCount, tousseDefinitionTemplateItemsCount},
+ {white, orgUnitCount, tousseDefinitionTemplateItemsCount}
+ };
+ }
+ catch (Exception e) {
+ //由于数据驱动捕获到runtimeException会跳过测试类,所以这里要捕获返回
+ logger.error(e, e);
+ return new Object[][]{{null, orgUnitCount, tousseDefinitionTemplateItemsCount}};
+ }
+ }
+
+ /**
+ * 使用黑白名单进行科室申领物品过滤(分别使用器械包申单和通用申请单)
+ * 物品{Test开胸包,Test开颅包},{Test开胸包}
+ */
+ @DataProvider(name = "searchTousseAppFormUseBWListProvider")
+ public static Object[][] searchTousseAppFormUseBWListProvider() {
+ String tousseType = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM;
+ String combo = "combo";
+ String appCode = "testOR";
+ OrgUnit orgUnit = OrgUnitDataProvider.createOrgUnit("testCSSD");
+ final String[] names1 = new String[]{TousseDefinitionDataProvider.Test开胸包, TousseDefinitionDataProvider.Test开颅包};
+ final String[] names2 = new String[]{TousseDefinitionDataProvider.Test开胸包};
+ return new Object[][]{
+ {tousseType, appCode, names1, names2, orgUnit},
+ {combo, appCode, names1, names2, orgUnit}
+ };
+ }
+
+ /**
+ * 使用黑白名单进行科室申领物品过滤(分别使用器械包申单和通用申请单)
+ * 物品{Test开胸包},{Test开胸包}
+ */
+ @DataProvider(name = "searchTousseAppFormUseBWListProvider2")
+ public static Object[][] searchTousseAppFormUseBWListProvider2() {
+ String tousseType = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM;
+ String combo = "combo";
+ String appCode = "testOR";
+ OrgUnit orgUnit = OrgUnitDataProvider.createOrgUnit("testCSSD");
+ final String[] names = new String[]{TousseDefinitionDataProvider.Test开胸包};
+ return new Object[][]{
+ {tousseType, appCode, names, names, orgUnit},
+ {combo, appCode, names, names, orgUnit}
+ };
+ }
+
+ /**
+ * 使用黑白名单进行科室申领物品过滤(分别使用器械包申单和通用申请单)
+ * 物品{Test开颅包},{Test开胸包}
+ */
+ @DataProvider(name = "searchTousseAppFormUseBWListProvider3")
+ public static Object[][] searchTousseAppFormUseBWListProvider3() {
+ String tousseType = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM;
+ String combo = "combo";
+ String appCode = "testOR";
+ OrgUnit orgUnit = OrgUnitDataProvider.createOrgUnit("testCSSD");
+ final String[] names1 = new String[]{TousseDefinitionDataProvider.Test开颅包};
+ final String[] names2 = new String[]{TousseDefinitionDataProvider.Test开胸包};
+ return new Object[][]{
+ {tousseType, appCode, names1, names2, orgUnit},
+ {combo, appCode, names1, names2, orgUnit}
+ };
+ }
+
+ /**
+ * 根据类型,部门编号和相关的器械包数组创建GoodFilterConfigVo对象
+ *
+ * @param listType 要创建白名单还是黑名单
+ * @param orgUnitCoding 该模板下的模板编号
+ * @param tousseNames 改模板下的器械包
+ * @return {@link GoodFilterConfigVo}
+ */
+ public static GoodFilterConfigVo createBlackOrWhite(ListType listType, String orgUnitCoding, String[] tousseNames) {
+ TousseDefinition[] tds = new TousseDefinition[tousseNames.length];
+ for (int i = 0, len = tousseNames.length; i < len; i++) {
+ tds[i] = TousseDefinitionDataProvider.getTousseDefinition(tousseNames[i]);
+ }
+ String[] orgUnitCodingS = {orgUnitCoding};
+ return createGoodFilterConfigVo(listType.getDesc(), tds, orgUnitCodingS);
+ }
+
+
+ /**
+ * 创建GoodFilterConfigVo
+ *
+ * @param templateType 模板的类型(黑名单或者白名单)
+ * @param tds 模板下的器械包
+ * @param orgUnitCodingS 模板下的部门编码
+ * @return {@link GoodFilterConfigVo}
+ */
+ private static GoodFilterConfigVo createGoodFilterConfigVo(String templateType, TousseDefinition[] tds, String[] orgUnitCodingS) {
+ GoodFilterConfigVo goodFilterConfigVo = new GoodFilterConfigVo();
+ JSONArray tousseArray = new JSONArray();
+ for (TousseDefinition td : tds) {
+ JSONObject tousseDefinition = new JSONObject();
+ JSONObject id = new JSONObject();
+ id.put("id", td.getId());
+ tousseDefinition.put("tousseDefinition", id);
+ tousseArray.add(tousseDefinition);
+ }
+ JSONArray orgUnitArray = new JSONArray();
+ for (String orgUnitCoding : orgUnitCodingS) {
+ JSONObject orgUnit = new JSONObject();
+ orgUnit.put("orgUnitCoding", orgUnitCoding);
+ orgUnitArray.add(orgUnit);
+ }
+ goodFilterConfigVo.setDeptInfo(orgUnitArray.toString());
+ goodFilterConfigVo.setTousseInfo(tousseArray.toString());
+ goodFilterConfigVo.setTemplateName(templateType + "测试模板");
+ goodFilterConfigVo.setTemplateType(templateType);
+ logger.debug(goodFilterConfigVo);
+ return goodFilterConfigVo;
+ }
+
+
+ /**
+ * 准备更新模板下的部门数据(删除测试外科,新增测试供应室)
+ * 该模板下的部门有测试供应室,测试内科
+ *
+ * @param goodFilterConfigVo {@link GoodFilterConfigVo}
+ * @param orgUnitTemplateItems 该模板下的所有部门
+ */
+ public static GoodFilterConfigVo prepareUpdateOrgUnit(GoodFilterConfigVo goodFilterConfigVo, List orgUnitTemplateItems) {
+ JSONObject orgUnit1 = new JSONObject();
+ JSONObject orgUnit2 = new JSONObject();
+ //测试内科
+ orgUnit1.put("orgUnitCoding", orgUnitTemplateItems.get(0).getOrgUnitCoding());
+ //删除测试外科,新增测试供应室
+ orgUnit2.put("orgUnitCoding", Constants.ORG_UNIT_CODE_CSSD);
+ JSONArray orgUnitArray = new JSONArray();
+ orgUnitArray.add(orgUnit1);
+ orgUnitArray.add(orgUnit2);
+ goodFilterConfigVo.setDeptInfo(orgUnitArray.toString());
+ return goodFilterConfigVo;
+ }
+
+ /**
+ * 准备更新模板下的器械包(删除Test开颅包,新增Test穿刺包)
+ * 该模板下的器械包有:Test开胸包,Test穿刺包
+ *
+ * @param goodFilterConfigVo {@link GoodFilterConfigVo}
+ * @param tousseDefinitionTemplateItems 该模板下的所有器械包
+ */
+ public static GoodFilterConfigVo prepareUpdateTousse(GoodFilterConfigVo goodFilterConfigVo, List tousseDefinitionTemplateItems) {
+ TousseDefinition td = TousseDefinitionDataProvider.getTousseDefinition(TousseDefinitionDataProvider.Test穿刺包);
+ JSONObject tousseDefinition1 = new JSONObject();
+ JSONObject tousseDefinition2 = new JSONObject();
+ JSONObject tousseDefinition1_1 = new JSONObject();
+ JSONObject tousseDefinition2_1 = new JSONObject();
+ //删除Test开颅包,新增Test穿刺包
+ tousseDefinition1_1.put("id", tousseDefinitionTemplateItems.get(0).getTousseDefinition().getId());
+ tousseDefinition2_1.put("id", td.getId());
+ tousseDefinition1.put("tousseDefinition", tousseDefinition1_1);
+ tousseDefinition2.put("tousseDefinition", tousseDefinition2_1);
+ JSONArray tousseArray = new JSONArray();
+ tousseArray.add(tousseDefinition1);
+ tousseArray.add(tousseDefinition2);
+ goodFilterConfigVo.setTousseInfo(tousseArray.toString());
+ return goodFilterConfigVo;
+ }
+}