package com.qianwen.smartman.modules.cps.service.impl; import cn.hutool.core.io.IoUtil; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import java.io.File; import java.io.FileReader; import java.lang.invoke.SerializedLambda; import java.sql.Connection; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import javax.sql.DataSource; import org.apache.commons.io.FileUtils; import org.apache.ibatis.jdbc.ScriptRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.smartboot.license.client.License; import org.smartboot.license.client.LicenseEntity; import org.smartboot.license.client.LicenseException; import com.qianwen.smartman.common.constant.CommonConstant; import com.qianwen.smartman.common.constant.FmsConstant; import com.qianwen.smartman.common.utils.LicenseUtil; import com.qianwen.smartman.common.utils.MessageUtils; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.redis.cache.BladeRedis; import com.qianwen.core.tool.api.ResultCode; import com.qianwen.core.tool.utils.DigestUtil; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.modules.cps.enums.AppEnum; import com.qianwen.smartman.modules.cps.mapper.InitMapper; import com.qianwen.smartman.modules.cps.mapper.TdengineMapper; import com.qianwen.smartman.modules.cps.service.IInitBusinessService; import com.qianwen.smartman.modules.cps.service.IInitService; import com.qianwen.smartman.modules.cps.utils.FileUtil; import com.qianwen.smartman.modules.cps.vo.AppVO; import com.qianwen.smartman.modules.cps.vo.ConfigVO; import com.qianwen.smartman.modules.cps.vo.InitSettingVO; import com.qianwen.smartman.modules.system.dto.LicenseDetailDTO; import com.qianwen.smartman.modules.system.entity.Application; import com.qianwen.smartman.modules.system.service.IApplicationService; import com.qianwen.smartman.modules.visual.entity.VisualConfig; import com.qianwen.smartman.modules.visual.service.IVisualConfigService; import org.springframework.core.env.Environment; import org.springframework.core.io.ClassPathResource; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/cps/service/impl/InitServiceImpl.class */ public class InitServiceImpl implements IInitService { private static final Logger log = LoggerFactory.getLogger(InitServiceImpl.class); private final InitMapper initMapper; private final ConfigVO configVO; private final TdengineMapper tdengineMapper; private final DataSource dataSource; private final IInitBusinessService initBusinessService; private final BladeRedis bladeRedis; private final IVisualConfigService visualConfigService; private final IApplicationService applicationService; private final ThreadPoolTaskExecutor taskExecutor; private final Environment environment; public InitServiceImpl(final InitMapper initMapper, final ConfigVO configVO, final TdengineMapper tdengineMapper, final DataSource dataSource, final IInitBusinessService initBusinessService, final BladeRedis bladeRedis, final IVisualConfigService visualConfigService, final IApplicationService applicationService, final ThreadPoolTaskExecutor taskExecutor, final Environment environment) { this.initMapper = initMapper; this.configVO = configVO; this.tdengineMapper = tdengineMapper; this.dataSource = dataSource; this.initBusinessService = initBusinessService; this.bladeRedis = bladeRedis; this.visualConfigService = visualConfigService; this.applicationService = applicationService; this.taskExecutor = taskExecutor; this.environment = environment; } @Override // org.springblade.modules.cps.service.IInitService public Boolean checkIsNeedInit() { return Boolean.valueOf(this.initMapper.checkIsNeedInit(this.configVO.getDatabase(), this.configVO.getType()).intValue() <= 0); } @Override // org.springblade.modules.cps.service.IInitService public ConfigVO getConfig() { return this.configVO; } @Override // org.springblade.modules.cps.service.IInitService public List getApp() { List result = new ArrayList<>(); AppEnum[] values = AppEnum.values(); LicenseDetailDTO detailDTO = licenseDetail(); if (detailDTO == null) { return result; } List modules = detailDTO.getModules(); for (AppEnum value : values) { if (modules.contains(value.getCode())) { result.add(AppVO.builder().code(value.getCode()).desc(value.getDesc()).build()); } } return result; } @Override // org.springblade.modules.cps.service.IInitService @Transactional(rollbackFor = {Exception.class}) public Boolean initSystem(InitSettingVO initSettingVO) { try { if (!initSettingVO.getPassword().equals(initSettingVO.getConfirmPassword())) { throw new ServiceException(MessageUtils.message("init.system.inconsistent.password", new Object[0])); } initSettingVO.setPassword(DigestUtil.encrypt(initSettingVO.getPassword())); Connection conn = this.dataSource.getConnection(); ScriptRunner runner = new ScriptRunner(conn); runner.setStopOnError(true); File file = new File(System.getProperty("java.io.tmpdir") + File.separator + "common.sql"); FileUtils.copyToFile(new ClassPathResource("sql" + File.separator + this.configVO.getType() + File.separator + "common.sql").getInputStream(), file); runner.runScript(new FileReader(file)); FileUtils.copyToFile(new ClassPathResource("sql" + File.separator + this.configVO.getType() + File.separator + "xxl_job.sql").getInputStream(), file); runner.runScript(new FileReader(file)); List appIds = initSettingVO.getAppList().stream().sorted().collect(Collectors.toList()); for (Integer appId : appIds) { Future asyncResult = this.taskExecutor.submit(() -> { try { this.initBusinessService.initApp(appId, this.configVO); } catch (Exception e) { throw new ServiceException(e.getMessage()); } }); while (!asyncResult.isDone()) { TimeUnit.NANOSECONDS.sleep(2L); } } initAdapter(initSettingVO, this.configVO.getUrl(), this.configVO.getType()); replaceJumuUrl(); this.initMapper.replaceUrlJiMu(initSettingVO); if (CommonConstant.ORACLE.equals(this.configVO.getType()) && Func.isNotEmpty(initSettingVO.getAppList()) && initSettingVO.getAppList().contains(AppEnum.VISUAL.getCode())) { try { VisualConfig visualConfig = new VisualConfig(); visualConfig.setId(1510135236368261122L); visualConfig.setVisualId(1510135236343095298L); visualConfig.setDetail(FileUtil.getFileString(new ClassPathResource("constant" + File.separator + "VisualDetail.txt"))); visualConfig.setComponent(FileUtil.getFileString(new ClassPathResource("constant" + File.separator + "VisualComponent.txt"))); this.visualConfigService.save(visualConfig); } catch (Exception e) { throw new ServiceException(e.getMessage()); } } IoUtil.close(conn); return true; }catch(Exception ex) { log.error("初始化系统失败",ex); throw new ServiceException(ResultCode.FAILURE,ex); } } @Override // org.springblade.modules.cps.service.IInitService public Boolean init(InitSettingVO initSettingVO) { if (!checkIsNeedInit().booleanValue()) { throw new ServiceException(MessageUtils.message("system.has.been.initialized", new Object[0])); } RedisConnection redisConnection = this.bladeRedis.getRedisTemplate().getRequiredConnectionFactory().getConnection(); redisConnection.flushAll(); redisConnection.close(); initSystem(initSettingVO); this.tdengineMapper.dropTdengine(); this.tdengineMapper.initTdengine(); this.tdengineMapper.initTdengineSuperState(); this.tdengineMapper.initTdengineSuperJsonCollect(); this.tdengineMapper.initTdengineSuperAlarm(); this.tdengineMapper.initTdengineSuperOutput(); this.tdengineMapper.initTdengineSuperAggregateaOutput(); this.tdengineMapper.initTdengineSuperAggregateaState(); this.tdengineMapper.initTdengineSuperCollectData(); this.tdengineMapper.initTdengineDmpLogSignal(); this.tdengineMapper.initTdengineDmpLogSignalFlow(); this.tdengineMapper.initTdengineDmpLogMethodTime(); this.tdengineMapper.initTdengineSuperAggregateStateWithFeedback(); this.tdengineMapper.initTdengineCountPulseData(); LicenseUtil.setEncryptCode("000000", LicenseUtil.getLicenseMap().get("000000")); if (Func.isNotEmpty(initSettingVO.getApplicationList())) { Collection applicationCodes = initSettingVO.getApplicationList().keySet(); List list = new ArrayList<>(); list.addAll(applicationCodes); list.add("HMI"); this.applicationService.remove(Wrappers.lambdaQuery().notIn(Application::getCode, list)); /* this.applicationService.remove((Wrapper) Wrappers.lambdaQuery().notIn((v0) -> { return v0.getCode(); }, list)); Application::getDomainUrl */ initSettingVO.getApplicationList().forEach((k, v) -> { this.applicationService.update(Wrappers.lambdaUpdate().set(Application::getDomainUrl, v).eq(Application::getCode, k)); }); } System.setProperty("blade.system.need_init", FmsConstant.MANUAL); return true; } @Override // org.springblade.modules.cps.service.IInitService public LicenseDetailDTO licenseDetail() { try { Boolean needInit = checkIsNeedInit(); String text = needInit.booleanValue() ? LicenseUtil.getLicenseMap().get("000000") : LicenseUtil.getEncryptCode("000000"); if (StringUtils.isEmpty(text)) { return null; } LicenseEntity licenseEntity = new License().loadLicense(text); return (LicenseDetailDTO) JSONObject.parseObject(new String(licenseEntity.getData()), LicenseDetailDTO.class); } catch (LicenseException e) { return null; } } private void initAdapter(InitSettingVO initSettingVO, String url, String type) { if (Func.equals(CommonConstant.ORACLE, getConfig().getType())) { this.initMapper.initBladeUser(initSettingVO, this.configVO.getUrl(), this.configVO.getType()); this.initMapper.initBladeOss(initSettingVO, this.configVO.getUrl(), this.configVO.getType()); this.initMapper.initBladeDept(initSettingVO, this.configVO.getUrl(), this.configVO.getType()); this.initMapper.initBladeTenant(initSettingVO, this.configVO.getUrl(), this.configVO.getType()); this.initMapper.initBladeCommonGroup(initSettingVO, this.configVO.getUrl(), this.configVO.getType()); this.initMapper.initBladeMenuVision(initSettingVO, this.configVO.getUrl(), this.configVO.getType()); this.initMapper.initBladeMenuVision2(initSettingVO, this.configVO.getUrl(), this.configVO.getType()); this.initMapper.initBladeMenuTask(initSettingVO, this.configVO.getUrl(), this.configVO.getType()); this.initMapper.initBladeParam(initSettingVO, this.configVO.getUrl(), this.configVO.getType()); return; } this.initMapper.init(initSettingVO, url, type); } private void replaceJumuUrl() { this.initMapper.initBladeReport("http://127.0.0.1:" + this.environment.getProperty("local.server.port")); } }