package com.vci.web.service.impl; import com.vci.frameworkcore.compatibility.ISmFunctionQueryService; import com.vci.starter.web.enumpck.DataSecretEnum; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.properties.VciSessionProperties; import com.vci.starter.web.util.ApplicationContextProvider; import com.vci.web.properties.WebProperties; import com.vci.web.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * 初始化后的处理缓存的服务 * @author weidy * @date 2022-1-12 */ @Component public class WebInitServiceImpl { /** * 业务类型 */ @Autowired private OsBtmServiceI btmService; /** * 链接类型 */ @Autowired private OsLinkTypeServiceI linkTypeService; /** * UI */ @Autowired private UIEngineServiceI uiEngineService; /** * 菜单 */ @Autowired private ISmFunctionQueryService functionQueryService; /** * 密级服务 */ @Autowired private WebSecretServiceI webSecretService; /** * 状态的服务 */ @Autowired private OsStatusServiceI statusService; /** * 生命周期的服务 */ @Autowired private OsLifeCycleServiceI lifeCycleService; /** * 枚举的服务 */ @Autowired private OsEnumServiceI enumService; /** * 规则的服务 */ @Autowired private OsRevisionRuleServiceI revisionRuleService; /** * 属性的服务 */ @Autowired private OsAttributeServiceI attributeService; /** * 会话的信息 */ @Autowired(required = false) private VciSessionProperties sessionProperties; /** * web相关配置 */ @Autowired private WebProperties webProperties; /** * 业务类型的服务 */ @Autowired private WebBoServiceI boService; /** * 主服务是否在执行缓存 * @return true表示没有执行,执行中会抛出异常 */ public boolean checkMainServerUnCache(){ //看看主服务在执行刷新缓存没有 boolean finishInitCache = false; for(int i = 0 ; i < 10 ; i++){ if(boService.queryCountBySql("select count(*) from plcachetemp",new HashMap<>()) ==0){ finishInitCache = true; break; }else{ //说明主服务在执行 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } if(!finishInitCache){ throw new VciBaseException("暂时不能刷新,因为主服务还正在执行初始化缓存"); } return finishInitCache; } /** * 清除所有的缓存 */ public void clearAllCache(){ Map beans = ApplicationContextProvider.getApplicationContext().getBeansOfType(OsBaseServiceI.class); if(!CollectionUtils.isEmpty(beans)){ beans.forEach((name,bean)->{ bean.clearCache(); }); } } /** * 初始化服务端的缓存 * @throws Exception 查询的时候出现错误的时候 */ public void initServerCache(){ long currentTime = System.currentTimeMillis(); System.out.println("开始启动状态池的缓存,时间有点长,请耐心等待"); statusService.selectAllStatusMap(); System.out.println("状态池的刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新生命周期"); currentTime = System.currentTimeMillis(); lifeCycleService.selectAllLifeCycleMap(); System.out.println("生命周期刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新枚举"); currentTime = System.currentTimeMillis(); enumService.selectAllEnumMap(); System.out.println(DataSecretEnum.NONE.getValue()); System.out.println("枚举刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新版本规则"); currentTime = System.currentTimeMillis(); revisionRuleService.selectAllRevisionMap(); System.out.println("版本规则刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新属性"); currentTime = System.currentTimeMillis(); attributeService.selectAllAttributeMap(); System.out.println("属性刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新业务类型"); currentTime = System.currentTimeMillis(); btmService.selectAllBtmMap(); System.out.println("业务类型刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新链接类型"); currentTime = System.currentTimeMillis(); linkTypeService.selectAllLinkMap(); System.out.println("链接类型刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新UI上下文"); currentTime = System.currentTimeMillis(); if(webProperties.isCacheUIOnInit()) { uiEngineService.selectAllFormMap(); } uiEngineService.selectAllActionMap(); System.out.println("UI上下文刷新完成,耗时" + (System.currentTimeMillis()-currentTime) ); currentTime = System.currentTimeMillis(); functionQueryService.selectAllFunctionMap(); System.out.println("菜单刷新,耗时" + (System.currentTimeMillis()-currentTime) ); } }