Merge remote-tracking branch 'origin/master'
# Conflicts: # pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/user/impl/UserReportNormalServiceImpl.java
This commit is contained in:
@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.nimbusds.jose.jwk.JWKSet;
|
||||
import com.nimbusds.jose.jwk.RSAKey;
|
||||
import com.njcn.auth.service.UserTokenService;
|
||||
import com.njcn.auth.utils.AuthPubUtil;
|
||||
import com.njcn.common.pojo.annotation.OperateInfo;
|
||||
import com.njcn.common.pojo.constant.OperateType;
|
||||
import com.njcn.common.pojo.constant.SecurityConstants;
|
||||
@@ -47,6 +48,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author hongawen
|
||||
@@ -73,7 +75,7 @@ public class AuthController extends BaseController {
|
||||
|
||||
|
||||
@ApiIgnore
|
||||
@OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.AUTHENTICATE)
|
||||
@OperateInfo(info = LogEnum.SYSTEM_SERIOUS, operateType = OperateType.AUTHENTICATE)
|
||||
@ApiOperation("登录认证")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = SecurityConstants.GRANT_TYPE, defaultValue = "password", value = "授权模式", required = true),
|
||||
@@ -90,14 +92,7 @@ public class AuthController extends BaseController {
|
||||
public Object postAccessToken(@ApiIgnore Principal principal, @RequestParam @ApiIgnore Map<String, String> parameters) throws HttpRequestMethodNotSupportedException {
|
||||
String methodDescribe = getMethodDescribe("postAccessToken");
|
||||
String username = parameters.get(SecurityConstants.USERNAME);
|
||||
UserStrategy data = passWordRuleFeugnClient.getUserStrategy().getData();
|
||||
|
||||
String onlineUserKey = SecurityConstants.TOKEN_ONLINE_PREFIX;
|
||||
List<UserTokenInfo> onLineUser = (List<UserTokenInfo>) redisUtil.getLikeListAllValues(onlineUserKey);
|
||||
Integer maxNum = data.getMaxNum();
|
||||
if((CollectionUtil.isNotEmpty(onLineUser)?onLineUser.size():0)>=maxNum){
|
||||
throw new BusinessException(UserResponseEnum.LOGIN_USER_OVERLIMIT);
|
||||
}
|
||||
|
||||
String grantType = parameters.get(SecurityConstants.GRANT_TYPE);
|
||||
if (grantType.equalsIgnoreCase(SecurityConstants.GRANT_CAPTCHA) || grantType.equalsIgnoreCase(SecurityConstants.REFRESH_TOKEN_KEY)) {
|
||||
@@ -106,6 +101,24 @@ public class AuthController extends BaseController {
|
||||
//短信方式登录,将手机号赋值为用户名
|
||||
username = parameters.get(SecurityConstants.PHONE);
|
||||
}
|
||||
|
||||
UserStrategy data = passWordRuleFeugnClient.getUserStrategy().getData();
|
||||
String onlineUserKey = SecurityConstants.TOKEN_ONLINE_PREFIX;
|
||||
List<UserTokenInfo> onLineUser = (List<UserTokenInfo>) redisUtil.getLikeListAllValues(onlineUserKey);
|
||||
if(CollectionUtil.isNotEmpty(onLineUser)){
|
||||
String finalUsername = username;
|
||||
onLineUser = onLineUser.stream().filter(item->{
|
||||
String login = AuthPubUtil.getLoginByToken(item.getRefreshToken());
|
||||
return !login.equals(finalUsername);
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
Integer maxNum = data.getMaxNum();
|
||||
if((CollectionUtil.isNotEmpty(onLineUser)?onLineUser.size():0)>=maxNum){
|
||||
throw new BusinessException(UserResponseEnum.LOGIN_USER_OVERLIMIT);
|
||||
}
|
||||
|
||||
|
||||
if (grantType.equalsIgnoreCase(SecurityConstants.REFRESH_TOKEN_KEY)) {
|
||||
//如果是刷新token,需要去黑名单校验
|
||||
userTokenService.judgeRefreshToken(parameters.get(SecurityConstants.REFRESH_TOKEN_KEY));
|
||||
@@ -125,6 +138,7 @@ public class AuthController extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
@OperateInfo(info = LogEnum.SYSTEM_SERIOUS, operateType = OperateType.LOGOUT)
|
||||
@ApiOperation("用户登出系统")
|
||||
@DeleteMapping("/logout")
|
||||
public HttpResult<Object> logout() {
|
||||
|
||||
@@ -104,8 +104,8 @@ public class UserTokenService {
|
||||
redisUtil.saveByKeyWithExpire(onlineUserKey, userTokenInfo, refreshLifeTime.plusMinutes(5L).toEpochSecond(ZoneOffset.of("+8")) - LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")));
|
||||
|
||||
//记录成功登录后的信息
|
||||
LogInfoDTO logInfoDTO = new LogInfoDTO(loginName, nickName, ip, "登录认证", OperateType.AUTHENTICATE, 1, "", 0, 1, generalInfo.getMicroServiceName(), userIndex,LocalDateTime.now());
|
||||
publisher.send("/userLog", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
//LogInfoDTO logInfoDTO = new LogInfoDTO(loginName, nickName, ip, "登录认证", OperateType.AUTHENTICATE, 1, "", 0, 1, generalInfo.getMicroServiceName(), userIndex,LocalDateTime.now());
|
||||
//publisher.send("/userLog", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package com.njcn.auth.utils;
|
||||
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import okhttp3.*;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.nimbusds.jose.JWSObject;
|
||||
import com.njcn.common.pojo.constant.SecurityConstants;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -28,4 +31,13 @@ public class AuthPubUtil {
|
||||
return String.join("", textList);
|
||||
}
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
public static String getLoginByToken(String token){
|
||||
JWSObject jwsObject = JWSObject.parse(token);
|
||||
String payload = jwsObject.getPayload().toString();
|
||||
JSONObject jsonObject = JSONUtil.parseObj(payload);
|
||||
return jsonObject.getStr(SecurityConstants.USER_NAME_KEY);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -84,10 +84,12 @@ public class LogServiceImpl implements ILogService {
|
||||
publisher.send("/userLog", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
//推送审计消息功能
|
||||
if(severity!=0){
|
||||
if(!logInfoDTO.getLoginName().equals(LogInfo.UNKNOWN_USER)){
|
||||
publisher.send("/userLogPush", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
//发送邮箱功能
|
||||
if(severity==2&&logInfoDTO.getResult()==0){
|
||||
publisher.send("/userLogEmailPush", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
//publisher.send("/userLogEmailPush", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
//如果存在设备日志注解,则记录设备日志
|
||||
@@ -167,10 +169,12 @@ public class LogServiceImpl implements ILogService {
|
||||
private void auditPush(Integer severity, LogInfoDTO logInfoDTO) {
|
||||
//推送审计消息功能
|
||||
if(severity !=0){
|
||||
if(!logInfoDTO.getLoginName().equals(LogInfo.UNKNOWN_USER)) {
|
||||
publisher.send("/userLogPush", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
//发送邮箱功能
|
||||
if (severity == 2 && logInfoDTO.getResult() == 0) {
|
||||
publisher.send("/userLogEmailPush", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
//publisher.send("/userLogEmailPush", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
device.com_flag comFlag,
|
||||
1 as lineType,
|
||||
0 as type,
|
||||
lineDetail.monitor_flag as isUpToGrid
|
||||
lineDetail.monitor_flag as isUpToGrid,
|
||||
point.name pointName
|
||||
</if>
|
||||
<!--母线-->
|
||||
<if test="type == 2">
|
||||
|
||||
@@ -3,10 +3,17 @@ package com.njcn.gateway.config;
|
||||
import cn.hutool.core.codec.Base64;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.alibaba.nacos.shaded.com.google.gson.JsonObject;
|
||||
import com.github.tocrhz.mqtt.publisher.MqttPublisher;
|
||||
import com.njcn.common.pojo.constant.LogInfo;
|
||||
import com.njcn.common.pojo.constant.SecurityConstants;
|
||||
import com.njcn.common.pojo.dto.LogInfoDTO;
|
||||
import com.njcn.common.utils.PubUtils;
|
||||
import com.njcn.gateway.enums.GateWayEnum;
|
||||
import com.njcn.gateway.security.AuthorizationManager;
|
||||
import com.njcn.gateway.utils.ResponseUtils;
|
||||
import com.njcn.gateway.utils.WebFluxRequestUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -14,6 +21,7 @@ import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||
import org.springframework.security.authentication.AbstractAuthenticationToken;
|
||||
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
|
||||
import org.springframework.security.config.web.server.ServerHttpSecurity;
|
||||
@@ -30,6 +38,8 @@ import java.io.InputStream;
|
||||
import java.security.KeyFactory;
|
||||
import java.security.interfaces.RSAPublicKey;
|
||||
import java.security.spec.X509EncodedKeySpec;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author hongawen
|
||||
@@ -44,6 +54,8 @@ public class ResourceServerConfig {
|
||||
|
||||
private final WhiteListConfig whiteListConfig;
|
||||
|
||||
private final MqttPublisher publisher;
|
||||
|
||||
@Bean
|
||||
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
|
||||
|
||||
@@ -75,7 +87,31 @@ public class ResourceServerConfig {
|
||||
@Bean
|
||||
ServerAccessDeniedHandler accessDeniedHandler() {
|
||||
return (exchange, denied) -> Mono.defer(() -> Mono.just(exchange.getResponse()))
|
||||
.flatMap(response -> ResponseUtils.writeErrorInfo(response, GateWayEnum.NO_AUTHORIZATION));
|
||||
.flatMap(response -> {
|
||||
ServerHttpRequest request = exchange.getRequest();
|
||||
JSONObject jsonObject = WebFluxRequestUtil.getJwtPayload(request);
|
||||
String loginName = jsonObject.get("user_name").toString();
|
||||
String userName = jsonObject.get("nickname").toString();
|
||||
String userIndex = jsonObject.get("userIndex").toString();
|
||||
String ip = WebFluxRequestUtil.getRealIp(request);
|
||||
LogInfoDTO logInfoDTO = new LogInfoDTO(
|
||||
loginName,
|
||||
userName,
|
||||
ip,
|
||||
"越权访问",
|
||||
"越权访问",
|
||||
0,
|
||||
"当前用户无该接口访问权限:"+request.getPath().toString(),
|
||||
2,
|
||||
1,
|
||||
"",
|
||||
userIndex,
|
||||
LocalDateTime.now()
|
||||
);
|
||||
publisher.send("/userLog", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
publisher.send("/userLogPush", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
return ResponseUtils.writeErrorInfo(response, GateWayEnum.NO_AUTHORIZATION);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -84,7 +120,30 @@ public class ResourceServerConfig {
|
||||
@Bean
|
||||
ServerAuthenticationEntryPoint authenticationEntryPoint() {
|
||||
return (exchange, e) -> Mono.defer(() -> Mono.just(exchange.getResponse()))
|
||||
.flatMap(response -> ResponseUtils.writeErrorInfo(response, GateWayEnum.ACCESS_TOKEN_EXPIRE_JWT));
|
||||
.flatMap(response -> {
|
||||
ServerHttpRequest request = exchange.getRequest();
|
||||
JSONObject jsonObject = WebFluxRequestUtil.getJwtPayload(request);
|
||||
if(Objects.isNull(jsonObject)){
|
||||
String ip = WebFluxRequestUtil.getRealIp(request);
|
||||
LogInfoDTO logInfoDTO = new LogInfoDTO(
|
||||
ip,
|
||||
ip,
|
||||
ip,
|
||||
"越权访问",
|
||||
"越权访问",
|
||||
0,
|
||||
"异常token访问:"+request.getPath().toString(),
|
||||
2,
|
||||
1,
|
||||
"",
|
||||
ip,
|
||||
LocalDateTime.now()
|
||||
);
|
||||
publisher.send("/userLog", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
publisher.send("/userLogPush", PubUtils.obj2json(logInfoDTO), 2, false);
|
||||
}
|
||||
return ResponseUtils.writeErrorInfo(response, GateWayEnum.ACCESS_TOKEN_EXPIRE_JWT);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.njcn.gateway.utils;
|
||||
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.nimbusds.jose.JWSObject;
|
||||
import com.njcn.common.pojo.constant.LogInfo;
|
||||
import com.njcn.common.pojo.constant.SecurityConstants;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.logging.log4j.util.Strings;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||
|
||||
|
||||
@Slf4j
|
||||
public class WebFluxRequestUtil {
|
||||
|
||||
/**
|
||||
* HttpServletRequest获取头中存储的IP地址
|
||||
*/
|
||||
public static String getRealIp(ServerHttpRequest request) {
|
||||
String ip = request.getURI().getHost();
|
||||
return StrUtil.isBlank(ip) ? LogInfo.UNKNOWN_IP : ip;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* ServerHttpRequest获取在网关中存储的用户token元信息
|
||||
*/
|
||||
public static JSONObject getJwtPayload(ServerHttpRequest request) {
|
||||
JSONObject jsonObject = null;
|
||||
HttpHeaders headers = request.getHeaders();
|
||||
try {
|
||||
if (CollectionUtil.isNotEmpty(headers.get("authorization"))) {
|
||||
String token = headers.get("authorization").get(0);
|
||||
token = token.replace(SecurityConstants.AUTHORIZATION_PREFIX, Strings.EMPTY);
|
||||
JWSObject jwsObject = JWSObject.parse(token);
|
||||
String payload = jwsObject.getPayload().toString();
|
||||
jsonObject = JSONUtil.parseObj(payload);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("解码网关中心传递的请求头中内容异常,异常为:{}", e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
return jsonObject;
|
||||
}
|
||||
}
|
||||
@@ -224,20 +224,20 @@ whitelist:
|
||||
- /system-boot/dictType/dictDataCache
|
||||
- /system-boot/file/**
|
||||
- /system-boot/area/**
|
||||
- /advance-boot/**
|
||||
- /device-boot/**
|
||||
#- /advance-boot/**
|
||||
#- /device-boot/**
|
||||
#- /system-boot/**
|
||||
#- /harmonic-boot/**
|
||||
#- /energy-boot/**
|
||||
#- /event-boot/**
|
||||
#- /quality-boot/**
|
||||
#- /harmonic-prepare/**
|
||||
- /process-boot/**
|
||||
- /bpm-boot/**
|
||||
- /system-boot/**
|
||||
- /supervision-boot/**
|
||||
- /user-boot/**
|
||||
- /harmonic-boot/**
|
||||
#- /process-boot/**
|
||||
#- /bpm-boot/**
|
||||
#- /system-boot/**
|
||||
#- /supervision-boot/**
|
||||
#- /user-boot/**
|
||||
#- /harmonic-boot/**
|
||||
- /user-boot/user/listAllUserByDeptId
|
||||
- /IndexAnalysis/**
|
||||
mqtt:
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.njcn.harmonic.pojo.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author xy
|
||||
*/
|
||||
@Data
|
||||
public class SubstationVo {
|
||||
|
||||
@ApiModelProperty("部门名称")
|
||||
private String deptName;
|
||||
|
||||
@ApiModelProperty("变电站名称")
|
||||
private String substationName;
|
||||
|
||||
@ApiModelProperty("电网侧监测点名称")
|
||||
private List<String> dwLineList;
|
||||
|
||||
@ApiModelProperty("非电网侧监测点名称")
|
||||
private List<String> yhLineList;
|
||||
|
||||
@ApiModelProperty("告警频次")
|
||||
private Double alarmFreq;
|
||||
|
||||
@ApiModelProperty("谐波电压污染告警值")
|
||||
private Double vPollutionData;
|
||||
|
||||
@ApiModelProperty("谐波电流污染值")
|
||||
private Double iPollutionData;
|
||||
|
||||
}
|
||||
@@ -8,22 +8,23 @@ import com.njcn.common.utils.HttpResultUtil;
|
||||
import com.njcn.common.utils.LogUtil;
|
||||
import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
|
||||
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
|
||||
import com.njcn.device.pq.pojo.param.GridDiagramParam;
|
||||
import com.njcn.device.pq.pojo.param.RunManageParam;
|
||||
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
|
||||
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
|
||||
import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
|
||||
import com.njcn.harmonic.pojo.vo.PollutionVO;
|
||||
import com.njcn.harmonic.pojo.vo.SubstationVo;
|
||||
import com.njcn.harmonic.service.PollutionSubstationService;
|
||||
import com.njcn.web.controller.BaseController;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -100,4 +101,21 @@ public class PollutionSubstationController extends BaseController {
|
||||
List<PollutionLineDTO> list = pollutionSubstationService.getLineRankTop10(param);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
|
||||
}
|
||||
|
||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||
@PostMapping("/substationInfo")
|
||||
@ApiOperation("变电站台账信息(包含稳态数据统计)")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "deptIndex", value = "部门id"),
|
||||
@ApiImplicitParam(name = "searchValue", value = "搜索值"),
|
||||
@ApiImplicitParam(name = "startTime", value = "开始时间"),
|
||||
@ApiImplicitParam(name = "endTime", value = "结束时间")
|
||||
})
|
||||
public HttpResult<List<SubstationVo>> getSubstationInfo(@RequestParam(value = "deptIndex") String deptIndex, @RequestParam(value = "searchValue") String searchValue, @RequestParam(value = "startTime") String startTime, @RequestParam(value = "endTime") String endTime) {
|
||||
String methodDescribe = getMethodDescribe("getSubstationInfo");
|
||||
LogUtil.njcnDebug(log, "{},实体参数:{},{}", methodDescribe, deptIndex, searchValue);
|
||||
List<SubstationVo> list = pollutionSubstationService.getSubstationInfo(deptIndex,searchValue,startTime,endTime);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -62,4 +62,15 @@ public interface RStatLimitRateDMapper extends BaseMapper<RStatLimitRateDPO> {
|
||||
List<RStatLimitRateDPO> getAssessTargetRate( @Param("ids") List<String> list,
|
||||
@Param("statTime") String startTime,
|
||||
@Param("endTime") String endTime);
|
||||
|
||||
/**
|
||||
* 获取监测点的超标次数
|
||||
* @param list
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
* @return
|
||||
*/
|
||||
List<RStatLimitRateDPO> getAllOverTimes( @Param("ids") List<String> list,
|
||||
@Param("statTime") String startTime,
|
||||
@Param("endTime") String endTime);
|
||||
}
|
||||
|
||||
@@ -329,4 +329,32 @@
|
||||
group by
|
||||
my_index
|
||||
</select>
|
||||
|
||||
<select id="getAllOverTimes" resultType="com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO">
|
||||
select
|
||||
my_index as lineId,
|
||||
SUM(freq_dev_overtime
|
||||
+ flicker_overtime
|
||||
+ voltage_dev_overtime
|
||||
+ ubalance_overtime
|
||||
+ uaberrance_overtime
|
||||
+ i_neg_overtime
|
||||
+ uharm_2_overtime + uharm_3_overtime + uharm_4_overtime + uharm_5_overtime + uharm_6_overtime + uharm_7_overtime + uharm_8_overtime + uharm_9_overtime + uharm_10_overtime + uharm_11_overtime + uharm_12_overtime + uharm_13_overtime + uharm_14_overtime + uharm_15_overtime + uharm_16_overtime + uharm_17_overtime + uharm_18_overtime + uharm_19_overtime + uharm_20_overtime + uharm_21_overtime + uharm_22_overtime + uharm_23_overtime + uharm_24_overtime + uharm_25_overtime
|
||||
+ iharm_2_overtime + iharm_3_overtime + iharm_4_overtime + iharm_5_overtime + iharm_6_overtime + iharm_7_overtime + iharm_8_overtime + iharm_9_overtime + iharm_10_overtime + iharm_11_overtime + iharm_12_overtime + iharm_13_overtime + iharm_14_overtime + iharm_15_overtime + iharm_16_overtime + iharm_17_overtime + iharm_18_overtime + iharm_19_overtime + iharm_20_overtime + iharm_21_overtime + iharm_22_overtime + iharm_23_overtime + iharm_24_overtime + iharm_25_overtime
|
||||
+ inuharm_1_overtime + inuharm_2_overtime + inuharm_3_overtime + inuharm_4_overtime + inuharm_5_overtime + inuharm_6_overtime + inuharm_7_overtime + inuharm_8_overtime + inuharm_9_overtime + inuharm_10_overtime + inuharm_11_overtime + inuharm_12_overtime + inuharm_13_overtime + inuharm_14_overtime + inuharm_15_overtime + inuharm_16_overtime
|
||||
) as allTime
|
||||
from
|
||||
`r_stat_limit_rate_d`
|
||||
<where>
|
||||
and time_id between #{startTime} and #{endTime}
|
||||
<if test=" ids != null and ids.size > 0">
|
||||
AND my_index IN
|
||||
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'>
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
</where>
|
||||
group by
|
||||
my_index
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.njcn.device.pq.pojo.dto.PollutionGridDiagramDTO;
|
||||
import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
|
||||
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
|
||||
import com.njcn.device.pq.pojo.param.GridDiagramParam;
|
||||
import com.njcn.device.pq.pojo.param.RunManageParam;
|
||||
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
|
||||
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
|
||||
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
|
||||
@@ -13,6 +14,8 @@ import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
|
||||
import com.njcn.harmonic.pojo.po.RStatPollutionSubstationM;
|
||||
import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
|
||||
import com.njcn.harmonic.pojo.vo.PollutionVO;
|
||||
import com.njcn.harmonic.pojo.vo.SubstationVo;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.List;
|
||||
/**
|
||||
@@ -85,4 +88,5 @@ public interface PollutionSubstationService extends IService<RStatPollutionSubst
|
||||
|
||||
List<List<String>> getPollutionAlarmList(GridDiagramParam param);
|
||||
|
||||
List<SubstationVo> getSubstationInfo(String deptIndex, String searchValue, String startTime, String endTime);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.njcn.harmonic.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
@@ -15,7 +14,9 @@ import com.njcn.common.pojo.constant.BizParamConstant;
|
||||
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
|
||||
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||
import com.njcn.device.biz.pojo.dto.DeptGetSubStationDTO;
|
||||
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
|
||||
import com.njcn.device.biz.pojo.dto.SubGetBase;
|
||||
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
|
||||
import com.njcn.device.pms.api.MonitorClient;
|
||||
@@ -31,6 +32,7 @@ import com.njcn.device.pq.api.LineFeignClient;
|
||||
import com.njcn.device.pq.api.SubstationFeignClient;
|
||||
import com.njcn.device.pq.pojo.dto.*;
|
||||
import com.njcn.device.pq.pojo.param.GridDiagramParam;
|
||||
import com.njcn.device.pq.pojo.po.LineDetail;
|
||||
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
|
||||
import com.njcn.harmonic.constant.Param;
|
||||
import com.njcn.harmonic.mapper.*;
|
||||
@@ -39,14 +41,15 @@ import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
|
||||
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
|
||||
import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
|
||||
import com.njcn.harmonic.pojo.po.*;
|
||||
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
|
||||
import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
|
||||
import com.njcn.harmonic.pojo.vo.PollutionVO;
|
||||
import com.njcn.harmonic.pojo.vo.SubstationVo;
|
||||
import com.njcn.harmonic.service.PollutionSubstationService;
|
||||
import com.njcn.system.api.DicDataFeignClient;
|
||||
import com.njcn.system.enums.DicDataEnum;
|
||||
import com.njcn.user.api.DeptFeignClient;
|
||||
import com.njcn.user.pojo.po.Dept;
|
||||
import com.njcn.web.factory.PageFactory;
|
||||
import com.njcn.web.utils.RequestUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -58,7 +61,9 @@ import org.springframework.util.CollectionUtils;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -105,7 +110,7 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
|
||||
|
||||
private final CommTerminalGeneralClient commTerminalGeneralClient;
|
||||
private final DicDataFeignClient dicDataFeignClient;
|
||||
|
||||
private final RStatLimitRateDMapper rStatLimitRateDMapper;
|
||||
|
||||
/**
|
||||
* @param pollutionSubstationQuryParam
|
||||
@@ -804,6 +809,64 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
|
||||
return info;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SubstationVo> getSubstationInfo(String deptIndex, String searchValue, String startTime, String endTime) {
|
||||
List<SubstationVo> result = new ArrayList<>();
|
||||
|
||||
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
|
||||
deptGetLineParam.setDeptId(deptIndex);
|
||||
deptGetLineParam.setLineRunFlag(0);
|
||||
List<DeptGetChildrenMoreDTO> list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
|
||||
//获取监测点集合
|
||||
Map<String,List<String>> lineMap = this.getLineMap(list, searchValue);
|
||||
List<String> lineList = lineMap.values().stream()
|
||||
.flatMap(List::stream)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(lineList)){
|
||||
//获取监测点的超标数据
|
||||
List<RStatLimitRateDPO> limitRateList = rStatLimitRateDMapper.getAllOverTimes(lineList,startTime,endTime);
|
||||
Map<String, RStatLimitRateDPO> monitorMap = limitRateList.stream().collect(Collectors.toMap(RStatLimitRateDPO::getLineId, Function.identity()));
|
||||
//todo 获取监测点污染数据
|
||||
|
||||
//获取监测点详细信息
|
||||
List<LineDetail> lineDetailList = lineFeignClient.getLineDetail(lineList).getData();
|
||||
Map<String,List<LineDetail>> lineDetailMap = lineDetailList.stream().collect(Collectors.groupingBy(LineDetail::getPowerSubstationName));
|
||||
lineDetailMap.forEach((k,v)->{
|
||||
AtomicInteger alarmTime = new AtomicInteger();
|
||||
SubstationVo vo = new SubstationVo();
|
||||
vo.setDeptName("");
|
||||
vo.setSubstationName(k);
|
||||
vo.setDwLineList(v.stream().filter(t->Objects.equals(t.getPowerFlag(),0)).map(LineDetail::getId).collect(Collectors.toList()));
|
||||
vo.setYhLineList(v.stream().filter(t->Objects.equals(t.getPowerFlag(),1)).map(LineDetail::getId).collect(Collectors.toList()));
|
||||
v.forEach(item->{
|
||||
alarmTime.set(alarmTime.get() + monitorMap.get(item.getId()).getAllTime());
|
||||
});
|
||||
vo.setAlarmFreq(alarmTime.get() * 1.0 / v.size());
|
||||
result.add(vo);
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public Map<String,List<String>> getLineMap(List<DeptGetChildrenMoreDTO> list, String searchValue) {
|
||||
Map<String,List<String>> map = new HashMap<>();
|
||||
list.forEach(it->{
|
||||
Predicate<LineDevGetDTO> voltageFilter = item -> true;
|
||||
if (!Objects.isNull(searchValue) && !Objects.equals(searchValue,"")) {
|
||||
voltageFilter = item -> item.getPointName().contains(searchValue);
|
||||
}
|
||||
Predicate<LineDevGetDTO> combinedFilter = voltageFilter;
|
||||
map.put(it.getUnitName(),it.getLineBaseList().stream()
|
||||
.filter(combinedFilter)
|
||||
.map(LineDevGetDTO::getPointId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList()));
|
||||
});
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
private List<String> addList(List<RStatPollutionSubstationM> substationMlist) {
|
||||
List<String> info=new ArrayList<>();
|
||||
Integer num1 = 0;
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.njcn.supervision.enums.ProblemTypeEnum;
|
||||
import com.njcn.supervision.mapper.device.LineWarningMapper;
|
||||
import com.njcn.supervision.pojo.param.device.OnlineParam;
|
||||
import com.njcn.supervision.pojo.po.device.LineWarning;
|
||||
import com.njcn.supervision.pojo.po.leaflet.WarningLeaflet;
|
||||
import com.njcn.supervision.pojo.vo.device.LineLimitDetailVo;
|
||||
import com.njcn.supervision.pojo.vo.device.OnlineVo;
|
||||
import com.njcn.supervision.service.device.ILineWarningService;
|
||||
@@ -60,7 +61,10 @@ import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Function;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -247,10 +251,15 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void startReport(OnlineParam.ReportParam param) {
|
||||
List<LineWarning> allLineWarnings = new ArrayList<>();
|
||||
//获取年份
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
LocalDate date = LocalDate.parse(param.getSearchBeginTime(), formatter);
|
||||
int year = date.getYear();
|
||||
param.setYear(String.valueOf(year));
|
||||
param.setNumber(getNumber(year));
|
||||
//获取部门名称
|
||||
String deptName = deptFeignClient.getDeptById(param.getDeptId()).getData().getName();
|
||||
param.setDeptName(deptName);
|
||||
|
||||
String inputUrl = "file/warningReport.docx";
|
||||
String alarmType = param.getType() == 1 ? "预" : "告";
|
||||
String fileName = "电能["+alarmType+"]"+param.getYear()+"年"+param.getNumber()+"号-"+param.getDeptName()+"地市 电能质量技术监督"+alarmType+"警单.docx";
|
||||
@@ -800,6 +809,34 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询库里面的编号
|
||||
*/
|
||||
public String getNumber(Integer year) {
|
||||
LocalDate firstDayOfYear = LocalDate.of(year, 1, 1);
|
||||
LocalDate lastDayOfYear = LocalDate.of(year + 1, 1, 1).minusDays(1);
|
||||
LambdaQueryWrapper<WarningLeaflet> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(WarningLeaflet::getState, 1)
|
||||
.eq(WarningLeaflet::getProblemType, 2)
|
||||
.between(WarningLeaflet::getCreateTime, firstDayOfYear, lastDayOfYear);
|
||||
List<WarningLeaflet> list = warningLeafletService.list(lambdaQueryWrapper);
|
||||
if (list.isEmpty()) {
|
||||
return "1";
|
||||
}
|
||||
// 编译正则表达式,用于匹配文件中的编号
|
||||
Pattern pattern = Pattern.compile("年(\\d+)号");
|
||||
int maxNumber = 0;
|
||||
for (WarningLeaflet leaflet : list) {
|
||||
String filePath = leaflet.getFilePath();
|
||||
Matcher matcher = pattern.matcher(filePath);
|
||||
if (matcher.find()) {
|
||||
int number = Integer.parseInt(matcher.group(1));
|
||||
maxNumber = Math.max(maxNumber, number);
|
||||
}
|
||||
}
|
||||
return String.valueOf(maxNumber + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取频率偏差-日最大值-最大值
|
||||
*/
|
||||
|
||||
@@ -33,6 +33,9 @@ public class AuditParam {
|
||||
@ApiModelProperty("操作类型")
|
||||
private String operateType;
|
||||
|
||||
@ApiModelProperty("结果")
|
||||
private Integer result;
|
||||
|
||||
@ApiModelProperty("页码")
|
||||
@NotNull(message = "页码不可为空")
|
||||
@Range(min = 1,message = "页码必须大于0")
|
||||
|
||||
@@ -37,11 +37,11 @@ public class ConfigParam {
|
||||
*/
|
||||
@ApiModelProperty("审计日志大小(MB)")
|
||||
@NotNull(message = "审计日志大小不可为空")
|
||||
@Min(value = 0,message = "审计日志大小不能小于0")
|
||||
@Min(value = 1024,message = "审计日志大小不能小于1024M")
|
||||
private BigDecimal logSize;
|
||||
|
||||
/**
|
||||
* 审计日志大小
|
||||
* 审计日志保留时间
|
||||
*/
|
||||
@ApiModelProperty("审计日志存储时间(1-6个月,默认3个月)")
|
||||
@Min(value = 1,message = "审计日志保留时间不能小于1")
|
||||
|
||||
@@ -5,6 +5,7 @@ import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.date.TimeInterval;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
@@ -26,6 +27,7 @@ import com.njcn.common.pojo.constant.LogInfo;
|
||||
import com.njcn.common.pojo.constant.OperateType;
|
||||
import com.njcn.common.pojo.constant.SecurityConstants;
|
||||
import com.njcn.common.pojo.dto.UserTokenInfo;
|
||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.oss.constant.OssPath;
|
||||
import com.njcn.redis.utils.RedisUtil;
|
||||
@@ -34,9 +36,11 @@ import com.njcn.system.excel.UserLogExcel;
|
||||
import com.njcn.system.mapper.AuditMapper;
|
||||
import com.njcn.system.mapper.UserLogMapper;
|
||||
import com.njcn.system.pojo.param.AuditParam;
|
||||
import com.njcn.system.pojo.po.Config;
|
||||
import com.njcn.system.pojo.po.UserLog;
|
||||
import com.njcn.system.pojo.vo.*;
|
||||
import com.njcn.system.service.AuditService;
|
||||
import com.njcn.system.service.IConfigService;
|
||||
import com.njcn.user.api.UserFeignClient;
|
||||
import com.njcn.user.pojo.po.User;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -62,6 +66,8 @@ import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.njcn.common.pojo.constant.LogInfo.UNKNOWN_USER;
|
||||
|
||||
/**
|
||||
* @version 1.0.0
|
||||
* @author: chenchao
|
||||
@@ -82,27 +88,37 @@ public class AuditServiceImpl extends ServiceImpl<UserLogMapper, UserLog> implem
|
||||
|
||||
@Value("${clear.num}")
|
||||
private Integer clearHistoryLog;
|
||||
|
||||
private final IConfigService iConfigService;
|
||||
|
||||
@Override
|
||||
public Page<AuditLogVO> getAuditLog(AuditParam auditParam) {
|
||||
List<AuditLogVO> auditLogVOS = new ArrayList<>();
|
||||
|
||||
Page<UserLog> info = this.page(new Page<>(auditParam.getPageNum(), auditParam.getPageSize()), new LambdaQueryWrapper<UserLog>()
|
||||
.and(StrUtil.isNotBlank(auditParam.getLoginName()), qw ->
|
||||
//如果Objects.equals(auditParam.getOperateType(), OperateType.AUTHENTICATE)则是用户登陆信息查询页面,loginname可模糊匹配Ip,CreateTime
|
||||
qw.like(UserLog::getLoginName, auditParam.getLoginName()).or(Objects.equals(auditParam.getOperateType(), OperateType.AUTHENTICATE)).like(
|
||||
UserLog::getIp, auditParam.getLoginName()
|
||||
).or(Objects.equals(auditParam.getOperateType(), OperateType.AUTHENTICATE)).like(
|
||||
UserLog::getCreateTime, auditParam.getLoginName()
|
||||
))
|
||||
.ne(UserLog::getLoginName, LogInfo.UNKNOWN_USER)
|
||||
.ne(UserLog::getLoginName, "")
|
||||
.ne(UserLog::getOperate, LogInfo.UNKNOWN_OPERATE)
|
||||
.eq(auditParam.getType() != null, UserLog::getType, auditParam.getType())
|
||||
.eq(StrUtil.isNotBlank(auditParam.getOperateType()), UserLog::getOperateType, auditParam.getOperateType())
|
||||
.ge(StrUtil.isNotBlank(auditParam.getSearchBeginTime()), UserLog::getCreateTime, DateUtil.beginOfDay(DateUtil.parse(auditParam.getSearchBeginTime())))
|
||||
.le(StrUtil.isNotBlank(auditParam.getSearchEndTime()), UserLog::getCreateTime, DateUtil.endOfDay(DateUtil.parse(auditParam.getSearchEndTime())))
|
||||
.orderByDesc(UserLog::getCreateTime)
|
||||
);
|
||||
LambdaQueryWrapper<UserLog> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper
|
||||
.between(UserLog::getCreateTime, DateUtil.beginOfDay(DateUtil.parse(auditParam.getSearchBeginTime())),
|
||||
DateUtil.endOfDay(DateUtil.parse(auditParam.getSearchEndTime())))
|
||||
.ne(UserLog::getLoginName,UNKNOWN_USER)
|
||||
.orderByDesc(UserLog::getCreateTime);
|
||||
|
||||
|
||||
if (StrUtil.isNotBlank(auditParam.getLoginName())) {
|
||||
lambdaQueryWrapper.eq(UserLog::getLoginName, auditParam.getLoginName());
|
||||
}
|
||||
if (StrUtil.isNotBlank(auditParam.getOperateType())) {
|
||||
lambdaQueryWrapper.eq(UserLog::getOperateType, auditParam.getOperateType());
|
||||
}
|
||||
if (Objects.nonNull(auditParam.getType())) {
|
||||
lambdaQueryWrapper.eq(UserLog::getType, auditParam.getType());
|
||||
}
|
||||
if (Objects.nonNull(auditParam.getResult())) {
|
||||
lambdaQueryWrapper.eq(UserLog::getResult, auditParam.getResult());
|
||||
}
|
||||
|
||||
|
||||
Page<UserLog> info = this.page(new Page<>(auditParam.getPageNum(), auditParam.getPageSize()), lambdaQueryWrapper);
|
||||
|
||||
Page<AuditLogVO> page = BeanUtil.copyProperties(info, Page.class);
|
||||
if (CollUtil.isNotEmpty(info.getRecords())) {
|
||||
for (UserLog userLog : info.getRecords()) {
|
||||
@@ -142,14 +158,18 @@ public class AuditServiceImpl extends ServiceImpl<UserLogMapper, UserLog> implem
|
||||
|
||||
@Override
|
||||
public void logFileWriter() {
|
||||
TimeInterval timeInterval = new TimeInterval();
|
||||
//限制多次点击
|
||||
String logFileWriter = redisUtil.getStringByKey("logFileWriter");
|
||||
if (StrUtil.isNotBlank(logFileWriter) || ObjectUtil.equals(logFileWriter, "1")) {
|
||||
throw new BusinessException(AuditLogEnum.MULTIPLE_CLICKS_LOGFILEWRITER);
|
||||
}
|
||||
redisUtil.saveByKey("logFileWriter", "1");
|
||||
redisUtil.saveByKeyWithExpire("logFileWriter", "1",600L);
|
||||
|
||||
|
||||
Config config = iConfigService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getState, DataStateEnum.ENABLE.getCode()));
|
||||
LocalDateTime nowDate = LocalDateTime.now();
|
||||
LocalDateTime agoDate = nowDate.minusMonths(6).with(TemporalAdjusters.firstDayOfMonth());
|
||||
LocalDateTime agoDate = nowDate.minusMonths(config.getLogTime()).with(TemporalAdjusters.firstDayOfMonth());
|
||||
String date = agoDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
|
||||
//结束时间
|
||||
String endTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH_mm_ss").format(nowDate);
|
||||
@@ -210,6 +230,7 @@ public class AuditServiceImpl extends ServiceImpl<UserLogMapper, UserLog> implem
|
||||
excelWriter.finish();
|
||||
}
|
||||
redisUtil.delete("logFileWriter");
|
||||
System.out.println("日志备份结束,共花费时间"+timeInterval.intervalSecond()+"S");
|
||||
}
|
||||
|
||||
|
||||
@@ -235,7 +256,7 @@ public class AuditServiceImpl extends ServiceImpl<UserLogMapper, UserLog> implem
|
||||
if (StrUtil.isNotBlank(logFileWriter) || ObjectUtil.equals(logFileWriter, "1")) {
|
||||
throw new BusinessException(AuditLogEnum.MULTIPLE_CLICKS_LOGFILEWRITER);
|
||||
}
|
||||
redisUtil.saveByKey("recoverLogFile", "1");
|
||||
redisUtil.saveByKeyWithExpire("recoverLogFile", "1",600L);
|
||||
File newFile = getLastFile();
|
||||
if (FileUtil.isEmpty(newFile)) {
|
||||
throw new BusinessException(AuditLogEnum.NOT_FIND_FILE);
|
||||
|
||||
@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
@@ -29,25 +30,34 @@ public class PassWordRuleParam {
|
||||
@NotNull(message = "会话超时时间(分钟)不可为空")
|
||||
private Integer sessionTime;
|
||||
|
||||
@ApiModelProperty(name = "minPasswordLength",value = "密码最小长度")
|
||||
@NotNull(message = "密码最小长度不可为空")
|
||||
private Integer minPasswordLength;
|
||||
@ApiModelProperty(name = "sessionRefreshTime",value = "*会话刷新时间(分钟)")
|
||||
@NotNull(message = "会话刷新时间(分钟)不可为空")
|
||||
private Integer sessionRefreshTime;
|
||||
|
||||
@ApiModelProperty(name = "passwordExpirationDays",value = "密码超期天数")
|
||||
@NotNull(message = "密码超期天数不可为空")
|
||||
private Integer passwordExpirationDays;
|
||||
|
||||
@ApiModelProperty(name = "mixedCheckFlag",value = "密码符号混合校验(0:否1:是)")
|
||||
@NotNull(message = "密码符号混合校验不可为空")
|
||||
/* @ApiModelProperty(name = "mixedCheckFlag",value = "密码符号混合校验(0:否1:是)")
|
||||
//@NotNull(message = "密码符号混合校验不可为空")
|
||||
private Integer mixedCheckFlag;
|
||||
|
||||
|
||||
@ApiModelProperty(name = "doubleCheckFlag",value = "密码重复校验(0:否1:是)")
|
||||
@NotNull(message = "密码重复校验不可为空")
|
||||
//@NotNull(message = "密码重复校验不可为空")
|
||||
private Integer doubleCheckFlag;
|
||||
|
||||
@ApiModelProperty(name = "mixedCheckFlag",value = "密码大小写混合校验(0:否1:是)" )
|
||||
@NotNull(message = "密码大小写混合校验不可为空")
|
||||
private Integer mixedCaseCheckFlag;
|
||||
//@NotNull(message = "密码大小写混合校验不可为空")
|
||||
private Integer mixedCaseCheckFlag;*/
|
||||
|
||||
@ApiModelProperty(name = "maxUseUser",value = "大于0" )
|
||||
@NotNull(message = "最大并发用户不可为空")
|
||||
@Min(value = 1,message = "最大并发数需要大于0")
|
||||
private Integer maxUseUser;
|
||||
|
||||
@NotNull(message = "账号长时间未登录休眠期(天)")
|
||||
@Min(value = 1,message = "账号长时间未登录休眠期应大于0")
|
||||
private Integer sleepDay;
|
||||
|
||||
}
|
||||
|
||||
@@ -68,4 +68,6 @@ public class UserStrategy extends BaseEntity {
|
||||
*/
|
||||
private Integer state;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ public class FunctionController extends BaseController {
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,list,methodDescribe);
|
||||
}
|
||||
|
||||
@OperateInfo(operateType = OperateType.UPDATE)
|
||||
@OperateInfo(operateType = OperateType.UPDATE,info = LogEnum.SYSTEM_MEDIUM)
|
||||
@PostMapping("/assignFunctionByRoleIndexes")
|
||||
@ApiOperation("角色分配菜单")
|
||||
@ApiImplicitParam(name = "roleFunctionComponent", value = "角色信息", required = true)
|
||||
|
||||
@@ -65,7 +65,7 @@ public class PassWordRuleController extends BaseController {
|
||||
}
|
||||
|
||||
|
||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||
@OperateInfo(info = LogEnum.SYSTEM_SERIOUS)
|
||||
@ApiOperation("解锁超级管理员")
|
||||
@RequestMapping(value = "/unlockRoot", method = RequestMethod.POST)
|
||||
public HttpResult<Boolean> unlockRoot() {
|
||||
|
||||
@@ -373,7 +373,7 @@ public class UserController extends BaseController {
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, publicKey, methodDescribe);
|
||||
}
|
||||
|
||||
@OperateInfo(operateType = OperateType.UPDATE)
|
||||
@OperateInfo(operateType = OperateType.UPDATE,info = LogEnum.SYSTEM_SERIOUS)
|
||||
@PutMapping("/updateUserLoginErrorTimes/{loginName}")
|
||||
@ApiOperation("更新用户登录认证密码错误次数")
|
||||
@ApiImplicitParam(name = "loginName", value = "登录名", required = true)
|
||||
@@ -391,7 +391,7 @@ public class UserController extends BaseController {
|
||||
*
|
||||
* @param password 确认密码
|
||||
*/
|
||||
@OperateInfo
|
||||
@OperateInfo(operateType = OperateType.AUTHENTICATE,info = LogEnum.SYSTEM_SERIOUS)
|
||||
@GetMapping("/passwordConfirm")
|
||||
@ApiOperation("密码二次确认")
|
||||
@ApiImplicitParam(name = "password", value = "确认密码")
|
||||
|
||||
@@ -3,8 +3,10 @@ package com.njcn.user.service.impl;
|
||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||
import com.njcn.redis.utils.RedisUtil;
|
||||
import com.njcn.user.pojo.param.PassWordRuleParam;
|
||||
import com.njcn.user.pojo.po.AuthClient;
|
||||
import com.njcn.user.pojo.po.User;
|
||||
import com.njcn.user.pojo.po.UserStrategy;
|
||||
import com.njcn.user.service.IAuthClientService;
|
||||
import com.njcn.user.service.IUserService;
|
||||
import com.njcn.user.service.IUserStrategyService;
|
||||
import com.njcn.user.service.PassWordRuleService;
|
||||
@@ -24,6 +26,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
public class PassWordRuleServiceImpl implements PassWordRuleService {
|
||||
|
||||
private final IUserStrategyService iUserStrategyService;
|
||||
|
||||
private final IAuthClientService iAuthClientService;
|
||||
private final RedisUtil redisUtil;
|
||||
|
||||
private final IUserService userService;
|
||||
@@ -36,13 +40,14 @@ public class PassWordRuleServiceImpl implements PassWordRuleService {
|
||||
.set(UserStrategy::getLimitPwdTimes,passWordRuleParam.getErrorsCount())
|
||||
.set(UserStrategy::getLimitPwdDate,passWordRuleParam.getPasswordExpirationDays())
|
||||
.set(UserStrategy::getLockPwdCheck,passWordRuleParam.getReleaseTime())
|
||||
.set(UserStrategy::getLockPwdTime,passWordRuleParam.getSessionTime()).update();
|
||||
|
||||
redisUtil.saveByKey("mixedCheckFlag",passWordRuleParam.getMixedCheckFlag());
|
||||
redisUtil.saveByKey("doubleCheckFlag",passWordRuleParam.getDoubleCheckFlag());
|
||||
redisUtil.saveByKey("mixedCaseCheckFlag",passWordRuleParam.getMixedCaseCheckFlag());
|
||||
redisUtil.saveByKey("minPasswordLength",passWordRuleParam.getMinPasswordLength());
|
||||
.set(UserStrategy::getMaxNum,passWordRuleParam.getMaxUseUser())
|
||||
.set(UserStrategy::getSleep,passWordRuleParam.getSleepDay())
|
||||
.update();
|
||||
|
||||
iAuthClientService.lambdaUpdate()
|
||||
.set(AuthClient::getRefreshTokenValidity,passWordRuleParam.getSessionRefreshTime())
|
||||
.set(AuthClient::getAccessTokenValidity,passWordRuleParam.getSessionTime())
|
||||
.update();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -53,14 +58,13 @@ public class PassWordRuleServiceImpl implements PassWordRuleService {
|
||||
|
||||
passWordRuleParam.setErrorsCount(userStrategy.getLimitPwdTimes());
|
||||
passWordRuleParam.setReleaseTime(userStrategy.getLockPwdCheck());
|
||||
passWordRuleParam.setSessionTime(userStrategy.getLockPwdTime());
|
||||
passWordRuleParam.setMinPasswordLength((Integer)(redisUtil.getObjectByKey("minPasswordLength")));
|
||||
passWordRuleParam.setPasswordExpirationDays(userStrategy.getLimitPwdDate());
|
||||
passWordRuleParam.setMixedCheckFlag((Integer)(redisUtil.getObjectByKey("mixedCheckFlag")));
|
||||
passWordRuleParam.setDoubleCheckFlag((Integer)(redisUtil.getObjectByKey("doubleCheckFlag")));
|
||||
passWordRuleParam.setMixedCaseCheckFlag((Integer)(redisUtil.getObjectByKey("mixedCaseCheckFlag")));
|
||||
|
||||
passWordRuleParam.setMaxUseUser(userStrategy.getMaxNum());
|
||||
passWordRuleParam.setSleepDay(userStrategy.getSleep());
|
||||
|
||||
AuthClient authClient = iAuthClientService.lambdaQuery().last(" limit 1").one();
|
||||
passWordRuleParam.setSessionTime(authClient.getAccessTokenValidity());
|
||||
passWordRuleParam.setSessionRefreshTime(authClient.getRefreshTokenValidity());
|
||||
return passWordRuleParam;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user