package com.dy.pipIrrBase.util; import com.dy.common.multiDataSource.DataSourceContext; import com.dy.common.mybatis.envm.Deleted; import com.dy.common.mybatis.envm.Disabled; import com.dy.common.util.ConfigXml; import com.dy.common.util.MD5; import com.dy.common.webListener.ConfigListener; import com.dy.pipIrrGlobal.daoBa.BaDistrictMapper; import com.dy.pipIrrGlobal.daoBa.BaUserMapper; import com.dy.pipIrrGlobal.pojoBa.BaDistrict; import com.dy.pipIrrGlobal.pojoBa.BaUser; import com.dy.pipIrrGlobal.util.DistrictLevel; import org.jdom2.Document; 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; /** * 监听器,实现功能:在系统启动时初始化,向数据库中插入数据 * 本监听器不能采用ServletContextListener方式,因为Servlet上下文Context创建后 * Spring容器并没有创建完,而本类中用了Spring容器中的Bean,即distriDao, userDao。 * 所以采用了Spring事件监听器来实现 */ @Component public class InitListener implements ApplicationListener { private BaDistrictMapper distriDao ; private BaUserMapper userDao ; @Autowired public void setDistriDao(BaDistrictMapper distriDao){ this.distriDao = distriDao ; } @Autowired public void setUserDao(BaUserMapper userDao){ this.userDao = userDao ; } /** * 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 { this.init(event); } } /** * 实始化 */ @SuppressWarnings("unused ") private void init(ApplicationReadyEvent event){ try { URL configFileURL = ConfigListener.class.getResource("/init-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){ for(int num = 1; num <= 10000; num++){ if(configXml.existElement(doc, "config.orgs.org" + num)){ String orgTag = configXml.getSetAttrTxt(doc, "config.orgs.org" + num,"name", null, false, null) ; //设置数据源 DataSourceContext.set(orgTag); if(!this.existDistricts()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".districts.province")){ String distriName = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".districts.province","name", null, false, null) ; String distriNum = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".districts.province","num", null, false, null) ; Integer distriLevel = configXml.getSetAttrPlusInt(doc, "config.orgs.org" + num + ".districts.province","level", null, 1, 99,null) ; Long supperId = this.saveDistrict(null, distriName, distriNum, distriLevel); if(supperId != null && configXml.existElement(doc, "config.orgs.org" + num + ".districts.province.city")){ distriName = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".districts.province.city","name", null, false, null) ; distriNum = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".districts.province.city","num", null, false, null) ; distriLevel = configXml.getSetAttrPlusInt(doc, "config.orgs.org" + num + ".districts.province.city","level", null, 1, 99,null) ; supperId = this.saveDistrict(supperId, distriName, distriNum, distriLevel); if(supperId != null && configXml.existElement(doc, "config.orgs.org" + num + ".districts.province.city.country")) { distriName = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".districts.province.city.country", "name", null, false, null); distriNum = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".districts.province.city.country", "num", null, false, null); distriLevel = configXml.getSetAttrPlusInt(doc, "config.orgs.org" + num + ".districts.province.city.country", "level", null, 1, 99, null); this.saveDistrict(supperId, distriName, distriNum, distriLevel); } } } } if(!this.existUsers()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".user")){ String name = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".user","name", null, false, null) ; String phone = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".user","phone", null, false, null) ; String password = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".user","password", null, false, null) ; Integer supperAdmin = configXml.getSetAttrPlusInt(doc, "config.orgs.org" + num + ".user","supperAdmin", null, 0, 1,null) ; this.saveUser(orgTag, name, phone, password, supperAdmin); } } }else{ break ; } } } } /** * 数据库中是否存在行政区划数据 * @return 存在否 */ private boolean existDistricts(){ Long total = this.distriDao.selectCount(null) ; return (total != null && total > 0) ; } /** * 数据库中是否存在行政区划数据 * @return 存在否 */ private boolean existUsers(){ Long total = this.userDao.selectCount(null) ; return (total != null && total > 0) ; } /** * 数据库中保存行政区划实体 * @param supperId 上级ID * @param name 名称 * @param num 编号 * @param level 级别 * @return id */ private Long saveDistrict(Long supperId, String name, String num, Integer level){ if((name != null && !name.trim().equals("")) && (num != null && !num.trim().equals("")) && level != null){ BaDistrict po = new BaDistrict() ; po.supperId = supperId ; po.name = name ; po.num = num ; po.level = DistrictLevel.get(level.byteValue()) ; po.deleted = Deleted.NO ; this.distriDao.putin(po) ; return po.getId() ; }else{ return null ; } } /** * 保存用户 * @param orgTag 机构标签 * @param name 名称 * @param phone 手机号 * @param password 密码 * @param supperAdmin 是否为超级管理员(1是,0否) */ private void saveUser(String orgTag, String name, String phone, String password, Integer supperAdmin) throws Exception{ if((name != null && !name.trim().equals("")) && (phone != null && !phone.trim().equals("")) && (password != null && !password.trim().equals("")) && supperAdmin != null){ BaUser po = new BaUser() ; po.userName = name ; po.phone = phone ; po.password = MD5.encrypt(password) ;//进行加密码 ; po.orgTag = orgTag ; po.supperAdmin = supperAdmin.byteValue() ; po.disabled = Disabled.NO ; po.deleted = Deleted.NO ; this.userDao.putin(po) ; } } }