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(); }