From e52c123d2a70e4aa73d27fdfad57ff68c2dbd429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E6=9C=A8c?= <857448963@qq.com> Date: Mon, 28 Aug 2023 16:28:32 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=8F=B0=E8=B4=A6=E6=A8=A1=E5=9D=97=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AD=97=E6=AE=B5=E8=BF=81=E7=A7=BB=E5=BE=AE=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/njcn/common/utils/sm/Sm4Utils.java | 3 + .../njcn/common/utils/sm/ThreeDesUtil.java | 150 ++++++++++++++++++ .../njcn/mq/constant/BusinessResource.java | 6 + .../com/njcn/mq/constant/BusinessTopic.java | 8 + .../mq/message/RmpEventDetailMessage.java | 20 +++ .../RmpEventDetailMessageTemplate.java | 28 ++++ .../device/pq/pojo/param/DeviceParam.java | 12 ++ .../njcn/device/pq/pojo/param/LineParam.java | 5 +- .../com/njcn/device/pq/pojo/po/Device.java | 25 +++ .../njcn/device/pq/pojo/po/LineDetail.java | 1 + .../com/njcn/device/pq/pojo/vo/DeviceVO.java | 13 ++ .../service/impl/TerminalBaseServiceImpl.java | 6 + .../com/njcn/device/pq/utils/DeviceUtil.java | 72 ++++++--- 13 files changed, 321 insertions(+), 28 deletions(-) create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/ThreeDesUtil.java create mode 100644 pqs-common/common-mq/src/main/java/com/njcn/mq/message/RmpEventDetailMessage.java create mode 100644 pqs-common/common-mq/src/main/java/com/njcn/mq/template/RmpEventDetailMessageTemplate.java diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4Utils.java b/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4Utils.java index 9c27b2a32..b7c820b97 100644 --- a/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4Utils.java +++ b/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4Utils.java @@ -12,6 +12,9 @@ import java.util.regex.Pattern; */ public class Sm4Utils { + //全局秘钥 + public final static String globalSecretKey = "11HDESaAhiHHug2z"; + private String secretKey = ""; private String iv = ""; diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/ThreeDesUtil.java b/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/ThreeDesUtil.java new file mode 100644 index 000000000..34a7a659e --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/ThreeDesUtil.java @@ -0,0 +1,150 @@ +package com.njcn.common.utils.sm; + +import lombok.extern.slf4j.Slf4j; +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; + + +/** + *字符串 DESede(3DES) 加密 + * ECB模式/使用PKCS7方式填充不足位,目前给的密钥是192位 + * 3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的 + * 加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加 + * 密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的 + * 密钥,P代表明文,C代表密表,这样, + * 3DES加密过程为:C=Ek3(Dk2(Ek1(P))) + * 3DES解密过程为:P=Dk1((EK2(Dk3(C))) + * @date 2023/8/28 + */ +@Slf4j +public class ThreeDesUtil { + + /** + * @param args在java中调用sun公司提供的3DES加密解密算法时,需要使 + * 用到$JAVA_HOME/jre/lib/目录下如下的4个jar包: + *jce.jar + *security/US_export_policy.jar + *security/local_policy.jar + *ext/sunjce_provider.jar + *定义加密算法,可用 DES,DESede,Blowfish + */ + + private static final String Algorithm = "DESede"; + // 24字节的密钥 + private static final byte[] keyBytes = {0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x10, + 0x40, 0x38, 0x28, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD, + 0x55, 0x66, 0x77, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x36, + (byte) 0xE2 }; + + + //keybyte为加密密钥,长度为24字节 + //src为被加密的数据缓冲区(源) + public static byte[] encryptMode(byte[] keybyte,byte[] src){ + try { + //生成密钥 + SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); + //加密 + Cipher c1 = Cipher.getInstance(Algorithm); + c1.init(Cipher.ENCRYPT_MODE, deskey); + //在单一方面的加密或解密 + return c1.doFinal(src); + } catch (java.security.NoSuchAlgorithmException e1) { + log.error(e1.getMessage()); + }catch(javax.crypto.NoSuchPaddingException e2){ + log.error(e2.getMessage()); + }catch(Exception e3){ + log.error(e3.getMessage()); + } + return null; + } + + //keybyte为加密密钥,长度为24字节 + //src为解密后的缓冲区 + public static byte[] decryptMode(byte[] keybyte,byte[] src){ + try { + //生成密钥 + SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); + //解密 + Cipher c1 = Cipher.getInstance(Algorithm); + c1.init(Cipher.DECRYPT_MODE, deskey); + return c1.doFinal(src); + } catch (java.security.NoSuchAlgorithmException e1) { + log.error(e1.getMessage()); + }catch(javax.crypto.NoSuchPaddingException e2){ + log.error(e2.getMessage()); + }catch(Exception e3){ + log.error(e3.getMessage()); + } + return null; + } + + //转换成十六进制字符串 + public static String byte2Hex(byte[] b){ + String hs=""; + String stmp=""; + for(int n=0; n eventIds; +} diff --git a/pqs-common/common-mq/src/main/java/com/njcn/mq/template/RmpEventDetailMessageTemplate.java b/pqs-common/common-mq/src/main/java/com/njcn/mq/template/RmpEventDetailMessageTemplate.java new file mode 100644 index 000000000..06489cce1 --- /dev/null +++ b/pqs-common/common-mq/src/main/java/com/njcn/mq/template/RmpEventDetailMessageTemplate.java @@ -0,0 +1,28 @@ +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 com.njcn.mq.message.RmpEventDetailMessage; +import org.apache.rocketmq.client.producer.SendResult; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.stereotype.Component; + +/** + * pqs + * + * @author cdf + * @date 2023/8/24 + */ +@Component +public class RmpEventDetailMessageTemplate extends RocketMQEnhanceTemplate { + public RmpEventDetailMessageTemplate(RocketMQTemplate template) { + super(template); + } + + public SendResult sendEventDetail(RmpEventDetailMessage rmpEventDetailMessage) { + rmpEventDetailMessage.setSource(BusinessResource.WEB_RESOURCE); + return send(BusinessTopic.RMP_EVENT_DETAIL_TOPIC, rmpEventDetailMessage); + } +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/DeviceParam.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/DeviceParam.java index e032ce032..ab65520ff 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/DeviceParam.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/DeviceParam.java @@ -117,6 +117,18 @@ public class DeviceParam { @ApiModelProperty(name = "sim",value = "装置sim卡号") private String sim; + @ApiModelProperty(name = "devSeries",value = "装置系列") + private String devSeries; + + @ApiModelProperty(name = "devLocation",value = "监测装置安装位置") + private String devLocation; + + @ApiModelProperty(name = "devNo",value = "监测厂家设备编号") + private String devNo; + + @ApiModelProperty(name = "isAlarm",value = "告警功能 0:关闭 null、1:开启") + private Integer isAlarm; + @ApiModelProperty(name = "sort",value = "排序",required = true) @NotNull(message = "排序不可为空") @Min(value = 0,message = "排序格式有误") diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/LineParam.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/LineParam.java index de2e9f61e..1ace18146 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/LineParam.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/LineParam.java @@ -142,14 +142,12 @@ public class LineParam { * 电压上偏差限值 */ @ApiModelProperty(name = "voltageDev",value = "电压上偏差限值",required = true) - @NotNull(message = "电压上偏差限值不能为空") private Float voltageDev; /** * 电压下偏差限值 */ @ApiModelProperty(name = "uvoltageDev",value = "电压下偏差限值",required = true) - @NotNull(message = "电压下偏差限值不能为空") private Float uvoltageDev; @ApiModelProperty(name = "powerSubstationName",value = "电网侧变电站") @@ -164,6 +162,9 @@ public class LineParam { @ApiModelProperty(name = "superiorsSubstation",value = "上级电站") private String superiorsSubstation; + @ApiModelProperty(name = "statFlag",value = "是否参与报告统计 0.不参与 1.参与") + private Integer statFlag; + @ApiModelProperty(name = "hangLine",value = "挂接线路") private String hangLine; diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/Device.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/Device.java index fdc9f8a4d..e6a165b62 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/Device.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/Device.java @@ -1,6 +1,7 @@ package com.njcn.device.pq.pojo.po; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -136,4 +137,28 @@ public class Device implements Serializable{ */ private String sim; + + /** + * 装置系列 + */ + private String devSeries; + + + /** + * 监测装置安装位置 + */ + private String devLocation; + + + /** + * 监测厂家设备编号 + */ + private String devNo; + + + /** + * 告警功能 0:关闭 null、1:开启 + */ + private Integer isAlarm; + } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDetail.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDetail.java index e488d77c4..8235690fe 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDetail.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDetail.java @@ -125,6 +125,7 @@ public class LineDetail{ private String remark; + /** * 电网侧变电站 */ diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceVO.java index 2df28db20..2e19344fe 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceVO.java @@ -109,6 +109,19 @@ public class DeviceVO implements Serializable { @ApiModelProperty(name = "sim",value = "装置sim卡") private String sim; + @ApiModelProperty(name = "devSeries",value = "装置系列") + private String devSeries; + + @ApiModelProperty(name = "devLocation",value = "监测装置安装位置") + private String devLocation; + + @ApiModelProperty(name = "devNo",value = "监测厂家设备编号") + private String devNo; + + @ApiModelProperty(name = "isAlarm",value = "告警功能 0:关闭 null、1:开启") + private Integer isAlarm; + + @ApiModelProperty(name = "sort",value = "排序",required = true) private Integer sort; diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java index 457ddf8bd..f46c37817 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java @@ -12,6 +12,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.config.GeneralInfo; import com.njcn.common.pojo.dto.SimpleDTO; import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; @@ -107,6 +108,8 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple private final FileStorageUtil fileStorageUtil; + private final GeneralInfo generalInfo; + /** * 终端新增操作 @@ -254,6 +257,9 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple deviceDetail.setNextTimeCheck(PubUtils.localDateFormat(deviceParam.getNextTimeCheck())); deviceDetail.setLoginTime(PubUtils.localDateFormat(deviceParam.getNextTimeCheck())); deviceDetail.setUpdateTime(LocalDateTime.now()); + + //处理装置识别码秘钥 + deviceMapper.insert(deviceDetail); //装置功能 List funList = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.DEV_FUN.getName()).getData(); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DeviceUtil.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DeviceUtil.java index 88fa10d1d..de81e5904 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DeviceUtil.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DeviceUtil.java @@ -1,5 +1,9 @@ package com.njcn.device.pq.utils; +import com.njcn.common.utils.sm.Sm4Utils; +import com.njcn.common.utils.sm.ThreeDesUtil; +import org.apache.commons.codec.binary.Base64; + /** * pqs * @@ -8,35 +12,51 @@ package com.njcn.device.pq.utils; */ public class DeviceUtil { + /** - * 根据电压大小获取基准容量 - * + * cd 系统配置的解密方式 + * content 需要解密的内容 + * 解密对应内容 * @author cdf - * @date 2021/7/19 + * @date 2021/10/12 */ - public static Float getJCAPByScale(String sacleName) { - if (sacleName.equals("6kV") || sacleName.equals("10kV")) { - return 100f; - } else if (sacleName.equals("20kV")) { - return 200f; - } else if (sacleName.equals("35kV")) { - return 250f; - } else if (sacleName.equals("66kV")) { - return 500f; - } else if (sacleName.equals("110kV")) { - return 750f; - } else if (sacleName.equals("220kV")) { - return 2000f; - } else if (sacleName.equals("330kV")) { - return 3000f; - } else if (sacleName.equals("500kV")) { - return 4500f; - } else if (sacleName.equals("750kV")) { - return 7000f; - } else if (sacleName.equals("1000kV")) { - return 9000f; - } else { - return 10f; + public static String decoderString(Integer cd,String content){ + String seriesTmp = null; + if (cd == 0) { + seriesTmp = Base64.decodeBase64(content).toString(); + } else if (cd == 1) { + seriesTmp = ThreeDesUtil.decryptThreeDes(content); + } else if (cd == 2) { + //SM4加密密码 + String secretkey = Sm4Utils.globalSecretKey; + Sm4Utils sm4 = new Sm4Utils(secretkey); + seriesTmp = sm4.decryptData_ECB(content); } + return seriesTmp; } + + /** + * + * cd 系统配置的加密方式 + * content 需要加密的内容 + * 加密对应内容 + * @author cdf + * @date 2021/10/12 + */ + public static String encodeString(Integer cd,String content){ + String key = null; + if (cd == 0) { + key = Base64.encodeBase64String(content.getBytes()); + } else if (cd == 1) { + key = ThreeDesUtil.encryptThreeDes(content); + } else if (cd == 2) { + //SM4加密密码 + String secretkey = Sm4Utils.globalSecretKey; + Sm4Utils sm4 = new Sm4Utils(secretkey); + key = sm4.encryptData_ECB(content); + } + return key; + } + + }