package com.oppo.upgrade.publicSentiment.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSON;
import com.oppo.basic.heracles.client.core.spring.annotation.HeraclesDynamicConfig;
import com.oppo.upgrade.common.constant.ConstantConfig;
import com.oppo.upgrade.common.constant.EnduranceBoardConfig;
import com.oppo.upgrade.common.constant.MidasConstant;
import com.oppo.upgrade.common.enums.UpgradeErrorEnum;
import com.oppo.upgrade.common.exception.BusinessException;
import com.oppo.upgrade.common.util.*;
import com.oppo.upgrade.publicSentiment.entity.dto.EnduranceBoardDTO;
import com.oppo.upgrade.publicSentiment.entity.dto.NotworkIndexDTO;
import com.oppo.upgrade.publicSentiment.entity.vo.*;
import com.oppo.upgrade.publicSentiment.enums.*;
import com.oppo.upgrade.publicSentiment.service.NotworkIndexService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;
import java.util.*;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static com.oppo.upgrade.common.constant.MidasConstant.IMEI;
/**
* @author W9004879
*/
@Slf4j
@Service
public class NotworkIndexServiceImpl implements NotworkIndexService {
@HeraclesDynamicConfig(key = "notwork_index.class_forName", fileName = "application.yml")
private String classForName;
@HeraclesDynamicConfig(key = "notwork_index.url", fileName = "application.yml")
private String notworkIndexUrl;
@HeraclesDynamicConfig(key = "notwork_index.user", fileName = "application.yml")
private String notworkIndexUser;
@HeraclesDynamicConfig(key = "notwork_index.password", fileName = "application.yml")
private String notworkIndexPassword;
@HeraclesDynamicConfig(key = "notwork_index.class_forName_face", fileName = "application.yml")
private String classForNameFace;
@HeraclesDynamicConfig(key = "notwork_index.url_face", fileName = "application.yml")
private String notworkIndexUrlFace;
@HeraclesDynamicConfig(key = "notwork_index.user_face", fileName = "application.yml")
private String notworkIndexUserFace;
@HeraclesDynamicConfig(key = "notwork_index.password_face", fileName = "application.yml")
private String notworkIndexPasswordFace;
@HeraclesDynamicConfig(key = "notwork_index.class_forName_board", fileName = "application.yml")
private String classForNameBoard;
@HeraclesDynamicConfig(key = "notwork_index.url_board", fileName = "application.yml")
private String notworkIndexUrlBoard;
@HeraclesDynamicConfig(key = "notwork_index.user_board", fileName = "application.yml")
private String notworkIndexUserBoard;
@HeraclesDynamicConfig(key = "notwork_index.password_board", fileName = "application.yml")
private String notworkIndexPasswordBoard;
@HeraclesDynamicConfig(key = "notwork_index.imei_limit_size_board", fileName = "application.yml")
private String imeiLimitSize;
@HeraclesDynamicConfig(key = "notwork_index.initial_subsidence_imei_view_limit_size", fileName = "application.yml")
private String initialSubsidenceImeiViewLimitSize;
@HeraclesDynamicConfig(key = "notwork_index.board_view_top_num", fileName = "application.yml")
private String topNum;
private static final String A = "A";
private static final String B = "B";
private static final String C = "C";
private static final String D = "D";
private static final String DAY_NO = "dayNo";
private static final String MODEL = "model";
private static final String ANDROID_VERSION = "android_version";
private static final String ROM_VERSION = "rom_version";
private static final String NPS_SQL = "select imei from commercial_data.nps_question_new_label_test where 1=1";
private static final String SATISFY_SQL = "select imei from commercial_data.satisfy_all_label_huiduhou_test where 1=1";
/**
* 查询游戏网络数据
*
* @param notworkIndexDTO notworkIndexDTO
* @return 游戏网络数据
* @throws SQLException SQLException
*/
@Override
public List<GamingNetWorkVO> findGamingNetWorkIndex(NotworkIndexDTO notworkIndexDTO) throws SQLException {
return getGamingNetWorkResult(notworkIndexDTO);
}
public List<GamingNetWorkVO> getGamingNetWorkResult(NotworkIndexDTO notworkIndexDTO) throws SQLException {
log.info("开始连接clickHouse查询-->{}", classForName + notworkIndexUrl + notworkIndexUser + notworkIndexPassword);
Connection connection = getConnection();
assert connection != null;
Statement statement = connection.createStatement();
log.info("开始连接clickHouse查询成功");
// 处理游戏网络sql
NotworkSqlVO notworkSqlVO = handleGamingNetWorkSql(notworkIndexDTO);
log.info("查询CK库游戏网络明细数据查询sql打印-->" + JSON.toJSONString(notworkSqlVO.getGameNetworkDetailSql()));
log.info("查询CK库异常场景明细查询sql打印-->" + JSON.toJSONString(notworkSqlVO.getExceptionScenarioDetailSql()));
log.info("查询CK库游戏网络异常小区查询sql打印-->" + JSON.toJSONString(notworkSqlVO.getGameNetworkExceptionCellSql()));
// 执行游戏网络等sql,获取结果返回集
ResultSet gameNetworkDetailSqlResult = statement.executeQuery(notworkSqlVO.getGameNetworkDetailSql());
ResultSet exceptionScenarioDetailSqlResult = statement.executeQuery(notworkSqlVO.getExceptionScenarioDetailSql());
ResultSet gameNetworkExceptionCellSqlResult = statement.executeQuery(notworkSqlVO.getGameNetworkExceptionCellSql());
// 获取游戏网络明细数据结果列表
List<GamingNetWorkVO> gameNetworkDetailList = handleGameNetworkDetailSqlResult(gameNetworkDetailSqlResult);
log.info("查询CK库游戏网络明细数据查询结果打印-->" + JSON.toJSONString(gameNetworkDetailList));
// 获取异常场景明细结果列表
List<GamingNetWorkVO> exceptionScenarioDetailList = handleExceptionScenarioDetailSqlResult(exceptionScenarioDetailSqlResult);
log.info("查询CK库异常场景明细查询结果打印-->" + JSON.toJSONString(exceptionScenarioDetailList));
// 获取游戏网络异常小区结果列表
List<GamingNetWorkVO> networkExceptionCellList = handleGameNetworkExceptionCellSqlResult(gameNetworkExceptionCellSqlResult);
log.info("查询CK库游戏网络异常小区查询结果打印-->" + JSON.toJSONString(networkExceptionCellList));
// 获取游戏网络异常小区查询结果分组及组合拼接处理后的列表
List<GamingNetWorkVO> topNetworkExceptionCellList = handleNetworkExceptionCellList(networkExceptionCellList);
for (GamingNetWorkVO exceptionCellVO : topNetworkExceptionCellList) {
for (GamingNetWorkVO detailVO : gameNetworkDetailList) {
if (exceptionCellVO.getImeiRomVersionEventId().equals(detailVO.getImeiRomVersionEventId())) {
BeanUtil.copyPropertiesIgnoreNull(detailVO, exceptionCellVO);
Double sumCell = exceptionCellVO.getSumCell().doubleValue();
Double signal = detailVO.getSignal().doubleValue();
Double totalSub = detailVO.getTotalSub().doubleValue();
String exceptionCellRatio = Double.parseDouble(UpgradeStringUtil.formatNumber2XDecimal(sumCell / totalSub * 100, 2)) + "%";
spring个人心得888
需积分: 0 35 浏览量
更新于2023-03-22
收藏 613.42MB 7Z 举报
Spring框架是Java开发中的核心组件,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。本篇文章将深入探讨Spring框架的核心概念、主要功能以及在实际开发中的应用。
一、Spring框架概述
Spring框架由Rod Johnson在其著作《Expert One-on-One J2EE Design and Development》中首次提出,旨在解决J2EE开发中的复杂性问题。Spring不仅提供了IoC容器,还包含了数据访问、事务管理、Web应用、消息处理等模块,构建了一个全面的轻量级应用开发框架。
二、控制反转(IoC)
IoC是Spring的核心,它将对象的创建和依赖关系的维护从应用程序代码中分离出来,交给Spring容器来管理。开发者只需定义对象的配置,Spring会根据配置自动创建和装配对象。这种方式降低了对象间的耦合度,提高了代码的可测试性和可维护性。
三、面向切面编程(AOP)
AOP允许开发者定义“切面”,这些切面可以包含横切关注点,如日志、事务管理等。Spring AOP通过动态代理技术实现了这些切面的织入,使得代码更加模块化,减少了重复的代码。
四、Spring Bean容器
Bean容器是Spring的核心,它负责管理对象的生命周期和依赖关系。开发者通过XML或注解方式定义Bean的配置,容器根据配置创建Bean实例,并进行初始化、依赖注入等操作。
五、依赖注入(DI)
依赖注入是IoC的一种实现方式,它允许对象在运行时通过容器获取其依赖的对象,而不是在编译时硬编码。Spring支持构造器注入、设值注入和接口注入等多种方式,提高了代码的灵活性和可测试性。
六、Spring MVC
Spring MVC是Spring框架的一个模块,用于构建Web应用。它提供了模型-视图-控制器架构,将业务逻辑、数据展示和用户交互分离,简化了Web开发。Spring MVC通过DispatcherServlet接收请求,处理器映射器和处理器适配器负责找到合适的处理器,最后视图解析器将结果呈现给用户。
七、数据访问集成
Spring提供了对各种数据库的集成支持,包括JDBC、ORM框架如Hibernate、MyBatis等。它简化了事务管理,提供声明式事务处理,使开发者无需编写大量的事务管理代码。
八、Spring Boot
Spring Boot是Spring的最新发展,它简化了Spring应用的初始搭建和运行过程。Spring Boot通过默认配置和起步依赖,可以快速创建独立运行的应用。
九、Spring Security
Spring Security是Spring生态中的安全框架,提供了认证和授权功能,可以保护Web应用免受常见攻击。
十、Spring Cloud
Spring Cloud是基于Spring Boot的微服务开发工具集,它为开发分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)提供了工具。
通过以上对Spring框架的各个方面介绍,我们可以看到Spring的强大之处,它不仅简化了Java开发,还为各种复杂场景提供了完善的解决方案。在实际开发中,熟练掌握Spring的使用能够显著提升开发效率和代码质量。
薛定谔的小猫猫丶
- 粉丝: 0
- 资源: 4
最新资源
- java毕设项目之ssm线上旅行信息管理系统ssm+vue(完整前后端+说明文档+mysql+lw).zip
- 黑马最新Hive存储压缩以及Hive3性能优化PPT
- java毕设项目之ssm新生报到系统+jsp(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm小学生课外知识学习网站+vue(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm校园美食交流系统+vue(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm学生公寓管理中心系统的设计与实现+jsp(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm学校运动会信息管理系统+jsp(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm学生请假系统+jsp(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm医院门诊挂号系统+jsp(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm学院党员管理系统+jsp(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm亚盛汽车配件销售业绩管理统+jsp(完整前后端+说明文档+mysql+lw).zip
- 教师教学质量评价系统项目源代码全套技术资料.zip
- java毕设项目之ssm在线医疗服务系统+jsp(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm游戏攻略网站的设计与实现+vue(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm医院住院管理系统+vue(完整前后端+说明文档+mysql+lw).zip
- java毕设项目之ssm在线云音乐系统的设计与实现+jsp(完整前后端+说明文档+mysql+lw).zip