package com.dy.pmsBase.util; import com.dy.common.util.ConfigXml; import com.dy.common.util.MD5; import com.dy.common.util.NumUtil; import com.dy.common.webListener.ConfigListener; import com.dy.pmsGlobal.daoBa.BaPrivilegeMapper; import com.dy.pmsGlobal.daoBa.BaPrivilegeMapper; import com.dy.pmsGlobal.pojoBa.BaPrivilege; import com.dy.pmsGlobal.pojoBa.BaUser; import org.jdom2.Document; import org.jdom2.Element; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; import java.net.URL; import java.util.List; /** * 监听器,实现功能:在系统启动时初始化,向数据库中插入数据 * 本监听器不能采用ServletContextListener方式,因为Servlet上下文Context创建后 * Spring容器并没有创建完,而本类中用了Spring容器中的Bean,即privilegeDao。 * 所以采用了Spring事件监听器来实现 */ @Component public class PrivilegeListener implements ApplicationListener { private BaPrivilegeMapper privilegeDao ; @Autowired public void setprivilegeDao(BaPrivilegeMapper privilegeDao){ this.privilegeDao = privilegeDao ; } /** * SpringBoot容器已经准备好了 * @param event 事件 */ @Override public void onApplicationEvent(@NonNull ApplicationReadyEvent event) { try { //等1秒,等待com.alibaba.druid.pool.DruidDataSource实始化完成 Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); }finally { if(!this.existPrivileges()){ this.init(event); } } } /** * 实始化 */ @SuppressWarnings("unused ") private void init(ApplicationReadyEvent event){ try { URL configFileURL = ConfigListener.class.getResource("/privileges-config.xml" ); ConfigXml configXml = new ConfigXml() ; Document doc = configXml.createDom(configFileURL) ; this.doInit(configXml, doc); } catch (Exception e) { System.out.println("系统启动时,初始化配置出错 !"); System.out.println(e.getMessage()); e.printStackTrace(); } } private void doInit(ConfigXml configXml, Document doc) throws Exception{ if(configXml != null && doc != null){ Element prs = configXml.getElement(doc, "config.privileges") ; if(prs != null){ List list = prs.getChildren() ; if(list != null){ for(Element ele : list){ String num = ele.getAttributeValue("num") ; String name = ele.getAttributeValue("name") ; String type = ele.getAttributeValue("type") ; String typeName = ele.getAttributeValue("typeName") ; this.savePrivilege(num, name, type,typeName); } } } } } /** * 数据库中是否存在行政区划数据 * @return 存在否 */ private boolean existPrivileges(){ Long total = this.privilegeDao.selectCount() ; return (total != null && total > 0) ; } /** * 保存权限 * @param name 编码 * @param name 名称 * @param type 类型 */ private void savePrivilege(String num, String name, String type,String typeName) throws Exception{ if((num != null && !num.trim().equals("")) && (name != null && !name.trim().equals("")) && (type != null && !type.trim().equals(""))){ if(NumUtil.isPlusIntNumber(num) && NumUtil.isPlusIntNumber(type)){ BaPrivilege po = new BaPrivilege() ; po.num = Integer.parseInt(num) ; po.name = name ; po.type = Integer.parseInt(type) ; po.typeName = typeName ; this.privilegeDao.insertSelective(po) ; } } } }