当前位置:网站首页>(记录)异步并发,多线程处理表的统计
(记录)异步并发,多线程处理表的统计
2022-08-04 13:06:00 【Leo丶fei】
结果集对象
package com.huike.report.domain.vo;
import lombok.Data;
/**
* 首页基本数据VO对象
*/
@Data
public class IndexBaseInfoVO {
private Integer cluesNum=0; //线索数目
private Integer businessNum=0; //商机数目
private Integer contractNum=0; //合同数目
private Double salesAmount=0.0; //销售金额
}
安全工具类(获得登录用户信息)
package com.huike.common.utils;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import com.huike.common.constant.HttpStatus;
import com.huike.common.core.domain.model.LoginUser;
import com.huike.common.exception.CustomException;
/**
* 安全服务工具类
*
*
*/
public class SecurityUtils
{
/**
* 获取用户账户
**/
public static String getUsername()
{
try
{
return getLoginUser().getUsername();
}
catch (Exception e)
{
throw new CustomException("获取用户账户异常", HttpStatus.UNAUTHORIZED);
}
}
public static Long getUserId()
{
try
{
return getLoginUser().getUser().getUserId();
}
catch (Exception e)
{
throw new CustomException("获取用户账户异常", HttpStatus.UNAUTHORIZED);
}
}
public static Long getDeptId()
{
try
{
return getLoginUser().getUser().getDeptId();
}
catch (Exception e)
{
throw new CustomException("获取用户账户异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取用户
**/
public static LoginUser getLoginUser()
{
try
{
return (LoginUser) getAuthentication().getPrincipal();
}
catch (Exception e)
{
throw new CustomException("获取用户信息异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取Authentication
*/
public static Authentication getAuthentication()
{
return SecurityContextHolder.getContext().getAuthentication();
}
/**
* 生成BCryptPasswordEncoder密码
*
* @param password 密码
* @return 加密字符串
*/
public static String encryptPassword(String password)
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.encode(password);
}
/**
* 判断密码是否相同
*
* @param rawPassword 真实密码
* @param encodedPassword 加密后字符
* @return 结果
*/
public static boolean matchesPassword(String rawPassword, String encodedPassword)
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.matches(rawPassword, encodedPassword);
}
/**
* 是否为管理员
*
* @param userId 用户ID
* @return 结果
*/
public static boolean isAdmin(Long userId)
{
return userId != null && 1L == userId;
}
public static Long getAdmin()
{
return 1L;
}
}
引入一个utils
异步并发,多线程处理表的统计
/**
* 获取首页基本数据
* 异步的并发,多线程处理表的统计
* @param beginCreateTime
* @param endCreateTime
* @return
*/
@Override
public IndexBaseInfoVO getBaseInfo(String beginCreateTime, String endCreateTime) {
//1)构建一个空的结果集对象
IndexBaseInfoVO result = new IndexBaseInfoVO();
//封装结果集属性
// 2.1 由于查询需要用到用户名 调用工具类获取用户名
String username = SecurityUtils.getUsername();
try {
CompletableFuture<Integer> cluesNum=CompletableFuture.supplyAsync(()->{
//查询第一个属性 线索数量
return reportMpper.getCluesNum(beginCreateTime, endCreateTime, username);
});
CompletableFuture<Integer> businessNum=CompletableFuture.supplyAsync(()->{
//查询第一个属性 商机数量
return reportMpper.getBusinessNum(beginCreateTime, endCreateTime, username);
});
CompletableFuture<Integer> contractNum=CompletableFuture.supplyAsync(()->{
//查询第一个属性 合同数量
return reportMpper.getContractNum(beginCreateTime, endCreateTime, username);
});
CompletableFuture<Double> salesAmount=CompletableFuture.supplyAsync(()->{
//查询第一个属性,销售金额
return reportMpper.getSalesAmount(beginCreateTime, endCreateTime, username);
});
//join 等待所有线程全部执行完
CompletableFuture
.allOf(cluesNum,businessNum,contractNum,salesAmount)
.join();
//封装结果集对象
result.setCluesNum(cluesNum.get());
result.setBusinessNum(businessNum.get());
result.setContractNum(contractNum.get());
result.setSalesAmount(salesAmount.get());
} catch (Exception e) {
e.printStackTrace();
return null;
}
//4 返回结果集对象
return result;
}
边栏推荐
- 03 多线程与高并发 - ReentrantLock 源码解析
- router---dynamic route matching
- 用过Apifox这个API接口工具后,确实感觉postman有点鸡肋......
- Motion Rule (16)-Union Check Basic Questions-Relations
- 漏洞复现 - - - Alibaba Nacos权限认证绕过
- 荧光磷脂PEG衍生物之一磷脂-聚乙二醇-荧光素,Fluorescein-PEG-DSPE
- A discussion of integrated circuits
- Cockpit human-computer interaction "undercurrent", voice "down", multi-modal "up"
- Chinese valentine's day of young people crazy to make money, earn 140000 a week
- This article sorts out the development of the main models of NLP
猜你喜欢
CLS-PEG-DBCO,胆固醇-聚乙二醇-二苯基环辛炔,可用于改善循环时间
基于双层共识控制的直流微电网优化调度(Matlab代码实现)
SCA兼容性分析工具(ORACLE/MySQL/DB2---&gt;MogDB/openGauss/PostgreSQL)
Why is Luo Zhenyu's A-share dream so difficult to fulfill?
判断密码是否包含键盘连续字母
【解决方案 三十一】Navicat数据库结构同步
This article sorts out the development of the main models of NLP
【PHP实现微信公众平台开发—基础篇】第2章 微信公众账号及申请流程详解
“蔚来杯“2022牛客暑期多校训练营5 B、C、F、G、H、K
MySQL-数据类型
随机推荐
LeetCode 1403 非递增顺序的最小子序列[贪心] HERODING的LeetCode之路
RK1126编译gdb 板子上gdb调试程序
d不要直接用转串
双目立体视觉笔记(二)
Haproxy搭建web群集
Cows 树状数组
密码设置有关方法:不能相同字母,不能为连续字符
router---编程式导航
双目立体视觉笔记(三)三角测量、极线校正
Js获取当前页面url参数
MySQL性能指标TPS\QPS\IOPS如何压测?
一分钟认识 IndexedDB 数据库,太强大了!
"Lonely Walking on the Moon" is a powerful medicine, it can't cure the internal friction of happy twist
COMSOL空气反应 模型框架
5 cloud security management strategies enterprises should implement
CLS-PEG-DBCO,胆固醇-聚乙二醇-二苯基环辛炔,可用于改善循环时间
牛客网刷题记录 || 链表
未来已来,只是尚未流行
“蔚来杯“2022牛客暑期多校训练营3 C
router---动态路由匹配