Index: forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDao.java =================================================================== diff -u -r13855 -r15196 --- forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDao.java (.../ObjectDao.java) (revision 13855) +++ forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDao.java (.../ObjectDao.java) (revision 15196) @@ -5,6 +5,7 @@ import java.util.List; import org.hibernate.Session; +import org.hibernate.SessionFactory; @@ -83,6 +84,8 @@ public Session getHibernateSession(); + public SessionFactory getHibernateSessionFactory(); + public Session openNewSession(); public boolean excuteSQL(String sql); Index: ssts-web/src/main/java/com/forgon/disinfectsystem/initdata/service/InitializeDataManagerImpl.java =================================================================== diff -u -r14586 -r15196 --- ssts-web/src/main/java/com/forgon/disinfectsystem/initdata/service/InitializeDataManagerImpl.java (.../InitializeDataManagerImpl.java) (revision 14586) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/initdata/service/InitializeDataManagerImpl.java (.../InitializeDataManagerImpl.java) (revision 15196) @@ -1,5 +1,8 @@ package com.forgon.disinfectsystem.initdata.service; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; @@ -8,17 +11,28 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Stream; +import javax.annotation.PostConstruct; + +import net.sf.json.JSONObject; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.springframework.scheduling.annotation.Scheduled; +import org.hibernate.FlushMode; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.springframework.orm.hibernate4.SessionFactoryUtils; +import org.springframework.orm.hibernate4.SessionHolder; 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.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionSynchronizationManager; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; @@ -32,6 +46,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.labeltemplate.LabelTemplate; import com.forgon.oa.formula.dao.SerialNumberDao; import com.forgon.oa.initdata.bean.InitializationData; import com.forgon.oa.initdata.bean.ResourceBean; @@ -50,9 +65,11 @@ import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.systemsetting.model.HttpOption; import com.forgon.systemsetting.service.HttpOptionManager; -import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.util.FileUtils; +import com.forgon.tools.util.PathUtils; import com.forgon.tools.xml.CommonReadXmlManager; import com.forgon.treenode.service.THTreeNodeManager; @@ -65,11 +82,6 @@ Logger logger = Logger.getLogger(InitializeDataManagerImpl.class); - /** - * 是否初始化了 - */ - private boolean initialized = false; - private RoleManager roleManager; private ResourceManager rescManager; private THTreeNodeManager thTreeNodeManager; @@ -157,16 +169,22 @@ /** * 初始化运行数据,在Tomcat启动后只执行一次 - * 使用了Spring的Scheduled注解,简化了xml的配置,延迟执行时间设置为1年,并且判断执行一次后不再执行 */ - @Scheduled(initialDelay=1000,fixedDelay=1000*60*60*24*365) + @PostConstruct public void initData() { - // 如果已经初始化,则不再运行初始化的代码 - if (initialized){ - return; + SessionFactory sessionFactory = objectDao.getHibernateSessionFactory(); + boolean participate = false; + if (TransactionSynchronizationManager.hasResource(sessionFactory)) { + // Do not modify the Session: just set the participate flag. + participate = true; + }else{ + // 打开session + Session session = sessionFactory.openSession(); + session.setFlushMode(FlushMode.MANUAL); + SessionHolder sessionHolder = new SessionHolder(session); + TransactionSynchronizationManager.bindResource(sessionFactory, sessionHolder); } - initialized = true; initializationData = (InitializationData) commonReadXmlManager .getXmlBeanByFileName("iniData"); @@ -192,6 +210,8 @@ //创建虚拟篮筐数据 initVirtualContainerData(); + // 初始化标签模板 + initLabelTemplates(); //**********系统参数配置********* //initSystemParamSetting(); @@ -200,6 +220,14 @@ //updateSupplyRoomConfigSeq(); //********** 更新旧申请单的科室排序****** //updateInvoicePlanSequence(); + + // 关闭session + if (!participate) { + SessionHolder sessionHolder = + (SessionHolder) TransactionSynchronizationManager.unbindResource(sessionFactory); + SessionFactoryUtils.closeSession(sessionHolder.getSession()); + } + } private void initSerialNumber(){ @@ -694,4 +722,59 @@ logger.debug("update:" + plan.getDepart() +" orgUnitCode=" + orgUnitCoding + ",sequence=" + plan.getSequence()); } } + + private void initLabelTemplates() { + String path = PathUtils.getWebAppRootPath(); + String directory = String.format( + "%s\\disinfectsystem\\labelTemplateDesign\\labelTemplates", + path); + try { + try (Stream pathList = Files.list(Paths + .get(directory));) { + pathList.forEach(new Consumer() { + @Override + public void accept(java.nio.file.Path path) { + String fileName = path.getFileName().toString(); + String json = FileUtils.readAllContentAsString(path, + "utf-8"); + if (StringUtils.isBlank(json)) { + return; + } + // 判断该模板是否已存在 + LabelTemplate labelTemplate = (LabelTemplate) objectDao + .getByProperty( + LabelTemplate.class.getSimpleName(), + "name", fileName); + if (labelTemplate != null) { + return; + } + labelTemplate = new LabelTemplate(); + JSONObject obj = JSONObject.fromObject(json); + String dataSourceName = JSONUtil.optString(obj, + "dataSourceName", ""); + String description = JSONUtil.optString(obj, + "description", ""); + String width = JSONUtil.optString(obj, "width", ""); + String height = JSONUtil.optString(obj, "height", ""); + String programCodes = JSONUtil.optString(obj, + "programCodes", ""); + String templateInfo = JSONUtil.optString(obj, + "templateInfo", ""); + + labelTemplate.setName(fileName); + labelTemplate.setDataSourceName(dataSourceName); + labelTemplate.setDescription(description); + labelTemplate.setWidth(width); + labelTemplate.setHeight(height); + labelTemplate.setProgramCodes(programCodes); + labelTemplate.setTemplateInfo(templateInfo); + objectDao.saveOrUpdate(labelTemplate); + } + }); + } + + } catch (IOException e) { + e.printStackTrace(); + } + } } Index: forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDaoImpl.java =================================================================== diff -u -r14757 -r15196 --- forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDaoImpl.java (.../ObjectDaoImpl.java) (revision 14757) +++ forgon-tools/src/main/java/com/forgon/tools/hibernate/ObjectDaoImpl.java (.../ObjectDaoImpl.java) (revision 15196) @@ -419,6 +419,12 @@ } return session; } + + public SessionFactory getHibernateSessionFactory(){ + SessionFactory sessionFactory = getHibernateTemplate() + .getSessionFactory(); + return sessionFactory; + } public Session openNewSession() {