package test.forgon.disinfectsystem; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.hibernate.exception.GenericJDBCException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.CannotAcquireLockException; import org.springframework.orm.hibernate4.HibernateJdbcException; import org.springframework.orm.hibernate4.HibernateSystemException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests; import test.forgon.constant.Constants; import test.forgon.disinfectsystem.invoicemanager.service.DataGenerater; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.service.DirectoryHelper; import com.forgon.directory.service.OrgUnitManager; import com.forgon.directory.service.SysUserManager; import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.container.service.ContainerManager; import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager; import com.forgon.disinfectsystem.basedatamanager.sterilizer.service.SterilizerManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.diposablegoods.service.DisposableGoodsBatchManager; import com.forgon.disinfectsystem.diposablegoods.service.GodownEntryManager; import com.forgon.disinfectsystem.diposablegoods.service.IdentificationOfDiposableGoodsManager; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsIdentification; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.foreigntousseapplication.service.ForeignTousseApplicationManager; import com.forgon.disinfectsystem.invoicemanager.service.InvoiceManager; import com.forgon.disinfectsystem.maintain.basic.service.MaintainManager; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingBasketVo; import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingClassifiedItemVo; import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingItemVo; import com.forgon.disinfectsystem.returngoodsrecord.service.ReturnGoodsRecordManager; import com.forgon.disinfectsystem.sterilizationmanager.foreignproxydisinfection.service.ForeignProxyDisinfectionManager; import com.forgon.disinfectsystem.sterilizationmanager.proxydisinfection.service.ProxyDisinfectionManager; import com.forgon.disinfectsystem.stockmanage.cssdstock.service.TousseStockManager; import com.forgon.disinfectsystem.stockmanage.departmentstock.service.DepartmentStockManager; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.materialinstance.service.MaterialInstanceManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.disinfectsystem.webservice.security.service.WebServiceManager; import com.forgon.oa.initdata.service.InitializeDataManager; import com.forgon.oa.web.service.PublicInformationManager; import com.forgon.runwithtrans.model.RunWithTransNewTask; import com.forgon.runwithtrans.service.RunWithTransNewManager; import com.forgon.security.service.OperationManager; import com.forgon.security.service.RoleManager; import com.forgon.security.userdetails.UserContainsSessionUser; import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.MathTools; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; import com.forgon.treenode.service.THTreeNodeManager; /** * @author Angus * * Spring的配置文件硬编码为读gzfdzl(广州复大肿瘤)文件夹的配置, * 需要改进为读取jdbc.properties文件中project的配置。Terry Kwan,2016-07-10 * */ @ContextConfiguration(locations={"classpath:spring/*.xml", "classpath:spring/security/*.xml", "classpath:spring/test/*.xml", "classpath:spring/projects/gzfdzl/*.xml" }) //@ContextConfiguration(locations={"classpath:applicationContext-test.xml"}) public class AbstractCSSDTest extends AbstractTransactionalTestNGSpringContextTests{ protected Map map = new HashMap(); @Autowired protected DirectoryHelper directoryHelper; @Autowired protected SysUserManager sysUserManager; @Autowired protected RoleManager roleManager; @Autowired protected THTreeNodeManager thTreeNodeManager; @Autowired protected ObjectDao objectDao; @Autowired protected PublicInformationManager publicInformationManager; @Autowired protected AcegiHelper acegiHelper; @Autowired protected UserDetailsService daoUserDetail; @Autowired protected OrgUnitManager orgUnitManager; @Autowired protected GodownEntryManager godownEntryManager; @Autowired protected DiposableGoodBatchStockManager diposableGoodBatchStockManager; @Autowired protected IdentificationOfDiposableGoodsManager identificationOfDiposableGoodsManager; @Autowired protected MaterialDefinitionManager materialDefinitionManager; @Autowired protected RecyclingApplicationManager recyclingApplicationManager; @Autowired protected TousseDefinitionManager tousseDefinitionManager; @Autowired protected TousseInstanceManager tousseInstanceManager; @Autowired protected SupplyRoomConfigManager supplyRoomConfigManager; @Autowired protected DiposableGoodsManager diposableGoodsManager; @Autowired protected DisposableGoodsBatchManager disposableGoodsBatchManager; @Autowired protected SerialNumManager serialNumManager; @Autowired protected TousseItemManager tousseItemManager; @Autowired protected TousseStockManager tousseStockManager; @Autowired protected DepartmentStockManager departmentStockManager; @Autowired protected MaterialInstanceManager materialInstanceManager; @Autowired protected ForeignTousseApplicationManager foreignTousseApplicationManager; @Autowired protected ProxyDisinfectionManager proxyDisinfectionManager; @Autowired protected ForeignProxyDisinfectionManager foreignProxyDisinfectionManager; @Autowired protected WebServiceManager webServiceManager; @Autowired protected ReturnGoodsRecordManager returnGoodsRecordManager; @Autowired protected DataGenerater dataGenerater; @Autowired protected ContainerManager containerManager; @Autowired protected SterilizerManager sterilizerManager; @Autowired protected MaintainManager maintainManager; @Autowired protected InvoicePlanManager invoicePlanManager; @Autowired protected InvoiceManager invoiceManager; @Autowired protected WareHouseManager wareHouseManager; @Autowired protected GoodsStockManager goodsStockManager; @Autowired protected RunWithTransNewManager runWithTransNewManager; @Autowired protected InitializeDataManager initializeDataManager; @Autowired protected OperationManager operationManager; @Autowired private CSSDTestDataProcess cssdTestDataProcess; @Autowired private BarcodeManager barcodeManager; /** * 组织单位OrgUnit供应室的id */ protected String orgUnitCSSDId; public static final float DIPOSABLEGOODS_PRICE_F = 1.1f; protected static final int AMOUNT = 500; /** * 按照用户名登录 * @param username 用户名 */ protected void makeActiveUser(String username) { String password = "1"; Collection authorities = new ArrayList(); LoginUserData loginedUser = new LoginUserData(); loginedUser.setUserName(username); if ("admin".equals(username)) { authorities.add(new SimpleGrantedAuthority( "ROLE_ADMINISTRATOR_0")); } UserContainsSessionUser user = (UserContainsSessionUser) daoUserDetail .loadUserByUsername(username); Authentication authRequest = new UsernamePasswordAuthenticationToken( user, password, authorities); SecurityContextHolder.getContext().setAuthentication(authRequest); } /** * 清除所有的业务数据,并且让admin用户登录 */ public void initCSSDData() { cssdTestDataProcess.initCSSDData(); makeActiveUser("admin"); // 还原科室供应室设置 SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); if(supplyRoomConfig != null){ supplyRoomConfig.setAfterRecyclingTousseDeliver(false); } } /** * 回收记录待回收物品 * @return */ public List createRecyclingItemVos() { List recyclingItemVos = new ArrayList(); RecyclingItemVo vo = new RecyclingItemVo(); vo.setName("Test开胸包"); vo.setRecycleAmount(5); RecyclingItemVo vo2 = new RecyclingItemVo(); vo2.setName("Test开颅包"); vo2.setRecycleAmount(5); RecyclingItemVo vo3 = new RecyclingItemVo(); vo3.setName("Test开口包"); vo3.setRecycleAmount(2); RecyclingItemVo vo4 = new RecyclingItemVo(); vo4.setName("Test穿刺包"); vo4.setRecycleAmount(2); recyclingItemVos.add(vo); recyclingItemVos.add(vo2); recyclingItemVos.add(vo3); recyclingItemVos.add(vo4); return recyclingItemVos; } /** * 生成待回收篮筐数据 * @return */ public List getRecyclingBasketVos() { List recyclingBasketVos = new ArrayList(); RecyclingBasketVo recyclingBasketVo = new RecyclingBasketVo(); Container container = containerManager.getContainerByBarcode("019000001"); recyclingBasketVo.setId("0"); recyclingBasketVo.setBasketBarcode(container.getBarcode()); recyclingBasketVo.setBasketName(container.getContainerName()); RecyclingClassifiedItemVo classifiedItemVo1 = new RecyclingClassifiedItemVo(); classifiedItemVo1.setId("0"); classifiedItemVo1.setAmount(5); classifiedItemVo1.setName("Test开胸包"); classifiedItemVo1.setType("器械包"); RecyclingClassifiedItemVo classifiedItemVo2 = new RecyclingClassifiedItemVo(); classifiedItemVo2.setId("0"); classifiedItemVo2.setAmount(5); classifiedItemVo2.setName("Test开颅包"); classifiedItemVo2.setType("器械包"); RecyclingClassifiedItemVo classifiedItemVo3 = new RecyclingClassifiedItemVo(); classifiedItemVo3.setId("0"); classifiedItemVo3.setAmount(2); classifiedItemVo3.setName("Test开口包"); classifiedItemVo3.setType("器械包"); RecyclingClassifiedItemVo classifiedItemVo4 = new RecyclingClassifiedItemVo(); classifiedItemVo4.setId("0"); classifiedItemVo4.setAmount(2); classifiedItemVo4.setName("Test穿刺包"); classifiedItemVo4.setType("器械包"); recyclingBasketVo.getClassifiedItems().add(classifiedItemVo1); recyclingBasketVo.getClassifiedItems().add(classifiedItemVo2); recyclingBasketVo.getClassifiedItems().add(classifiedItemVo3); recyclingBasketVo.getClassifiedItems().add(classifiedItemVo4); recyclingBasketVos.add(recyclingBasketVo); return recyclingBasketVos; } /** * 创建通用器械包申请单和回收记录 * @return */ public RecyclingRecord createComboApplicationAndRecyclingRecord(){ RecyclingApplication application = new RecyclingApplication(); objectDao.saveOrUpdate(application); long appId = application.getId(); TousseDefinition td_Test开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); TousseDefinition td_止血带 = tousseDefinitionManager.getTousseDefinitionByNameForDisplay("止血带"); TousseDefinition td_治疗巾 = tousseDefinitionManager.getTousseDefinitionByNameForDisplay("Test治疗巾"); TousseItem ti1 = new TousseItem(); ti1.setTousseName("Test开胸包"); ti1.setAmount(5); ti1.setRecyclingAmount(null); ti1.setSendOutAmount(0); ti1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); ti1.setInvoicePlan(application); ti1.setTousseDefinitionId(td_Test开胸包.getId()); TousseItem ti2 = new TousseItem(); ti2.setTousseName("Test治疗巾"); ti2.setAmount(10); ti2.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); ti2.setRecyclingAmount(0); ti2.setSendOutAmount(0); ti2.setInvoicePlan(application); ti2.setTousseDefinitionId(td_治疗巾.getId()); TousseItem ti3 = new TousseItem(); ti3.setTousseType(TousseItem.TYPE_DIPOSABLE_GOODS); ti3.setTousseName("注射器[5ML]"); ti3.setAmount(100); ti3.setRecyclingAmount(0); ti3.setSendOutAmount(0); ti3.setInvoicePlan(application); TousseItem ti4 = new TousseItem(); ti4.setTousseType(TousseDefinition.PACKAGE_TYPE_DISINFECTION); ti4.setTousseName("止血带"); ti4.setInvoicePlanID(appId); ti4.setAmount(1); ti4.setRecyclingAmount(null); ti4.setSendOutAmount(0); ti4.setInvoicePlan(application); ti4.setTousseDefinitionId(td_止血带.getId()); List applicationItems = new ArrayList(); applicationItems.add(ti1); applicationItems.add(ti2); applicationItems.add(ti3); applicationItems.add(ti4); application.setRecyclingStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); application.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); application.setCommittedStatus(true); application.setApplicationItems(applicationItems); application.setType(InvoicePlan.TYPE_COMBO_FORM); application.setIncludeRecyclingItems(InvoicePlan.SIGNED_TRUE); objectDao.saveOrUpdate(application); RecyclingRecord oldRecord1 = new RecyclingRecord(); oldRecord1.setDepart("外科"); oldRecord1.setRecyclingApplication(application); return oldRecord1; } /** * 回收记录待回收物品 * @return */ public List createComboRecyclingItems() { List recyclingItems = new ArrayList(); RecyclingItemVo vo = new RecyclingItemVo(); vo.setName("Test开胸包"); vo.setRecycleAmount(5); RecyclingItemVo vo2 = new RecyclingItemVo(); vo2.setName("止血带_20141016"); vo2.setRecycleAmount(1); recyclingItems.add(vo); recyclingItems.add(vo2); return recyclingItems; } /** * 生成待回收篮筐数据 * @return */ public List getComboRecyclingBasketVos() { List recyclingBaskets = new ArrayList(); RecyclingBasketVo recyclingBasketVo = new RecyclingBasketVo(); Container container = containerManager.getContainerByBarcode("019000001"); recyclingBasketVo.setId("0"); recyclingBasketVo.setBasketBarcode(container.getBarcode()); recyclingBasketVo.setBasketName(container.getContainerName()); RecyclingClassifiedItemVo classifiedItemVo1 = new RecyclingClassifiedItemVo(); classifiedItemVo1.setId("0"); classifiedItemVo1.setAmount(5); classifiedItemVo1.setName("Test开胸包"); classifiedItemVo1.setType("器械包"); RecyclingClassifiedItemVo classifiedItemVo2 = new RecyclingClassifiedItemVo(); classifiedItemVo2.setId("0"); classifiedItemVo2.setAmount(1); classifiedItemVo2.setName("止血带_20141016"); classifiedItemVo2.setType("消毒物品"); recyclingBasketVo.getClassifiedItems().add(classifiedItemVo1); recyclingBasketVo.getClassifiedItems().add(classifiedItemVo2); recyclingBaskets.add(recyclingBasketVo); return recyclingBaskets; } /** * 创建申请单回收记录 * @return */ public RecyclingRecord createApplicationAndRecyclingRecordData(Map map) { RecyclingApplication application = new RecyclingApplication(); TousseItem ti1 = new TousseItem(); ti1.setTousseName("Test开胸包"); ti1.setIsRecycling("是"); ti1.setAmount(5); ti1.setRecyclingAmount(null); ti1.setSendOutAmount(0); ti1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); ti1.setTousseDefinitionId(map.get("Test开胸包")); ti1.setInvoicePlan(application); TousseItem ti2 = new TousseItem(); ti2.setTousseName("Test开颅包"); ti2.setIsRecycling("是"); ti2.setAmount(5); ti2.setRecyclingAmount(null); ti2.setSendOutAmount(0); ti2.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); ti2.setTousseDefinitionId(map.get("Test开颅包")); ti2.setInvoicePlan(application); TousseItem ti3 = new TousseItem(); ti3.setTousseName("Test开口包"); ti3.setIsRecycling("是"); ti3.setAmount(5); ti3.setRecyclingAmount(null); ti3.setSendOutAmount(0); ti3.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); ti3.setTousseDefinitionId(map.get("Test开口包")); ti3.setInvoicePlan(application); TousseItem ti4 = new TousseItem(); ti4.setTousseName("Test穿刺包"); ti4.setAmount(5); ti4.setIsRecycling("是"); ti4.setRecyclingAmount(null); ti4.setSendOutAmount(0); ti4.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); ti4.setTousseDefinitionId(map.get("Test穿刺包")); ti4.setInvoicePlan(application); TousseItem ti5 = new TousseItem(); ti5.setTousseName("Test治疗巾"); ti5.setAmount(10); ti1.setIsRecycling("否"); ti5.setRecyclingAmount(null); ti5.setSendOutAmount(0); ti5.setTousseType(TousseDefinition.PACKAGE_TYPE_DRESSING); ti5.setTousseDefinitionId(map.get("Test治疗巾")); ti5.setInvoicePlan(application); List applicationItems = new ArrayList(); applicationItems.add(ti1); applicationItems.add(ti2); applicationItems.add(ti3); applicationItems.add(ti4); applicationItems.add(ti5); application.setRecyclingStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); application.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); application.setCommittedStatus(true); application.setApplicationItems(applicationItems); application.setType(InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM); objectDao.saveOrUpdate(application); RecyclingRecord oldRecord1 = new RecyclingRecord(); oldRecord1.setDepart("外科"); oldRecord1.setRecyclingApplication(application); return oldRecord1; } /** * 根据参数生产普通器械包实例 * @param barcodeArr 条码数组 * @param tousseName 器械包名 * @param tousseType 器械包类型 * @param orgName 生产部门名称 * @param orgCode 生产部门代码 * @param price 器械包价格 */ protected void createSimpleTousseInstanceByParam(String[] barcodeArr , String tousseName , String tousseType , String orgName , String orgCode,double price){ TousseDefinition tousseDefinition1 = tousseDefinitionManager.getTousseDefinitionByName(tousseName); for(String barcode :barcodeArr){ TousseInstance tousseInstance1 = new TousseInstance(); tousseInstance1.setTousseDefinition(tousseDefinition1); tousseInstance1.setTousseName(tousseName); tousseInstance1.setBarcode(barcode); tousseInstance1.setType(tousseType); tousseInstance1.setStatus(TousseInstance.STATUS_STERILED); tousseInstance1.setPrice(price); tousseInstance1.setFluctuationPrice(price); tousseInstance1.setSterilingType("P1"); tousseInstance1.setOrgUnitCoding(orgCode); tousseInstance1.setOrgUnitName(orgName); tousseInstance1.setStatisticsAmount(1); tousseInstance1.setPackageType("纸塑"); Date date = null; try { date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2030-10-20 13:00:00"); } catch (ParseException e) { e.printStackTrace(); } tousseInstance1.setValidUntil(date); try { date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2014-10-21 13:00:00"); } catch (ParseException e) { e.printStackTrace(); } tousseInstance1.setOperationTime(date); tousseInstanceManager.setToDefaultWareHouse(tousseInstance1, orgCode); tousseInstanceManager.saveOrUpdate(tousseInstance1); //入库到GoodStock表 List gslist = new ArrayList<>(); // GoodsStock gs = TousseInstanceUtils.newGoodsStock(tousseInstance1); goodsStockManager.addToList(gslist, tousseInstance1); goodsStockManager.saveOrUpdateGoodsStock(gslist, GoodsStockManager.MODE_INSTOCK); //不对申请单类型为外部代理来菌单的器械包或器械包定义的类型为外部代理灭菌的器械包实例增加库存 if(!TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY.equals(tousseType) && TousseDefinition.STR_YES.equals(tousseDefinition1.getIsTraceable())){ tousseStockManager.increaseStockByTousseName(tousseInstance1.getTousseName()); } } } protected void createComboTousseInstanceByParam(JSONArray comboTousseConfigs){ for(int i=0;i gsList = new ArrayList<>(); goodsStockManager.addToList(gsList, tousseInstance1); goodsStockManager.saveOrUpdateGoodsStock(gsList, GoodsStockManager.MODE_INSTOCK); //不对申请单类型为外部代理来菌单的器械包或器械包定义的类型为外部代理灭菌的器械包实例增加库存 if(!TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY.equals(tousseType) && TousseDefinition.STR_YES.equals(tousseDefinition1.getIsTraceable())){ tousseStockManager.increaseStockByTousseName(tousseInstance1.getTousseName()); } return tousseInstance1; } /** * 根据参数创建普通器械包的申请单 * @param serialNum 序列号 * @param appType 申请单类型 * @param depart 申请科室 * @param departCode 申请科室代码 * @param appTime 申请时间 * @param map 申请物品 */ @Deprecated protected Long createSimpleTousseOrDiposableGoodsApplicationByParam(String serialNum ,String appType, String depart , String departCode , Date appTime , Map map){ RecyclingApplication application = new RecyclingApplication(); application.setSerialNumber(serialNum); application.setApplicant("吴启华"); application.setDepartCoding(departCode); application.setDepart(depart); application.setSettleAccountsDepartCoding(departCode); application.setSettleAccountsDepart(depart); application.setHandleDepart(Constants.ORG_UNIT_NAME_CSSD); application.setHandleDepartCoding(Constants.ORG_UNIT_CODE_CSSD); application.setApplicationTime(appTime); application.setCommittedStatus(true); application.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); application.setType(appType); List items = new ArrayList(); for(Map.Entry entry : map.entrySet()){ TousseItem item = new TousseItem(); item.setTousseName(entry.getKey()); item.setAmount(entry.getValue()); //item.setTousseType(tousseType); if(appType.equals(InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM)){ item.setDiposable("是"); item.setTousseType(TousseItem.TYPE_DIPOSABLE_GOODS); }else{ TousseDefinition tousseDefinition = tousseDefinitionManager.getTousseDefinitionByName(entry.getKey()); item.setDiposable("否"); if(tousseDefinition != null){ item.setTousseType(tousseDefinition.getTousseType()); // item.setTousseDefinitionId(tousseDefinitionId); } } item.setInvoicePlan(application); items.add(item); tousseItemManager.save(item); } if(appType.equals(InvoicePlan.TYPE_BORROWINGSINGLE)){ application.setReturnStatus(InvoicePlan.RETURN_STATUS_UNRETURNED); } application.setApplicationItems(items); objectDao.saveOrUpdate(application); return application.getId(); } protected Long createApplication(JSONObject appConfig, JSONArray itemsConfigs){ Date nowDate = new Date(); String serialNumber = JSONUtil.optString(appConfig, "serialNumber", ""); String type = JSONUtil.optString(appConfig, "type", InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM); String depart = JSONUtil.optString(appConfig, "depart", ""); String departCoding = JSONUtil.optString(appConfig, "departCoding", ""); Date appTime = JSONUtil.optDate(appConfig, "appTime",com.forgon.Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, nowDate); RecyclingApplication application = new RecyclingApplication(); application.setSerialNumber(serialNumber); application.setApplicant("吴启华"); application.setDepartCoding(departCoding); application.setDepart(depart); application.setSettleAccountsDepartCoding(departCoding); application.setSettleAccountsDepart(depart); application.setHandleDepart(Constants.ORG_UNIT_NAME_CSSD); application.setHandleDepartCoding(Constants.ORG_UNIT_CODE_CSSD); application.setApplicationTime(appTime); application.setCommittedStatus(true); application.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); application.setType(type); List items = new ArrayList(); { for(int i=0;i items = new ArrayList(); for(int i=0;i result = new HashMap(); WareHouse wareHouse1 = wareHouseManager.getDefaultWareHouseByUnitCode(Constants.ORG_UNIT_CODE_CSSD); assertNotNull(wareHouse1); Long warehouseID = wareHouse1.getId(); String warehouseName = wareHouse1.getName(); // 先保存定义 // 注射器【5ML】 DisposableGoods disposableGoods1 = new DisposableGoods(); disposableGoods1.setName("注射器"); disposableGoods1.setSpecification("5ML"); disposableGoods1.setReferencePrice(1.5); disposableGoods1.setType("注射器"); diposableGoodsManager.saveOrUpdate(disposableGoods1); // 注射器【10ML】 DisposableGoods disposableGoods2 = new DisposableGoods(); disposableGoods2.setName("注射器"); disposableGoods2.setSpecification("10ML"); disposableGoods2.setReferencePrice(1.4); disposableGoods2.setType("注射器"); diposableGoodsManager.saveOrUpdate(disposableGoods2); // 纱块【6*8】 DisposableGoods disposableGoods3 = new DisposableGoods(); disposableGoods3.setName("纱块"); disposableGoods3.setSpecification("6*8"); disposableGoods3.setReferencePrice(1.4); disposableGoods3.setType("纱块"); diposableGoodsManager.saveOrUpdate(disposableGoods3); //增加申请测试用例所需用到的一次性物品定义数据 DisposableGoods diposableGoods = new DisposableGoods(); diposableGoods.setName("一次性导尿包"); diposableGoods.setSpecification("12#"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("一次性压舌板"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("木质"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("动脉采血器"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("2ML"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("一次性腰穿包"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("9#"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("灭菌棉球"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("10粒/包"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("一次性弯盘"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("单腰A型"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("一次性使用灌肠袋"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("灭菌纱块"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("6*8CM2块/包(100/盒)"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("一次型使用无菌注射针"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("6#"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("医用棉签"); diposableGoods.setSpecification("12CM20支/包"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setType("医用棉签"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("灭菌纱块"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("6*8CM2块/包(100/盒)"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("灭菌纱块"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("8*12CM2块/包"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("注射器"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("20ML"); diposableGoodsManager.saveOrUpdate(diposableGoods); diposableGoods = new DisposableGoods(); diposableGoods.setName("一次性使用吸痰管"); diposableGoods.setIsPartOfTousseMaterial(DisposableGoodsStock.CONSTANT_YES); diposableGoods.setSpecification("12#"); diposableGoodsManager.saveOrUpdate(diposableGoods); // 开始入库 // 注射器【5ML】 1000个,有1个批次,1个标识号 GodownEntry entry = new GodownEntry(); entry.setWarehouseID(warehouseID); entry.setWarehouseName(warehouseName); GodownEntryItem godownEntryItem1 = new GodownEntryItem(); godownEntryItem1.setBatchNumber("b-20140101"); godownEntryItem1.setAmount(1000L); godownEntryItem1.setCost(1.5); godownEntryItem1.setDisposableGoodsID(disposableGoods1.getId()); godownEntryItem1.setManufacturer("广州白云山制药厂"); godownEntryItem1.setSupplierName("广州捷康医疗"); godownEntryItem1.setGodownEntry(entry); godownEntryItem1.setExpDate(new Date()); godownEntryItem1.setIdentification("i-001"); entry.getItemsList().add(godownEntryItem1); //注射器【10ML】 2000个,有1个批次,2个标识号 GodownEntryItem godownEntryItem2 = new GodownEntryItem(); godownEntryItem2.setBatchNumber("b-20140101"); godownEntryItem2.setAmount(1500L); godownEntryItem2.setCost(1.3); godownEntryItem2.setDisposableGoodsID(disposableGoods2.getId()); godownEntryItem2.setManufacturer("广州白云山制药厂"); godownEntryItem2.setSupplierName("广州捷康医疗"); godownEntryItem2.setGodownEntry(entry); godownEntryItem2.setExpDate(new Date()); godownEntryItem2.setIdentification("i-001"); entry.getItemsList().add(godownEntryItem2); GodownEntryItem godownEntryItem3 = new GodownEntryItem(); godownEntryItem3.setBatchNumber("b-20140101"); godownEntryItem3.setAmount(500L); godownEntryItem3.setCost(1.4); godownEntryItem3.setDisposableGoodsID(disposableGoods2.getId()); godownEntryItem3.setManufacturer("广州白云山制药厂"); godownEntryItem3.setSupplierName("广州捷康医疗"); godownEntryItem3.setGodownEntry(entry); godownEntryItem3.setExpDate(new Date()); godownEntryItem3.setIdentification("i-002"); entry.getItemsList().add(godownEntryItem3); //纱块【6*8】 2000个,有2个批次,各1个标识号 GodownEntryItem godownEntryItem4 = new GodownEntryItem(); godownEntryItem4.setBatchNumber("b-20140101"); godownEntryItem4.setAmount(1500L); godownEntryItem4.setCost(1.3); godownEntryItem4.setDisposableGoodsID(disposableGoods3.getId()); godownEntryItem4.setManufacturer("广州白云山制药厂"); godownEntryItem4.setSupplierName("广州捷康医疗"); godownEntryItem4.setGodownEntry(entry); godownEntryItem4.setExpDate(new Date()); godownEntryItem4.setIdentification("i-001"); entry.getItemsList().add(godownEntryItem4); GodownEntryItem godownEntryItem5 = new GodownEntryItem(); godownEntryItem5.setBatchNumber("b-20140202"); godownEntryItem5.setAmount(500L); godownEntryItem5.setCost(1.4); godownEntryItem5.setDisposableGoodsID(disposableGoods3.getId()); godownEntryItem5.setManufacturer("广州白云山制药厂"); godownEntryItem5.setSupplierName("广州捷康医疗"); godownEntryItem5.setGodownEntry(entry); godownEntryItem5.setExpDate(new Date()); godownEntryItem5.setIdentification("i-002"); entry.getItemsList().add(godownEntryItem5); godownEntryManager.saveGodownEntry_TRANS_REQUIRED(entry, result); DisposableGoodsStock disposableGoodsStock1 = diposableGoodsManager.getDisposableGoodsStockByName(wareHouse1.getId(),"注射器", "5ML"); assertNotNull(disposableGoodsStock1); assertEquals(1000, disposableGoodsStock1.getAmount().longValue()); DisposableGoodsStock disposableGoodsStock2 = diposableGoodsManager.getDisposableGoodsStockByName(wareHouse1.getId(),"注射器", "10ML"); assertNotNull(disposableGoodsStock2); assertEquals(2000, disposableGoodsStock2.getAmount().longValue()); Set batchs = disposableGoodsStock2.getGoodsBatchs(); assertNotNull(batchs); assertEquals(1, batchs.size()); List idents = batchs.iterator().next().getIdentifications(); assertNotNull(idents); assertEquals(2, idents.size()); //纱块【6*8】 2000个,有2个批次,各1个标识号 DisposableGoodsStock disposableGoodsStock3 = diposableGoodsManager.getDisposableGoodsStockByName(wareHouse1.getId(),"纱块", "6*8"); assertNotNull(disposableGoodsStock3); assertEquals(2000, disposableGoodsStock3.getAmount().longValue()); } private static void destroySecureContext() { SecurityContextHolder.clearContext(); } protected void onTearDownInTransaction() { destroySecureContext(); } /** * 添加回收项。回收单与回收项为一对多的关系 * 返回创建的json对象 * @param jsonArray * @param basketBarcode * @param basketId * @param tousseName * @param tousseDefinitionID * @param amount * @param itemType * @param tousseNameForMaterial ? * @param tousseAmountForMaterial * @param basketGroupBarcodes */ public JSONObject addRecyclingItem(String basketBarcode, String basketId, String tousseName,Long tousseDefinitionID, Integer amount, String itemType, String tousseNameForMaterial, Integer tousseAmountForMaterial,String basketGroupBarcodes) { return addRecyclingItem(basketBarcode, basketId, tousseName,tousseDefinitionID, amount, itemType, tousseNameForMaterial, tousseAmountForMaterial, null,basketGroupBarcodes); } /** * 创建回收项,返回创建的json对象 * @param jsonArray * @param basketBarcode * @param basketId * @param tousseName * @param tousseDefinitionID * @param amount * @param itemType * @param tousseNameForMaterial * @param tousseAmountForMaterial * @param appid * @param basketGroupBarcodes * @return */ public JSONObject addRecyclingItem(String basketBarcode, String basketId, String tousseName,Long tousseDefinitionID, Integer amount, String itemType, String tousseNameForMaterial, Integer tousseAmountForMaterial,Long appid,String basketGroupBarcodes) { JSONObject obj = new JSONObject(); obj.put("basketBarcode", basketBarcode); obj.put("basketId", basketId); obj.put("tousseName", tousseName); obj.put("tousseDefinitionID", tousseDefinitionID); obj.put("amount", amount); obj.put("itemType", itemType); obj.put("tousseNameForMaterial", tousseNameForMaterial); obj.put("tousseAmountForMaterial", tousseAmountForMaterial); obj.put("appid", appid); obj.put("basketGroupBarcodes", basketGroupBarcodes); return obj; } protected void appendToCollection( Collection vos, String tousseName, int amount, String tousseType, String isRecycling, long id) { TousseItemVo vo = new TousseItemVo(); vo.setId(id); vo.setTousseName(tousseName); vo.setTousseType(tousseType); vo.setAmount(amount); vo.setIsRecycling(isRecycling); if ("一次性物品".equals(tousseType)){ vo.setDiposable("是"); } else{ vo.setDiposable("否"); } vos.add(vo); } protected void appendToCollection2( Collection vos, String tousseName, int amount, String tousseType, String isRecycling, long id, long goodId) { TousseItemVo vo = new TousseItemVo(); vo.setId(id); vo.setTousseName(tousseName); vo.setTousseType(tousseType); vo.setAmount(amount); vo.setIsRecycling(isRecycling); if ("一次性物品".equals(tousseType)){ vo.setDiposable("是"); vo.setDisposableGoodsId(goodId); } else{ vo.setDiposable("否"); vo.setTousseDefinitionID(goodId); } vos.add(vo); } /** * 创建仓库,只设置科室编码。测试用例只有这个属性是有用的 * @param orgUnitCode */ protected void createWareHouse(String orgUnitCode){ WareHouse wh = new WareHouse(); wh.setOrgUnitCode(orgUnitCode); try { wareHouseManager.saveOrUpdateWareHouse(wh); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @param wareHouse_CSSD * @param barcode * @return */ public JSONObject buildDisposableGoodsInvoiceItem(WareHouse wareHouse_CSSD, String barcode,Integer amount) { JSONObject invoiceItems1_1 = new JSONObject(); invoiceItems1_1.put("barcode", barcode); invoiceItems1_1.put("tousseType", DisposableGoods.TYPE_NAME); JSONObject typeInfoOnScanned = new JSONObject(); DisposableGoodsBatchStock disposableGoodsBatchStock = diposableGoodsManager.getByWarehouseIDAndBarcode(wareHouse_CSSD.getId(), barcode); /// typeInfoOnScanned.put("disposableGoodsId", disposableGoodsBatchStock.getDisposableGoodsId()); typeInfoOnScanned.put("disposableGoodsStockId", disposableGoodsBatchStock.getDisposableGoodsStockId()); typeInfoOnScanned.put("disposableGoodsBatchId", disposableGoodsBatchStock.getDisposableGoodsBatchId()); typeInfoOnScanned.put("disposableGoodsBatchStockId", disposableGoodsBatchStock.getId()); invoiceItems1_1.put("sendAmount", amount); invoiceItems1_1.put("isRoutine", TousseInstance.ROUTINE_YES); invoiceItems1_1.put("typeInfoOnScanned", typeInfoOnScanned); return invoiceItems1_1; } /** * 设置申请单的信息 * @param invoicePlan * @param departCoding 申请科室编码 * @param handleDepartCoding 处理科室编码 * @param deliverStatus 发货状态 * @param recyclingStatus 回收状态 * @param committedStatus 是否提交 */ protected void setInvoicePlanInfo(InvoicePlan invoicePlan,String departCoding,String handleDepartCoding, String deliverStatus,String recyclingStatus,Boolean committedStatus){ invoicePlan.setCommittedStatus(committedStatus); invoicePlan.setDeliverStatus(deliverStatus); invoicePlan.setDepartCoding(departCoding); invoicePlan.setHandleDepartCoding(handleDepartCoding); invoicePlan.setRecyclingStatus(recyclingStatus); } /** * 默认回滚数据 */ // @Override // protected boolean isDefaultRollback() { // return false; // } /** * 修改发货的系统参数设置 * @param afterRecyclingTousseDeliver 是否回收后发货 * @param invoiceOrigin 发货数量依据 */ protected void setInvoiceParam(boolean afterRecyclingTousseDeliver, String invoiceOrigin) { SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); supplyRoomConfig.setAfterRecyclingTousseDeliver(afterRecyclingTousseDeliver); supplyRoomConfig.setInvoiceOrigin(invoiceOrigin); // supplyRoomConfigManager.saveOrUpdate(supplyRoomConfig); supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); assertEquals(supplyRoomConfig.getAfterRecyclingTousseDeliver(),afterRecyclingTousseDeliver); assertEquals(supplyRoomConfig.getInvoiceOrigin(),invoiceOrigin); } protected boolean safelyRunWithTransNew(RunWithTransNewTask task){ boolean success = false; try{ runWithTransNewManager.runWith_TRANS_NEW(task); success = true; }catch(HibernateJdbcException e){ success = false; }catch(GenericJDBCException e){ success = false; }catch(HibernateSystemException e){ success = false; }catch(CannotAcquireLockException e){ success = false; } if(!success){ System.out.println(Thread.currentThread().getName() + "超时,重试"); } return success; } /** * 根据名字和规格查找对应的一次性物品id * @param name * @param spec * @return */ protected Long getDisposeGoodId(String name, String spec) { DisposableGoods disposableGoods = diposableGoodsManager.getDisposableGoodsByName(name, spec); assertNotNull(disposableGoods); Long id = disposableGoods.getId(); assertNotNull(id); return id; } /** * 根据申请单id查找对应的申请单 * @param id 申请单的id * @return */ protected RecyclingApplication getRecyclingApplicationById(Long id){ return objectDao.getHt().get(RecyclingApplication.class, id); } protected void setRinserNeedConfirmByBarcode(String barcode){ if(StringUtils.isBlank(barcode)){ return ; } Rinser rinser = (Rinser)barcodeManager.getBarcodeByBarcode(barcode); if(rinser != null){ rinser.setIsWashConfirm(com.forgon.Constants.STR_YES); objectDao.save(rinser); } } protected void cleanRinserNeedConfirmByBarcode(String barcode){ if(StringUtils.isBlank(barcode)){ return ; } Rinser rinser = (Rinser)barcodeManager.getBarcodeByBarcode(barcode); if(rinser != null){ rinser.setIsWashConfirm(com.forgon.Constants.STR_NO); objectDao.save(rinser); } } }