From 39c910a33d82506ea6455c10fa336ec6ca273c00 Mon Sep 17 00:00:00 2001 From: xuyang <748613696@qq.com> Date: Wed, 23 Aug 2023 15:54:00 +0800 Subject: [PATCH] =?UTF-8?q?App=E7=94=A8=E6=88=B7=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/pojo/constant/PatternRegex.java | 6 ++ .../com/njcn/mq/constant/BusinessTopic.java | 21 +++++ .../com/njcn/mq/message/AppEventMessage.java | 77 +++++++++++++++++++ .../mq/template/AppEventMessageTemplate.java | 29 +++++++ .../com/njcn/system/api/EpdFeignClient.java | 4 + .../EpdFeignClientFallbackFactory.java | 6 ++ .../controller/EleEpdPqdController.java | 13 +++- .../com/njcn/user/enums/UserResponseEnum.java | 1 + .../njcn/user/service/IUserSetService.java | 2 +- .../user/service/impl/AppUserServiceImpl.java | 4 +- .../user/service/impl/UserServiceImpl.java | 2 +- .../user/service/impl/UserSetServiceImpl.java | 53 ++++++++++++- 12 files changed, 209 insertions(+), 9 deletions(-) create mode 100644 pqs-common/common-mq/src/main/java/com/njcn/mq/message/AppEventMessage.java create mode 100644 pqs-common/common-mq/src/main/java/com/njcn/mq/template/AppEventMessageTemplate.java diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java index 1130b7449..a1588815f 100644 --- a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java @@ -17,6 +17,12 @@ public interface PatternRegex { */ String PASSWORD_REGEX = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[\\=\\[\\]\\{\\}\\.\\,\\。\\、\\@\\#\\_\\!\\$\\%\\^\\&\\*\\(\\)\\?\\<\\>\\/\\|\\~,\\-\\+]).{8,16}$"; + /** + * APP密码,长度为8-16 + */ + String APP_PASSWORD_REGEX = "{8,16}$"; + + /** * 手机的密码 */ diff --git a/pqs-common/common-mq/src/main/java/com/njcn/mq/constant/BusinessTopic.java b/pqs-common/common-mq/src/main/java/com/njcn/mq/constant/BusinessTopic.java index 5435a5845..914303cee 100644 --- a/pqs-common/common-mq/src/main/java/com/njcn/mq/constant/BusinessTopic.java +++ b/pqs-common/common-mq/src/main/java/com/njcn/mq/constant/BusinessTopic.java @@ -17,6 +17,11 @@ public interface BusinessTopic { */ String NJCN_APP_EVENT_TOPIC = "njcnAppEventTopic"; + /** + * 治理告警接收主题 + */ + String NJCN_APP_WARN_TOPIC = "njcnAppWarnTopic"; + interface AppDataTag { @@ -31,5 +36,21 @@ public interface BusinessTopic { String RT_TAG = "rt"; } + interface AppEventTag { + + /** + * 暂态事件(录波)tag + */ + String EVENT_TAG = "event"; + } + + interface AppWarnTag { + + /** + * 告警事件tag + */ + String WARN_TAG = "warn"; + } + } diff --git a/pqs-common/common-mq/src/main/java/com/njcn/mq/message/AppEventMessage.java b/pqs-common/common-mq/src/main/java/com/njcn/mq/message/AppEventMessage.java new file mode 100644 index 000000000..df11d563b --- /dev/null +++ b/pqs-common/common-mq/src/main/java/com/njcn/mq/message/AppEventMessage.java @@ -0,0 +1,77 @@ +package com.njcn.mq.message; + +import com.njcn.middle.rocket.domain.BaseMessage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/8/22 11:06 + */ +@Data +public class AppEventMessage extends BaseMessage { + + @ApiModelProperty("网络设备码") + private String id; + + private Integer mid; + + @ApiModelProperty("逻辑设备 治理逻辑设备为1 电能质量设备为2") + private Integer did; + + private Integer pri; + + private Integer type; + + private Msg msg; + + @Data + public static class Msg{ + + @ApiModelProperty("逻辑子设备 治理逻辑设备为0 电能质量设备为1、2") + private Integer clDid; + + private Integer dataType; + + @ApiModelProperty("数据属性:无-0、实时-1、统计-2") + private Integer dataAttr; + + private Integer dsNameIdx; + + private List dataArray; + } + + @Data + public static class DataArray{ + + private Integer idx; + + private String name; + + private Long dataTimeSec; + + private Long dataTimeUSec; + + @ApiModelProperty("事件类型") + private String type; + + private List param; + } + + @Data + public static class Param{ + + private String name; + + private String type; + + private String unit; + + private Object data; + } +} diff --git a/pqs-common/common-mq/src/main/java/com/njcn/mq/template/AppEventMessageTemplate.java b/pqs-common/common-mq/src/main/java/com/njcn/mq/template/AppEventMessageTemplate.java new file mode 100644 index 000000000..be4ce312e --- /dev/null +++ b/pqs-common/common-mq/src/main/java/com/njcn/mq/template/AppEventMessageTemplate.java @@ -0,0 +1,29 @@ +package com.njcn.mq.template; + +import com.njcn.middle.rocket.template.RocketMQEnhanceTemplate; +import com.njcn.mq.constant.BusinessResource; +import com.njcn.mq.constant.BusinessTopic; +import com.njcn.mq.message.AppEventMessage; +import org.apache.rocketmq.client.producer.SendResult; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.stereotype.Component; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/8/11 15:28 + */ +@Component +public class AppEventMessageTemplate extends RocketMQEnhanceTemplate { + + public AppEventMessageTemplate(RocketMQTemplate template) { + super(template); + } + + public SendResult sendMember(AppEventMessage appEventMessage) { + appEventMessage.setSource(BusinessResource.APP_RESOURCE); + return send(BusinessTopic.NJCN_APP_EVENT_TOPIC, BusinessTopic.AppEventTag.EVENT_TAG, appEventMessage); + } +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/api/EpdFeignClient.java b/pqs-system/system-api/src/main/java/com/njcn/system/api/EpdFeignClient.java index 02b9ceec8..d095529f5 100644 --- a/pqs-system/system-api/src/main/java/com/njcn/system/api/EpdFeignClient.java +++ b/pqs-system/system-api/src/main/java/com/njcn/system/api/EpdFeignClient.java @@ -7,6 +7,7 @@ import com.njcn.system.pojo.dto.EpdDTO; import com.njcn.system.pojo.param.EleEpdPqdParam; import com.njcn.system.pojo.po.EleEpdPqd; import org.springframework.cloud.openfeign.FeignClient; +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.RequestParam; @@ -48,4 +49,7 @@ public interface EpdFeignClient { @PostMapping("/findAll") HttpResult> findAll(); + + @PostMapping("/findByName") + HttpResult findByName(@RequestParam("name") String name); } diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/EpdFeignClientFallbackFactory.java b/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/EpdFeignClientFallbackFactory.java index c06159a46..38a83cda6 100644 --- a/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/EpdFeignClientFallbackFactory.java +++ b/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/EpdFeignClientFallbackFactory.java @@ -88,6 +88,12 @@ public class EpdFeignClientFallbackFactory implements FallbackFactory findByName(String name) { + log.error("{}异常,降级处理,异常为:{}","根据名称查询字典信息",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } }; } } diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/EleEpdPqdController.java b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/EleEpdPqdController.java index b5aaf084f..9de7011ba 100644 --- a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/EleEpdPqdController.java +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/EleEpdPqdController.java @@ -196,12 +196,23 @@ public class EleEpdPqdController extends BaseController { @PostMapping("/findAll") @OperateInfo(info = LogEnum.BUSINESS_COMMON) @ApiOperation("查询所有字典数据") -// @ApiIgnore + @ApiIgnore public HttpResult> findAll(){ String methodDescribe = getMethodDescribe("findAll"); List list = eleEpdPqdService.findAll(); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); } + @PostMapping("/findByName") + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @ApiOperation("根据名称查询字典信息") + @ApiImplicitParam(name = "name", value = "指标名称", required = true) + @ApiIgnore + public HttpResult findByName(@RequestParam("name") @Validated String name){ + String methodDescribe = getMethodDescribe("findByName"); + EleEpdPqd po = eleEpdPqdService.lambdaQuery().eq(EleEpdPqd::getName,name).one(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe); + } + } diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java b/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java index 564fcb652..2e79619ac 100644 --- a/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java +++ b/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java @@ -48,6 +48,7 @@ public enum UserResponseEnum { INVALID_TIME("A0101", "用户当前时间段禁止访问"), PASSWORD_TRANSPORT_ERROR("A0101", "密码传输完整性被破坏"), SPECIAL_PASSWORD("A0101", "密码需要包含特殊字符字母数字,长度为8-16"), + APP_PASSWORD("A0101", "密码长度为8-16"), REPEAT_PASSWORD("A0101", "新密码与旧密码不能一致"), REGISTER_FAIL("A0102", "注册失败"), diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserSetService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserSetService.java index f311ba940..438b761e4 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserSetService.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserSetService.java @@ -34,7 +34,7 @@ public interface IUserSetService extends IService { * @author xy * @date 2022/1/21 12:39 */ - String updatePassword(String id,String newPassword); + String updatePassword(String id,String newPassword, Boolean result); /** * 功能描述: 未登录 修改用户密码 diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppUserServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppUserServiceImpl.java index 04030ae9c..3561c552c 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppUserServiceImpl.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppUserServiceImpl.java @@ -228,7 +228,7 @@ public class AppUserServiceImpl extends ServiceImpl impleme if (Objects.isNull(user)){ throw new BusinessException(UserResponseEnum.LOGIN_USERNAME_NOT_FOUND); } - String secretPassword = userSetService.updatePassword(userId, password); + String secretPassword = userSetService.updatePassword(userId, password,false); user.setPassword(secretPassword); user.setPwdValidity(LocalDateTime.now()); user.setLoginTime(LocalDateTime.now()); @@ -252,7 +252,7 @@ public class AppUserServiceImpl extends ServiceImpl impleme if (Objects.isNull(user)){ throw new BusinessException(UserResponseEnum.LOGIN_USERNAME_NOT_FOUND); } - String secretPassword = userSetService.updatePassword(user.getId(), password); + String secretPassword = userSetService.updatePassword(user.getId(), password,false); user.setPassword(secretPassword); user.setPwdValidity(LocalDateTime.now()); user.setLoginTime(LocalDateTime.now()); diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java index 68e5d0c2f..48ef61e17 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java @@ -349,7 +349,7 @@ public class UserServiceImpl extends ServiceImpl implements IU @Override public boolean updatePassword(String id, String password) { - String secretPassword = userSetService.updatePassword(id, password); + String secretPassword = userSetService.updatePassword(id, password,true); User user = lambdaQuery().eq(User::getId, id).one(); user.setPassword(secretPassword); user.setPwdValidity(LocalDateTime.now()); diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserSetServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserSetServiceImpl.java index 88bc51104..5bb477248 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserSetServiceImpl.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserSetServiceImpl.java @@ -65,15 +65,15 @@ public class UserSetServiceImpl extends ServiceImpl impl } @Override - public String updatePassword(String id,String newPassword) { + public String updatePassword(String id,String newPassword,Boolean result) { String password = getSecretPassword(newPassword); - return updatePsd(id,password); + return updatePsd(id,password,result); } @Override public String updateFirstPassword(String id, String newPassword, String name, String ip) { String password = getSecretPasswordNotLogin(newPassword, name, ip); - return updatePsd(id,password); + return updatePsd(id,password,true); } @Override @@ -110,7 +110,52 @@ public class UserSetServiceImpl extends ServiceImpl impl * @param password * @return */ - private String updatePsd(String id, String password) { + private String updatePsd(String id, String password,Boolean result) { + Sm4Utils sm4; + String psd,strSm4; + if (result){ + String standard = PatternRegex.PASSWORD_REGEX; + Pattern pattern = Pattern.compile(standard); + Matcher m=pattern.matcher(password); + if (!m.find()){ + throw new BusinessException(UserResponseEnum.SPECIAL_PASSWORD); + } + //密码是否需要复杂校验 + } else { + String standard = PatternRegex.APP_PASSWORD_REGEX; + Pattern pattern = Pattern.compile(standard); + Matcher m=pattern.matcher(password); + if (!m.find()){ + throw new BusinessException(UserResponseEnum.APP_PASSWORD); + } + } + UserSet userSet = this.lambdaQuery().eq(UserSet::getUserId, id).one(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("sys_user.id",id); + User user = userMapper.selectOne(userQueryWrapper); + String secretPassword = user.getPassword(); + if (Objects.isNull(userSet)){ + UserSet newUserSet = new UserSet(); + String secretKey = PubUtils.randomCode(16); + newUserSet.setSecretKey(secretKey); + sm4 = new Sm4Utils(secretKey); + strSm4 = sm4.encryptData_ECB(password); + newUserSet.setStandBy(strSm4); + newUserSet.setUserId(id); + this.save(newUserSet); + psd = sm4.encryptData_ECB(strSm4 + secretKey); + } else { + sm4 = new Sm4Utils(userSet.getSecretKey()); + strSm4 = sm4.encryptData_ECB(password); + psd = sm4.encryptData_ECB(strSm4 + userSet.getSecretKey()); + } + if (Objects.equals(secretPassword,psd)){ + throw new BusinessException(UserResponseEnum.REPEAT_PASSWORD); + } + return psd; + } + + private String updateAppPsd(String id, String password) { Sm4Utils sm4; String psd,strSm4; String standard = PatternRegex.PASSWORD_REGEX;