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.ConfigXml4Springboot; import com.dy.common.util.MD5; import com.dy.pipIrrGlobal.daoBa.*; import com.dy.pipIrrGlobal.daoOp.OpeTaskTypeMapper; import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper; import com.dy.pipIrrGlobal.daoRm.RmIrrigateProfileMapper; import com.dy.pipIrrGlobal.daoSe.SePaymentMethodMapper; import com.dy.pipIrrGlobal.daoSe.SeRechargeProfileMapper; import com.dy.pipIrrGlobal.daoSe.SeWaterTypeMapper; import com.dy.pipIrrGlobal.pojoBa.*; import com.dy.pipIrrGlobal.pojoOp.OpeTaskType; import com.dy.pipIrrGlobal.pojoPr.PrWaterPrice; import com.dy.pipIrrGlobal.pojoRm.RmIrrigateProfile; import com.dy.pipIrrGlobal.pojoSe.SePaymentMethod; import com.dy.pipIrrGlobal.pojoSe.SeRechargeProfile; import com.dy.pipIrrGlobal.pojoSe.SeWaterType; import com.dy.pipIrrGlobal.util.DistrictLevel; import lombok.extern.slf4j.Slf4j; 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.core.io.ResourceLoader; import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; /** * 监听器,实现功能:在系统启动时初始化,向数据库中插入数据 * 本监听器不能采用ServletContextListener方式,因为Servlet上下文Context创建后 * Spring容器并没有创建完,而本类中用了Spring容器中的Bean,即distriDao, userDao。 * 所以采用了Spring事件监听器来实现 */ @Slf4j @Component public class InitListener implements ApplicationListener { protected ResourceLoader resourceLoader ; private BaDistrictMapper distriDao ; private BaUserMapper userDao ; private SePaymentMethodMapper paymentMethodDao ; private BaSettingsMapper settingsDao ; private SeWaterTypeMapper waterTypeDao ; private RmIrrigateProfileMapper rmIrrigateProfileDao; private PrWaterPriceMapper prWaterPriceDao; private BaDictMapper baDictDao; private BaDictItemMapper baDictItemDao; private SeRechargeProfileMapper seRechargeProfileDao; private OpeTaskTypeMapper taskTypeDao; @Autowired public void setResourceLoader(ResourceLoader resourceLoader){ this.resourceLoader = resourceLoader ; } @Autowired public void setDistriDao(BaDistrictMapper distriDao){ this.distriDao = distriDao ; } @Autowired public void setUserDao(BaUserMapper userDao){ this.userDao = userDao ; } @Autowired public void setPaymentDao(SePaymentMethodMapper paymentMethodDao){ this.paymentMethodDao = paymentMethodDao ; } @Autowired public void setSettingsDao(BaSettingsMapper settingsDao){ this.settingsDao = settingsDao ; } @Autowired public void setWaterTypeDao(SeWaterTypeMapper waterTypeDao){ this.waterTypeDao = waterTypeDao ; } @Autowired public void setRmIrrigateProfileDao(RmIrrigateProfileMapper rmIrrigateProfileDao) { this.rmIrrigateProfileDao = rmIrrigateProfileDao; } @Autowired public void setWaterPriceDao(PrWaterPriceMapper prWaterPriceDao) { this.prWaterPriceDao = prWaterPriceDao; } @Autowired public void setBaDictDao(BaDictMapper baDictDao) { this.baDictDao = baDictDao; } @Autowired public void setBaDictItemDao(BaDictItemMapper baDictItemDao) { this.baDictItemDao = baDictItemDao; } @Autowired public void setSeRechargeProfileDao(SeRechargeProfileMapper seRechargeProfileDao) { this.seRechargeProfileDao = seRechargeProfileDao; } @Autowired public void setOpeTaskTypeDao(OpeTaskTypeMapper taskTypeDao) { this.taskTypeDao = taskTypeDao; } /** * 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 { ConfigXml4Springboot configXml = new ConfigXml4Springboot() ; Document doc = configXml.createDom(this.resourceLoader, "init-config.xml") ; this.doInit(configXml, doc); } catch (Exception e) { log.error("系统启动时,初始化配置出错 !"); log.error(e.getMessage()); e.printStackTrace(); } } private void doInit(ConfigXml4Springboot configXml, Document doc) throws Exception{ //Check if configXml and doc are not null if(configXml != null && doc != null){ //Loop through 10000 orgs for(int num = 1; num <= 10000; num++){ //Check if the org exists if(configXml.existElement(doc, "config.orgs.org" + num)){ //Get the tag and enable value of the org String orgTag = configXml.getSetAttrTxt(doc, "config.orgs.org" + num,"tag", null, false, null) ; Boolean enable = configXml.getSetAttrBoolean(doc, "config.orgs.org" + num, "enable", null, null); //If the org is enabled if(enable != null && enable.booleanValue()){ //设置数据源 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, 0, 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); } } if(!this.existPayments()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".payments")){ for(int i = 1 ; i < 10000; i++){ if(configXml.existElement(doc, "config.orgs.org" + num + ".payments.item" + i)){ String name = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".payments.item" + i,"name", null, false, null) ; this.savePayment(orgTag, name); }else{ break ; } } } } if(!this.existSettings()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".settings")){ for(int i = 1 ; i < 10000; i++){ if(configXml.existElement(doc, "config.orgs.org" + num + ".settings.item" + i)){ String item_name = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".settings.item" + i,"item_name", null, false, null) ; String item_value = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".settings.item" + i,"item_value", null, false, null) ; String remarks = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".settings.item" + i,"remarks", null, false, null) ; this.saveSettings(orgTag, item_name, item_value, remarks); }else{ break ; } } } } if(!this.existIrrigateProfile()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".irrigateProfile")){ for(int i = 1 ; i < 10000; i++){ if(configXml.existElement(doc, "config.orgs.org" + num + ".irrigateProfile.item" + i)){ String defaultValue = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".irrigateProfile.item" + i,"defaultValue", null, false, null) ; String unit = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".irrigateProfile.item" + i,"unit", null, false, null) ; String sort = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".irrigateProfile.item" + i,"sort", null, false, null) ; String type = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".irrigateProfile.item" + i,"type", null, false, null) ; this.saveIrrigateProfile(orgTag, defaultValue, unit,sort,type); }else{ break ; } } } } if(!this.existRechargeProfile()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".rechargeProfile")){ for(int i = 1 ; i < 10000; i++){ if(configXml.existElement(doc, "config.orgs.org" + num + ".rechargeProfile.item" + i)){ String rechargeAmount = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".rechargeProfile.item" + i,"rechargeAmount", null, false, null) ; String sort = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".rechargeProfile.item" + i,"sort", null, false, null) ; this.saveRechargeProfile(orgTag, rechargeAmount, sort); }else{ break ; } } } } if(!this.existWaterTypes()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".waterTypes")){ for(int i = 1 ; i < 10000; i++){ if(configXml.existElement(doc, "config.orgs.org" + num + ".waterTypes.item" + i)){ String typeName = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".waterTypes.item" + i,"typeName", null, false, null) ; this.saveWaterType(orgTag, typeName); }else{ break ; } } } } if(!this.existWaterPrice()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".waterPrice")){ String price = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".waterPrice","price", null, false, null) ; this.saveWaterPrice(orgTag, price); } } if(!this.existDict()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".dictionaries.dict")){ String code = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".dictionaries.dict","code", null, false, null) ; String title = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".dictionaries.dict","title", null, false, null) ; String valueType = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".dictionaries.dict","valueType", null, false, null) ; this.saveDicts(orgTag, code,title,valueType); if(configXml.existElement(doc, "config.orgs.org" + num + ".dictionaries.dict.dictItem")){ for(int i = 1 ; i < 10000; i++){ if(configXml.existElement(doc, "config.orgs.org" + num + ".dictionaries.dict.dictItem.item" + i)){ String dictCode = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".dictionaries.dict.dictItem.item" + i,"dictCode", null, false, null) ; String value = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".dictionaries.dict.dictItem.item" + i,"value", null, false, null) ; String name = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".dictionaries.dict.dictItem.item" + i,"name", null, false, null) ; String status = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".dictionaries.dict.dictItem.item" + i,"status", null, false, null) ; String sort = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".dictionaries.dict.dictItem.item" + i,"sort", null, false, null) ; this.saveDictItems(orgTag,dictCode,value,name,status,sort); }else{ break ; } } } } } if(!this.existTaskType()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".taskType")){ for(int i = 1 ; i < 10000; i++){ if(configXml.existElement(doc, "config.orgs.org" + num + ".taskType.item" + i)){ String taskType = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".taskType.item" + i,"typeName", null, false, null) ; this.saveTaskType(orgTag, taskType); }else{ break ; } } } } } }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) ; } /** * 数据库中是否存在支付方式数据 * @return 存在否 */ private boolean existPayments(){ Long total = this.paymentMethodDao.selectCount(null) ; return (total != null && total > 0) ; } /** * 数据库中是否存在系统配置数据 * @return 存在否 */ private boolean existSettings(){ Long total = this.settingsDao.selectCount(null) ; return (total != null && total > 0) ; } /** * 数据库中是否存在用水类型数据 * @return 存在否 */ private boolean existWaterTypes(){ Long total = this.prWaterPriceDao.selectCount(null) ; return (total != null && total > 0) ; } /** * 数据库中是否存在灌溉配置 * @return */ private boolean existIrrigateProfile(){ Long total = this.rmIrrigateProfileDao.selectCount(null) ; return (total != null && total > 0) ; } /** * 数据库中是否存在虚拟常用充值金额配置 * @return */ private boolean existRechargeProfile() { Long total = this.seRechargeProfileDao.selectCount(null); return (total != null && total > 0); } /** * 数据库中是否存在水价 * @return */ private boolean existWaterPrice() { Long total = this.prWaterPriceDao.selectCount(null); return (total != null && total > 0) ; } /** * 数据库中是否存在字典 * @return */ private boolean existDict() { Long total = this.baDictDao.selectCount(null); return (total != null && total > 0) ; } /** * 数据库中是否存在工单任务类型 * @return */ private boolean existTaskType() { Long total = this.taskTypeDao.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) ; } } /** * 保存支付方式 * @param orgTag 机构标签 * @param name 名称 */ private void savePayment(String orgTag, String name) throws Exception{ if(name != null && !name.trim().equals("")){ SePaymentMethod po = new SePaymentMethod() ; po.setName(name); po.setDeleted(Deleted.NO.code); this.paymentMethodDao.insert(po) ; } } /** * 保存系统配置 * @param item_name 配置项 * @param item_value 配置项值 * @param remarks 备注信息 * @throws Exception */ private void saveSettings(String orgTag,String item_name, String item_value,String remarks) throws Exception{ if((item_name != null && !item_name.trim().equals("")) && (item_value != null && !item_value.trim().equals("")) && (remarks != null && !remarks.trim().equals(""))){ BaSettings po = new BaSettings() ; po.setItemName(item_name); po.setItemValue(item_value); po.setRemarks(remarks); this.settingsDao.insert(po) ; } } /** * 保存用水类型 * @param orgTag 机构标签 * @param typeName 名称 */ private void saveWaterType(String orgTag, String typeName) throws Exception{ if(typeName != null && !typeName.trim().equals("")){ SeWaterType po = new SeWaterType() ; po.setTypename(typeName); this.waterTypeDao.insert(po) ; } } /** * 保存灌溉配置 * @param orgTag * @param default_value * @param unit * @param sort * @param type * @throws Exception */ private void saveIrrigateProfile(String orgTag, String default_value, String unit, String sort, String type) throws Exception{ if((default_value != null && !default_value.trim().equals("")) && (unit != null && !unit.trim().equals("")) && (sort != null && !sort.trim().equals("")) && (type != null && !type.trim().equals(""))){ RmIrrigateProfile po = new RmIrrigateProfile(); po.setDefaultValue(Integer.parseInt(default_value)); po.setUnit(Byte.valueOf(unit)); po.setSort(Integer.parseInt(sort)); po.setType(Byte.valueOf(type)); po.setDeleted(0L); this.rmIrrigateProfileDao.insert(po); } } /** * 保存虚拟卡常用充值金额配置 * @param orgTag * @param recharge_amount * @param sort */ private void saveRechargeProfile(String orgTag, String recharge_amount, String sort) { if((recharge_amount != null && !recharge_amount.trim().equals("")) && (sort != null && !sort.trim().equals(""))) { SeRechargeProfile po = new SeRechargeProfile(); po.setRechargeAmount(Integer.parseInt(recharge_amount)); po.setSort(Integer.parseInt(sort)); this.seRechargeProfileDao.insert(po); } } /** * 保存水价 * @param price */ private void saveWaterPrice(String orgTag, String price) { if(price != null && !price.trim().equals("")) { PrWaterPrice po = new PrWaterPrice(); po.setPrice(Double.parseDouble(price)); po.setDeleted((byte)0); this.prWaterPriceDao.insert(po); } } /** * 保存字典 * @param orgTag * @param code * @param title * @param valueType * @return */ private void saveDicts(String orgTag, String code, String title, String valueType) { if((code != null && !code.trim().equals("")) && (title != null && !title.trim().equals("")) && (valueType != null && !valueType.trim().equals(""))) { BaDict po = new BaDict(); po.setCode(code); po.setTitle(title); po.setValueType(Byte.valueOf(valueType)); po.setHashCode("c4ca4238a0b923820dcc509a6f75849b"); po.setDeleted(0L); this.baDictDao.insert(po); } } /** * 保存字典项 * @param orgTag * @param dictCode * @param value * @param name * @param status * @param sort */ private void saveDictItems(String orgTag, String dictCode, String value, String name, String status, String sort) { if((dictCode != null && !dictCode.trim().equals("")) && (value != null && !value.trim().equals("")) && (name != null && !name.trim().equals("")) && (status != null && !status.trim().equals("")) && (sort != null && !sort.trim().equals(""))) { BaDictItem po = new BaDictItem(); po.setDictCode(dictCode); po.setValue(value); po.setName(name); po.setStatus(Byte.valueOf(status)); po.setSort(Integer.parseInt(sort)); po.setDeleted(0L); this.baDictItemDao.insert(po); } } /** * 保存工单任务类型 * @param orgTag * @param task_type */ private void saveTaskType(String orgTag, String task_type) { if(task_type != null && !task_type.trim().equals("")) { OpeTaskType po = new OpeTaskType(); po.setTaskType(task_type); po.setDeleted(0L); this.taskTypeDao.insert(po); } } }