Index: ssts-selenium-test/src/test/java/test_4_1/sterilization/service/Sterilization.java
===================================================================
diff -u
--- ssts-selenium-test/src/test/java/test_4_1/sterilization/service/Sterilization.java (revision 0)
+++ ssts-selenium-test/src/test/java/test_4_1/sterilization/service/Sterilization.java (revision 17877)
@@ -0,0 +1,34 @@
+package test_4_1.sterilization.service;
+/**
+ * 灭菌抽象出来的接口,目前任何灭菌都有以下四种最基本的操作,有一些比较特殊的医院需要,
+ * 灭菌完成确认或者灭菌卸载等操作的,则由实现类型自己扩展
+ *
+ * - 创建灭菌记录
+ *
- 灭菌中断操作
+ *
- 灭菌失败操作
+ *
- 完成灭菌操作
+ *
+ * @author Chenjiaru
+ *
+ */
+public interface Sterilization {
+ /**
+ * 创建灭菌记录
+ */
+ public void createSterilizationRecord();
+
+ /**
+ * 灭菌中断操作
+ */
+ public void sterilizationInterrupt();
+
+ /**
+ * 灭菌失败操作
+ */
+ public void sterilizationFailure();
+
+ /**
+ * 完成灭菌操作
+ */
+ public void completeSterilization();
+}
Index: ssts-web/src/main/resources/spring/test/applicationContext-test.xml
===================================================================
diff -u -r17817 -r17877
--- ssts-web/src/main/resources/spring/test/applicationContext-test.xml (.../applicationContext-test.xml) (revision 17817)
+++ ssts-web/src/main/resources/spring/test/applicationContext-test.xml (.../applicationContext-test.xml) (revision 17877)
@@ -18,4 +18,18 @@
+
+
+
+
+
+
+
+
+
+
+ PROPAGATION_REQUIRED
+
+
+
\ No newline at end of file
Index: forgon-core/src/main/java/com/forgon/security/service/OperationManager.java
===================================================================
diff -u -r17226 -r17877
--- forgon-core/src/main/java/com/forgon/security/service/OperationManager.java (.../OperationManager.java) (revision 17226)
+++ forgon-core/src/main/java/com/forgon/security/service/OperationManager.java (.../OperationManager.java) (revision 17877)
@@ -19,15 +19,29 @@
public void deleteAll();
public Operation getById(String id);
-
+ /**
+ * 获取所有权限
+ * @return
+ */
public List findAll();
public Operation getByOperationId(String operationId);
-
+ /**
+ * 删除operationDefine.xml文件中没有,但数据库中存在的权限
+ * @param dbOperationList 数据库存在的权限集合
+ * @param xmlOperationList operationDefine.xml文件配置的权限集合
+ */
public void removeDBOperationNotInXml(List dbOperationList, Set xmlOperationList);
-
+ /**
+ * 把operationDefine.xml文件配置的权限更新到数据库
+ * @param dbOperationList 数据库存在的权限集合
+ * @param xmlOperationList operationDefine.xml文件配置的权限集合
+ */
public void updateOperationToDB(List dbOperationList, Set xmlOperationList);
-
+ /**
+ * 从operationDefine.xml文件提取权限列表
+ * @return
+ */
public Set getOperationListFromXml();
public void updateOperationsForRole(String roleId, String[] operationIds);
Index: ssts-web/src/main/java/com/forgon/disinfectsystem/initdata/service/InitializeDataManagerImpl.java
===================================================================
diff -u -r17849 -r17877
--- ssts-web/src/main/java/com/forgon/disinfectsystem/initdata/service/InitializeDataManagerImpl.java (.../InitializeDataManagerImpl.java) (revision 17849)
+++ ssts-web/src/main/java/com/forgon/disinfectsystem/initdata/service/InitializeDataManagerImpl.java (.../InitializeDataManagerImpl.java) (revision 17877)
@@ -225,7 +225,7 @@
initSerialNum();
initSerialNumber();
- initRoles();
+ iniNecessaryRoles();
/**
* 初始化根级科室和administrator用户(即id为0的科室,默认名称为组织机构)
*/
@@ -239,7 +239,7 @@
/**
* 初始化各科室下的仓库
*/
- intWareHouseOfOrgUnit();
+ initWareHouseOfOrgUnit();
//创建虚拟篮筐数据
initVirtualContainerData();
@@ -502,10 +502,6 @@
// createRole("ROLE_ANONYMOUS", "匿名用户", "登录页面,共享脚本,共享图片", "");
}
- private void initRoles() {
- iniNecessaryRoles();
- }
-
private void createRole(String name, String des, String resources,
String operations) {
String companyId = "0";
@@ -586,10 +582,6 @@
initAdministrator(orgUnit);
}
- /**
- * 初始化组织机构,新建名字为“组织机构”的根节点
- * @return 新创建的组织机构根节点
- */
public OrgUnit initOrgUnit() {
OrgUnit orgUnit = (OrgUnit) thTreeNodeManager.getTHTreeNodeById(
OrgUnit.class.getSimpleName(), Long.valueOf(0));
@@ -610,34 +602,30 @@
}
return orgUnit;
}
-
- private void intWareHouseOfOrgUnit(){
- /*List departOrgUnitList =
- objectDao.findByProperty(OrgUnit.class.getSimpleName(), "orgType", OrgUnit.ORGUNIT_TYPE_DEPARTMENT.toString());*/
- //只查询未初始过仓库的科室
+ /**
+ * 给所有“没有仓库的科室”初始化一个默认的仓库
+ */
+ private void initWareHouseOfOrgUnit(){
List departOrgUnitList =
objectDao.findBySql(OrgUnit.class.getSimpleName(), " where orgType='" + OrgUnit.ORGUNIT_TYPE_DEPARTMENT.toString() + "' and orgUnitCoding not in (select distinct orgUnitCode from WareHouse)");
if(CollectionUtils.isNotEmpty(departOrgUnitList)){
WareHouse wareHouse = null;
for(OrgUnit orgUnit : departOrgUnitList){
- //如果该科室未创建仓库,则添加一个默认仓库
-// if(CollectionUtils.isEmpty(wareHouseManager.getWareHouseListByOrgUnit(orgUnit))){
- try {
- wareHouse = new WareHouse();
- wareHouse.setCreatedUserName("初始化");
- wareHouse.setName(orgUnit.getName() + "仓库");
- wareHouse.setOrgUnitId(orgUnit.getId());
- wareHouse.setOrgUnitCode(orgUnit.getOrgUnitCoding());
- wareHouse.setOrgUnitName(orgUnit.getName());
- wareHouse.setSequence(1L);
- wareHouse.setRemark("应用启动时初始化仓库");
- wareHouse.setType(BarcodeDevice.BARCODE_TYPE_WAREHOUSE);
- wareHouseManager.saveOrUpdateWareHouse(wareHouse);
- logger.info("初始化"+orgUnit.getName()+"仓库成功");
- } catch (Exception e) {
- logger.error("初始化"+orgUnit.getName()+"仓库失败:"+e);
- }
-// }
+ try {
+ wareHouse = new WareHouse();
+ wareHouse.setCreatedUserName("初始化");
+ wareHouse.setName(orgUnit.getName() + "仓库");
+ wareHouse.setOrgUnitId(orgUnit.getId());
+ wareHouse.setOrgUnitCode(orgUnit.getOrgUnitCoding());
+ wareHouse.setOrgUnitName(orgUnit.getName());
+ wareHouse.setSequence(1L);
+ wareHouse.setRemark("应用启动时初始化仓库");
+ wareHouse.setType(BarcodeDevice.BARCODE_TYPE_WAREHOUSE);
+ wareHouseManager.saveOrUpdateWareHouse(wareHouse);
+ logger.info("初始化"+orgUnit.getName()+"仓库成功");
+ } catch (Exception e) {
+ logger.error("初始化"+orgUnit.getName()+"仓库失败:"+e);
+ }
}
}
}
@@ -714,7 +702,9 @@
+ "'";
objectDao.excuteSQL(upSql);
}
-
+ /**
+ * 初始化权限(即:把operationDefine.xml文件配置的权限持久化到数据库)
+ */
private void initOperation() {
Set xmlOperationList = operationManager
.getOperationListFromXml();
Index: ssts-selenium-test/src/test/java/test_4_1/sterilization/service/impl/SterilizationImpl.java
===================================================================
diff -u
--- ssts-selenium-test/src/test/java/test_4_1/sterilization/service/impl/SterilizationImpl.java (revision 0)
+++ ssts-selenium-test/src/test/java/test_4_1/sterilization/service/impl/SterilizationImpl.java (revision 17877)
@@ -0,0 +1,178 @@
+package test_4_1.sterilization.service.impl;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.AssertJUnit;
+
+import test_4_1.sterilization.service.Sterilization;
+import test_4_1.tools.Utils;
+
+public class SterilizationImpl implements Sterilization {
+
+ private Logger logger = LoggerFactory.getLogger(this.getClass());
+ @Override
+ public void createSterilizationRecord() {
+ logger.info("开始执行灭菌.........");
+ Utils.driver.switchTo().defaultContent();
+ Utils.retryingFindAndClick(By.xpath("//span[contains(text(), '个人桌面')]"));
+ Actions moveover = new Actions(Utils.driver);
+ moveover.moveToElement(Utils.retryingFind(By.id("sterilizationRecord"))).perform();
+ Utils.retryingFindAndClick(By.linkText(Utils.settings.getJSONObject("一级供应室灭菌炉").getString("分类")));
+
+ Utils.retryingFindAndSwitchToFrame(By.id("iframe_sterilizationRecord"));
+ Utils.retryingFindAndClick(By.xpath("//button[contains(text(), '添加')]"));
+ Utils.driver.switchTo().defaultContent();
+ String currentWindowHandle = Utils.driver.getWindowHandle();
+ Utils.driver.switchTo().window(currentWindowHandle);
+ try {
+ WebElement user = Utils.retryingFind(By.id("sterilizationUser"));
+ String text = user.getText();
+
+ //灭菌目的选择“器械包灭菌”
+ Utils.retryingFindAndSendKeys(By.id("sterilizationPurpose"), Keys.DOWN);
+ Utils.retryingFindAndClick(By.xpath("//div[contains(text(), '器械包灭菌')]"));
+
+ //扫描灭菌炉条码、灭菌程序条码、篮筐条码、用户条码(如果用户是自动填的则不需要)
+ Utils.retryingFindAndSendKeys(By.id("inputBarcode"), Utils.settings
+ .getJSONObject("一级供应室灭菌炉").getString("灭菌炉条码") + "\n");
+
+ Utils.retryingFindAndSendKeys(By.id("inputBarcode"), Utils.settings
+ .getJSONObject("一级供应室灭菌炉").getString("灭菌程序条码") + "\n");
+
+ Utils.retryingFindAndSendKeys(By.id("inputBarcode"), Utils.settings
+ .getJSONObject("一级供应室灭菌篮筐1").getString("条码") + "\n");
+
+ if (text.isEmpty()) {
+ Utils.retryingFindAndSendKeys(By.id("inputBarcode"),
+ Utils.settings.getJSONObject("一级供应室用户").getString("条码")
+ + "\n");
+ }
+
+ //保存灭菌记录
+ Utils.retryingFindAndClick(By.xpath("//button[contains(text(), '保存')]"));
+
+ //选中刚刚刚保存的那条灭菌记录
+// WebElement frame = Utils.retryingFindAndSwitchToFrame(By
+// .id("iframe_sterilizationRecord"));
+// Utils.retryingFindAndClick(By.xpath("//p[contains(text(), '灭菌中')]"));
+
+// Utils.retryingFindAndClick(By
+// .xpath("//button[contains(text(), '灭菌失败')]"));
+// /** 登记灭菌失败的质量监测 **/
+// String currentwindowhandle = Utils.driver.getWindowHandle();
+// Utils.driver.switchTo().window(currentwindowhandle);
+// Utils.retryingFindAndClick(By
+// .xpath("//button[contains(text(), '是')]"));
+//
+// currentwindowhandle = Utils.driver.getWindowHandle();
+// Utils.driver.switchTo().window(currentwindowhandle);
+//
+// Utils.retryingFindAndSendKeys(By.id("formName"), Keys.DOWN);
+//
+// Utils.retryingFindAndClick(By
+// .xpath("//div[contains(text(), '灭菌失败事件')]"));
+// /**
+// * Utils.retryingFindAndSendKeys(By.id("scanBarcode"),Utils.settings
+// * .getJSONObject("一级供应室清洗篮筐1").getString("条码")+"\n");
+// **/
+// Utils.retryingFindAndSendKeys(By.id("tousseName"), Keys.DOWN);
+// String x = (int) (Math.random() * 8 + 1) + "";
+// Utils.retryingFind(By.id("amount")).clear();
+// Utils.retryingFindAndSendKeys(By.id("amount"), x + "\n");
+// Utils.retryingFindAndSendKeys(By.id("tousseName"), "\n");
+// Utils.retryingFindAndClick(By.id("saveBtn"));
+// /** 重新灭菌 **/
+//
+// frame = Utils.retryingFindAndSwitchToFrame(By
+// .id("iframe_sterilizationRecord"));
+//
+// Utils.retryingFindAndClick(By.cssSelector("img[title='重新灭菌']"));
+//
+// currentwindowhandle = Utils.driver.getWindowHandle();
+// Utils.driver.switchTo().window(currentwindowhandle);
+//
+// Utils.retryingFindAndClick(By
+// .xpath("//button[contains(text(), '重新灭菌')]"));
+//
+// frame = Utils.retryingFindAndSwitchToFrame(By
+// .id("iframe_sterilizationRecord"));
+//
+// Utils.retryingFindAndClick(By.xpath("//p[contains(text(), '灭菌中')]"));
+//
+// Utils.retryingFindAndClick(By
+// .xpath("//button[contains(text(), '完成灭菌')]"));
+// currentwindowhandle = Utils.driver.getWindowHandle();
+// Utils.driver.switchTo().window(currentwindowhandle);
+// WebElement element = Utils.retryingFind(By
+// .xpath("//button[contains(text(), '是')]"));
+// if (element != null) {
+// displayed = element.isDisplayed();
+// if (displayed) {
+//
+// Utils.retryingFindAndClick(By
+// .xpath("//button[contains(text(), '是')]"));
+// } else {
+//
+// Utils.retryingFindAndSendKeys(
+// By.id("completeUserBarcode"),
+// Utils.settings.getJSONObject("一级供应室用户").getString(
+// "条码")
+// + "\n");
+// Utils.retryingFindAndClick(By
+// .xpath("//button[contains(text(), '保存')]"));
+// }
+// }
+//
+// frame = Utils.retryingFindAndSwitchToFrame(By
+// .id("iframe_sterilizationRecord"));
+// element = Utils.retryingFind(By
+// .xpath("//button[contains(text(), '灭菌确认')]"));
+// displayed = false;
+// if (element != null) {
+// displayed = element.isDisplayed();
+// if (displayed) {
+//
+// confirm_One();
+// }
+// }
+//
+// element = Utils.retryingFind(By
+// .xpath("//button[contains(text(), '灭菌卸载')]"));
+// displayed = false;
+// if (element != null) {
+// displayed = element.isDisplayed();
+// if (displayed) {
+//
+// confirm_One();
+// }
+// }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ AssertJUnit.fail(e.getMessage());
+ }
+ }
+
+ @Override
+ public void sterilizationInterrupt() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void sterilizationFailure() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void completeSterilization() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Index: ssts-selenium-test/src/test/java/test_4_1/sterilization/helper/SterilizationHelper.java
===================================================================
diff -u
--- ssts-selenium-test/src/test/java/test_4_1/sterilization/helper/SterilizationHelper.java (revision 0)
+++ ssts-selenium-test/src/test/java/test_4_1/sterilization/helper/SterilizationHelper.java (revision 17877)
@@ -0,0 +1,12 @@
+package test_4_1.sterilization.helper;
+
+/**
+ * 自动化测试-灭菌模块的辅助类
+ * @author Chenjiaru
+ *
+ */
+public final class SterilizationHelper {
+
+
+
+}
Index: forgon-core/src/main/java/com/forgon/security/service/OperationManagerImpl.java
===================================================================
diff -u -r12331 -r17877
--- forgon-core/src/main/java/com/forgon/security/service/OperationManagerImpl.java (.../OperationManagerImpl.java) (revision 12331)
+++ forgon-core/src/main/java/com/forgon/security/service/OperationManagerImpl.java (.../OperationManagerImpl.java) (revision 17877)
@@ -164,10 +164,6 @@
return operationIds;
}
- /**
- * SynchronizationService
- */
- // 删除xml中没有,但数据库中存在的数据
public void removeDBOperationNotInXml(List dbOperationList,
Set xmlOperationList) {
boolean isRemove;
@@ -190,7 +186,6 @@
}
}
- // 更新xml的数据到数据库。新增和修改。
public void updateOperationToDB(List dbOperationList,
Set xmlOperationList) {
boolean isNew;
@@ -215,7 +210,6 @@
}
}
- // 从xml文件提取权限列表
public Set getOperationListFromXml() {
Set operationList = new HashSet(0);
OperationDefineBean operationDefineBean = operationDefineDao
@@ -240,7 +234,12 @@
return operationList;
}
- // 判断从xml找出来的操作对象是不是与数据库的一致
+ /**
+ * 判断从operationDefine.xml文件找出来的权限对象是否与数据库的一致
+ * @param dbOperation 数据库中的权限
+ * @param xmlOperation operationDefine.xml文件配置的权限
+ * @return
+ */
private boolean isSame(Operation dbOperation, Operation xmlOperation) {
if (dbOperation.getOperationId().equals(xmlOperation.getOperationId())) {
return true;
Index: ssts-selenium-test/src/test/java/test_4_1/sterilization/helper/SterilizationBusinessHelper.java
===================================================================
diff -u
--- ssts-selenium-test/src/test/java/test_4_1/sterilization/helper/SterilizationBusinessHelper.java (revision 0)
+++ ssts-selenium-test/src/test/java/test_4_1/sterilization/helper/SterilizationBusinessHelper.java (revision 17877)
@@ -0,0 +1,58 @@
+package test_4_1.sterilization.helper;
+
+
+import java.util.Date;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.forgon.directory.model.BarcodeDevice;
+import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition;
+import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance;
+import com.forgon.disinfectsystem.packing.service.PackingManager;
+import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager;
+import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager;
+import com.forgon.runwithtrans.model.RunWithTransNewTask;
+import com.forgon.runwithtrans.service.RunWithTransNewManager;
+import com.forgon.serialnumber.model.SerialNum;
+import com.forgon.serialnumber.service.SerialNumManager;
+
+/**
+ * 自动化测试-灭菌模块,需要的业务数据的辅助类,此辅助类需要Spring的容器环境
+ * @author Chenjiaru
+ *
+ */
+public class SterilizationBusinessHelper {
+ @Autowired
+ protected RunWithTransNewManager runWithTransNewManager;
+ @Autowired
+ private PackingManager packingManager;
+ @Autowired
+ private TousseDefinitionManager tousseDefinitionManager;
+ @Autowired
+ private SerialNumManager serialNumManager;
+ @Autowired
+ private TousseInstanceManager tousseInstanceManager;
+
+ /**
+ * 准备一个待灭菌的“审核篮筐”
+ */
+ public void prepareWaitSterilizationOfReviewBasket() {
+ runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() {
+ @Override
+ public void runTask() {
+ //装配管理
+ TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包");
+ TousseInstance ti_开胸包 = new TousseInstance();
+ ti_开胸包.setTousseDefinition(td_开胸包);
+ ti_开胸包.setTousseName(td_开胸包.getName());
+ ti_开胸包.setOperationTime(new Date());
+ ti_开胸包.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE));
+ ti_开胸包.setType(BarcodeDevice.BARCODE_TYPE_PACKAGE);
+ ti_开胸包.setStatus(TousseInstance.STATUS_PACKED);
+ tousseInstanceManager.saveOrUpdate(ti_开胸包);
+ //审核管理
+ packingManager.reviewTousseInstance(ti_开胸包.getId().toString(), "018000001", "常规组", "cssduser1全名", "cssduser1", new Date());
+ }
+ });
+ }
+}
Index: ssts-web/src/main/java/test/forgon/disinfectsystem/AbstractCSSDTest.java
===================================================================
diff -u -r17817 -r17877
--- ssts-web/src/main/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 17817)
+++ ssts-web/src/main/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 17877)
@@ -265,7 +265,7 @@
}
/**
- * 测试数据初始化
+ * 清除所有的业务数据,并且让admin用户登录
*/
public void initCSSDData() {
cssdTestDataProcess.initCSSDData();
Index: ssts-selenium-test/src/test/java/test_4_1/sterilization/SterilizationTest.java
===================================================================
diff -u
--- ssts-selenium-test/src/test/java/test_4_1/sterilization/SterilizationTest.java (revision 0)
+++ ssts-selenium-test/src/test/java/test_4_1/sterilization/SterilizationTest.java (revision 17877)
@@ -0,0 +1,42 @@
+package test_4_1.sterilization;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+import test.forgon.disinfectsystem.AbstractCSSDTest;
+import test_4_1.Login;
+import test_4_1.sterilization.helper.SterilizationBusinessHelper;
+import test_4_1.sterilization.service.Sterilization;
+import test_4_1.sterilization.service.impl.SterilizationImpl;
+import test_4_1.tools.Utils;
+
+public class SterilizationTest extends AbstractCSSDTest {
+
+ private Sterilization sterilization = new SterilizationImpl();
+ @Autowired
+ private SterilizationBusinessHelper sterilizationBusinessHelper;
+
+ @Test
+ public void reateSterilizationRecordTest() {
+ sterilizationBusinessHelper.prepareWaitSterilizationOfReviewBasket();
+ sterilization.createSterilizationRecord();
+ }
+
+ @BeforeClass
+ public void logon() {
+ Utils.init();
+ Login login = new Login();
+ login.login_oneSupplyRoom();
+ }
+ @AfterClass
+ public void logoff() {
+ Utils.driver.quit();
+ }
+
+ @BeforeMethod
+ public void initialize() {
+ initCSSDData();
+ }
+}
Index: forgon-core/src/main/java/com/forgon/oa/initdata/service/InitializeDataManager.java
===================================================================
diff -u -r17628 -r17877
--- forgon-core/src/main/java/com/forgon/oa/initdata/service/InitializeDataManager.java (.../InitializeDataManager.java) (revision 17628)
+++ forgon-core/src/main/java/com/forgon/oa/initdata/service/InitializeDataManager.java (.../InitializeDataManager.java) (revision 17877)
@@ -5,5 +5,9 @@
public interface InitializeDataManager {
public void clearData();
public void initData();
+ /**
+ * 初始化组织机构,新建名字为“组织机构”的根节点
+ * @return 新创建的组织机构根节点
+ */
public OrgUnit initOrgUnit();
}