Browse Source

first commit

master
fangyang2021 1 year ago
commit
bfc9c0df6f
  1. 37
      .gitignore
  2. BIN
      .mvn/wrapper/maven-wrapper.jar
  3. 18
      .mvn/wrapper/maven-wrapper.properties
  4. 10
      HELP.md
  5. 31
      bolt-api/pom.xml
  6. 1012
      bolt-api/src/main/java/com/jiluo/bolt/Aladdin/Hasp.java
  7. 94
      bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspApiVersion.java
  8. 727
      bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspStatus.java
  9. 118
      bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspTime.java
  10. 23
      bolt-api/src/main/java/com/jiluo/bolt/common/BigDecimalValueFilter.java
  11. 35
      bolt-api/src/main/java/com/jiluo/bolt/common/CameraDriverEnum.java
  12. 50
      bolt-api/src/main/java/com/jiluo/bolt/common/DefectType.java
  13. 38
      bolt-api/src/main/java/com/jiluo/bolt/common/DetectAttribute.java
  14. 68
      bolt-api/src/main/java/com/jiluo/bolt/common/DetectConfig.java
  15. 34
      bolt-api/src/main/java/com/jiluo/bolt/common/DetectJob.java
  16. 25
      bolt-api/src/main/java/com/jiluo/bolt/common/DetectMessage.java
  17. 26
      bolt-api/src/main/java/com/jiluo/bolt/common/DetectResult.java
  18. 50
      bolt-api/src/main/java/com/jiluo/bolt/common/DetectResultKey.java
  19. 34
      bolt-api/src/main/java/com/jiluo/bolt/common/DetectType.java
  20. 28
      bolt-api/src/main/java/com/jiluo/bolt/common/LocalStatus.java
  21. 28
      bolt-api/src/main/java/com/jiluo/bolt/common/PermissionValue.java
  22. 39
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmConfigDto.java
  23. 41
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmDto.java
  24. 26
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmModelDto.java
  25. 53
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectDto.java
  26. 30
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectResultDto.java
  27. 92
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DeviceDto.java
  28. 23
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/IdToNameDto.java
  29. 23
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ImgDto.java
  30. 38
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/MotorGroupDto.java
  31. 30
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PermissionDto.java
  32. 56
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PointDto.java
  33. 45
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PowerStationDto.java
  34. 30
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/RoleDto.java
  35. 40
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/SystemInfoConfigDto.java
  36. 60
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempSenserDto.java
  37. 34
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempThresholdDto.java
  38. 46
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ThemeConfigDto.java
  39. 54
      bolt-api/src/main/java/com/jiluo/bolt/entity/dto/UserDto.java
  40. 35
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/AlgorithmVo.java
  41. 41
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DefectVo.java
  42. 56
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DeviceVo.java
  43. 28
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DropDownVo.java
  44. 39
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/HistoricalDataVo.java
  45. 39
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/MotorGroupVo.java
  46. 29
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PermissionVo.java
  47. 52
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PointVo.java
  48. 39
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PowerStationVo.java
  49. 46
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/RoleVo.java
  50. 38
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/SystemInfoConfigVo.java
  51. 52
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/TempSenserVo.java
  52. 39
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/ThemeConfigVo.java
  53. 49
      bolt-api/src/main/java/com/jiluo/bolt/entity/vo/UserVo.java
  54. 76
      bolt-core/pom.xml
  55. 44
      bolt-core/src/main/java/com/jiluo/bolt/config/MinioConfig.java
  56. 110
      bolt-core/src/main/java/com/jiluo/bolt/config/UploadFile.java
  57. 41
      bolt-core/src/main/java/com/jiluo/bolt/domain/DefectInfo.java
  58. 127
      bolt-core/src/main/java/com/jiluo/bolt/export/Analysis.java
  59. 136
      bolt-core/src/main/java/com/jiluo/bolt/export/Export.java
  60. 278
      bolt-core/src/main/java/com/jiluo/bolt/export/Report.java
  61. 22
      bolt-core/src/main/java/com/jiluo/bolt/service/AlarmService.java
  62. 23
      bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmService.java
  63. 24
      bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmTempleteService.java
  64. 32
      bolt-core/src/main/java/com/jiluo/bolt/service/ConfigService.java
  65. 35
      bolt-core/src/main/java/com/jiluo/bolt/service/DefectService.java
  66. 23
      bolt-core/src/main/java/com/jiluo/bolt/service/DetectService.java
  67. 50
      bolt-core/src/main/java/com/jiluo/bolt/service/DeviceService.java
  68. 20
      bolt-core/src/main/java/com/jiluo/bolt/service/DeviceTempleteService.java
  69. 41
      bolt-core/src/main/java/com/jiluo/bolt/service/JobService.java
  70. 148
      bolt-core/src/main/java/com/jiluo/bolt/service/MinioService.java
  71. 29
      bolt-core/src/main/java/com/jiluo/bolt/service/MotorGroupService.java
  72. 42
      bolt-core/src/main/java/com/jiluo/bolt/service/PointService.java
  73. 27
      bolt-core/src/main/java/com/jiluo/bolt/service/PowerStationService.java
  74. 13
      bolt-core/src/main/java/com/jiluo/bolt/service/ProductService.java
  75. 20
      bolt-core/src/main/java/com/jiluo/bolt/service/RoleItemService.java
  76. 23
      bolt-core/src/main/java/com/jiluo/bolt/service/RoleService.java
  77. 25
      bolt-core/src/main/java/com/jiluo/bolt/service/RoleValueService.java
  78. 23
      bolt-core/src/main/java/com/jiluo/bolt/service/UserService.java
  79. 14
      bolt-core/src/main/java/com/jiluo/bolt/service/VersionService.java
  80. 36
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlarmServiceImpl.java
  81. 86
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmServiceImpl.java
  82. 79
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmTempleteServiceImpl.java
  83. 85
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/ConfigServiceImpl.java
  84. 106
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/DefectServiceImpl.java
  85. 63
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/DetectServiceImpl.java
  86. 202
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceServiceImpl.java
  87. 54
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceTempleteServiceImpl.java
  88. 99
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/JobServiceImpl.java
  89. 191
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/MinioServiceImpl.java
  90. 89
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/MotorGroupServiceImpl.java
  91. 152
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/PointServiceImpl.java
  92. 77
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/PowerStationServiceImpl.java
  93. 21
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/ProductServiceImpl.java
  94. 53
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleItemServiceImpl.java
  95. 62
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleServiceImpl.java
  96. 64
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleValueServiceImpl.java
  97. 65
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/UserServiceImpl.java
  98. 31
      bolt-core/src/main/java/com/jiluo/bolt/service/impl/VersionServiceImpl.java
  99. 259
      bolt-core/src/main/java/com/jiluo/bolt/util/AesEncryptUtil.java
  100. 24
      bolt-core/src/main/java/com/jiluo/bolt/util/BigDecimalUtils.java

37
.gitignore

@ -0,0 +1,37 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/
.jpb/
*.iws
*.iml
*.ipr
logs/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store!/

BIN
.mvn/wrapper/maven-wrapper.jar

Binary file not shown.

18
.mvn/wrapper/maven-wrapper.properties

@ -0,0 +1,18 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar

10
HELP.md

@ -0,0 +1,10 @@
# Getting Started
### Reference Documentation
For further reference, please consider the following sections:
* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html)
* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.7.11/maven-plugin/reference/html/)
* [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.7.11/maven-plugin/reference/html/#build-image)

31
bolt-api/pom.xml

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>bolt-server</artifactId>
<groupId>com.jiluo.bolt</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>bolt-api</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.27</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
</dependencies>
</project>

1012
bolt-api/src/main/java/com/jiluo/bolt/Aladdin/Hasp.java

File diff suppressed because it is too large

94
bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspApiVersion.java

@ -0,0 +1,94 @@
package com.jiluo.bolt.Aladdin;
import java.io.UnsupportedEncodingException;
import com.jiluo.bolt.Aladdin.HaspStatus;
public class HaspApiVersion
{
private int major_version[] = { 0 };
private int minor_version[] = { 0 };
private int build_server[] = { 0 };
private int build_number[] = { 0 };
private int status;
/**
* private native functions
*
*/
private static native int GetVersion(int major_version[],
int minor_version[],
int build_server[],
int build_number[],
byte vendor_code[]);
/**
* IA 64 not considered yet
*/
static
{
HaspStatus.Init();
}
/**
* HaspApiVersion constructor
*
* @param vendor_code The Vendor Code.
*
*/
public HaspApiVersion(String vendor_code)
{
try
{
// Following code is added to ensure that byte array passed to JNI interface
// is NULL terminated. Ideally the JNI GetVersion interface should be accepting
// vendor_code as String like other JNI interface hasp_login, hasp_login_scope etc.
// But changing JNI interface will result in incompatible function signature
// Another solution will be to add new JNI interface
int vc_bytes_count = vendor_code.length();
byte tmp_vendor_code[] = new byte[vc_bytes_count + 1];
System.arraycopy(vendor_code.getBytes("UTF-8"), 0, tmp_vendor_code, 0, vc_bytes_count);
tmp_vendor_code[vc_bytes_count] = 0; // NULL termination
status = GetVersion(major_version, minor_version, build_server, build_number, tmp_vendor_code);
}
catch (UnsupportedEncodingException ex)
{
// cannot happen, so ignore
}
}
/**
* Returns the error that occurred in the last function call.
*/
public int getLastError()
{
return status;
}
/**
* Returns the HASP API major version.
*/
public int majorVersion()
{
return major_version[0];
}
/**
* Returns the HASP API minor version.
*
*/
public int minorVersion()
{
return minor_version[0];
}
/**
* Returns the HASP API build number.
*
*/
public int buildNumber()
{
return build_number[0];
}
}

727
bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspStatus.java

@ -0,0 +1,727 @@
package com.jiluo.bolt.Aladdin;
public class HaspStatus
{
/**
* return codes
*/
/**
* Request successfully completed
*/
public static final int HASP_STATUS_OK = 0;
/**
* Request exceeds memory range of a Sentinel file
*/
public static final int HASP_MEM_RANGE = 1;
/**
* Legacy HASP HL Run-time API: Unknown/Invalid Feature ID option
*/
public static final int HASP_INV_PROGNUM_OPT = 2;
/**
* System is out of memory
*/
public static final int HASP_INSUF_MEM = 3;
/**
* Too many open Features/login sessions
*/
public static final int HASP_TMOF = 4;
/**
* Access to Feature, Sentinel protection key or functionality denied
*/
public static final int HASP_ACCESS_DENIED = 5;
/**
* Legacy decryption function cannot work on Feature
*/
public static final int HASP_INCOMPAT_FEATURE = 6;
/**
* Sentinel protection key not available
*/
public static final int HASP_HASP_NOT_FOUND = 7;
/**
* Deprecated - use HASP_HASP_NOT_FOUND
*/
public static final int HASP_CONTAINER_NOT_FOUND = 7;
/**
* Encrypted/decrypted data length too short to execute function call
*/
public static final int HASP_TOO_SHORT = 8;
/**
* Invalid login handle passed to function
*/
public static final int HASP_INV_HND = 9;
/**
* Specified File ID not recognized by API
*/
public static final int HASP_INV_FILEID = 10;
/**
* Installed driver or daemon too old to execute function
*/
public static final int HASP_OLD_DRIVER = 11;
/**
* Real-time clock (rtc) not available
*/
public static final int HASP_NO_TIME = 12;
/**
* Generic error from host system call
*/
public static final int HASP_SYS_ERR = 13;
/**
* Required driver not installed
*/
public static final int HASP_NO_DRIVER = 14;
/**
* Invalid XML format
*/
public static final int HASP_INV_FORMAT = 15;
/**
* Unable to execute function in this context; the requested
* functionality is not implemented
*/
public static final int HASP_REQ_NOT_SUPP = 16;
/**
* Binary data passed to function does not contain valid update
*/
public static final int HASP_INV_UPDATE_OBJ = 17;
/**
* Sentinel protection key not found
*/
public static final int HASP_KEYID_NOT_FOUND = 18;
/**
* Required XML tags not found; Contents in binary data are missing
* or invalid
*/
public static final int HASP_INV_UPDATE_DATA = 19;
/**
* Update request not supported by Sentinel protection key
*/
public static final int HASP_INV_UPDATE_NOTSUPP = 20;
/**
* Update counter set incorrectly
*/
public static final int HASP_INV_UPDATE_CNTR = 21;
/**
* Invalid Vendor Code passed
*/
public static final int HASP_INV_VCODE = 22;
/**
* Sentinel protection key does not support encryption type
*/
public static final int HASP_ENC_NOT_SUPP = 23;
/**
* Passed time value outside supported value range
*/
public static final int HASP_INV_TIME = 24;
/**
* Real-time clock battery out of power
*/
public static final int HASP_NO_BATTERY_POWER = 25;
/**
* Acknowledge data requested by update, but ack_data parameter
* is NULL
*/
public static final int HASP_NO_ACK_SPACE = 26;
/**
* Program running on a terminal server
*/
public static final int HASP_TS_DETECTED = 27;
/**
* Requested Feature type not implemented
*/
public static final int HASP_FEATURE_TYPE_NOT_IMPL = 28;
/**
* Unknown algorithm used in H2R/V2C file
*/
public static final int HASP_UNKNOWN_ALG = 29;
/**
* Signature verification operation failed
*/
public static final int HASP_INV_SIG = 30;
/**
* Requested Feature not available
*/
public static final int HASP_FEATURE_NOT_FOUND = 31;
/**
* Access log not enabled
*/
public static final int HASP_NO_LOG = 32;
/**
* Communication error between API and local Sentinel License Manager
*/
public static final int HASP_LOCAL_COMM_ERR = 33;
/**
* Vendor Code not recognized by API
*/
public static final int HASP_UNKNOWN_VCODE = 34;
/**
* Invalid XML specification
*/
public static final int HASP_INV_SPEC = 35;
/**
* Invalid XML scope
*/
public static final int HASP_INV_SCOPE = 36;
/**
* Too many Sentinel HASP protection keys currently connected
*/
public static final int HASP_TOO_MANY_KEYS = 37;
/**
* Too many concurrent user sessions currently connected
*/
public static final int HASP_TOO_MANY_USERS = 38;
/**
* Session has been interrupted
*/
public static final int HASP_BROKEN_SESSION = 39;
/**
* Communication error between local and remote HASP License Manager
*/
public static final int HASP_REMOTE_COMM_ERR = 40;
/**
* Feature expired
*/
public static final int HASP_FEATURE_EXPIRED = 41;
/**
* HASP License Manager version too old
*/
public static final int HASP_OLD_LM = 42;
/**
* Input/Output error occurred in secure storage area of HASP SL key OR
* a USB error occurred when communicating with a HASP HL key
*/
public static final int HASP_DEVICE_ERR = 43;
/**
* Update installation not permitted; This update was already applied
*/
public static final int HASP_UPDATE_BLOCKED = 44;
/**
* System time has been tampered with
*/
public static final int HASP_TIME_ERR = 45;
/**
* Communication error occurred in secure channel
*/
public static final int HASP_SCHAN_ERR = 46;
/**
* Corrupt data exists in secure storage area of HASP SL protection key
*/
public static final int HASP_STORAGE_CORRUPT = 47;
/**
* Unable to find Vendor library
*/
public static final int HASP_NO_VLIB = 48;
/**
* Unable to load Vendor library
*/
public static final int HASP_INV_VLIB = 49;
/**
* Unable to locate any Features matching scope
*/
public static final int HASP_SCOPE_RESULTS_EMPTY = 50;
/**
* Program running on a virtual machine
*/
public static final int HASP_VM_DETECTED = 51;
/**
* HASP SL key incompatible with machine hardware; HASP SL key is locked
* to different hardware. OR:
* In the case of a V2C file, conflict between HASP SL key data and machine
* hardware data; HASP SL key locked to different hardware
*/
public static final int HASP_HARDWARE_MODIFIED = 52;
/**
* Login denied because of user restrictions
*/
public static final int HASP_USER_DENIED = 53;
/**
* Trying to install a V2C file with an update counter that is out of
* sequence with the update counter on Sentinel HASP protection key. The
* update counter value in the V2C file is lower than the value in Sentinel
* HASP protection key.
*/
public static final int HASP_UPDATE_TOO_OLD = 54;
/**
* Trying to install a V2C file with an update counter that is out of
* sequence with update counter in Sentinel HASP protection key. The first
* value in the V2C file is greater than the value in Sentinel HASP
* protection key.
*/
public static final int HASP_UPDATE_TOO_NEW = 55;
/**
* Vendor library version too old
*/
public static final int HASP_OLD_VLIB = 56;
/**
* Upload via ACC failed, e.g. because of illegal format
*/
public static final int HASP_UPLOAD_ERROR = 57;
/**
* Invalid XML "recipient" parameter
*/
public static final int HASP_INV_RECIPIENT = 58;
/**
* Invalid XML "action" parameter
*/
public static final int HASP_INV_DETACH_ACTION = 59;
/**
* Scope does not specify a unique Product
*/
public static final int HASP_TOO_MANY_PRODUCTS = 60;
/**
* Invalid Product information
*/
public static final int HASP_INV_PRODUCT = 61;
/**
* Unknown Recipient; update can only be applied to the
* Recipient specified in detach(), and not to this computer
*/
public static final int HASP_UNKNOWN_RECIPIENT = 62;
/**
* Invalid duration
*/
public static final int HASP_INV_DURATION = 63;
/**
* Cloned secure storage area detected
*/
public static final int HASP_CLONE_DETECTED = 64;
/**
* Specified V2C update already installed in the LLM
*/
public static final int HASP_UPDATE_ALREADY_ADDED = 65;
/**
* Specified Hasp Id is in Inactive state
*/
public static final int HASP_HASP_INACTIVE = 66;
/**
* No detachable feature exists
*/
public static final int HASP_NO_DETACHABLE_FEATURE = 67;
/**
* No detachable feature exists (typo; kept for compatibility)
*/
public static final int HASP_NO_DEATCHABLE_FEATURE = 67;
/**
* scope does not specify a unique Host
*/
public static final int HASP_TOO_MANY_HOSTS = 68;
/**
* Rehost is not allowed for any license
*/
public static final int HASP_REHOST_NOT_ALLOWED = 69;
/**
* License is rehosted to other machine
*/
public static final int HASP_LICENSE_REHOSTED = 70;
/**
* Old rehost license try to apply
*/
public static final int HASP_REHOST_ALREADY_APPLIED = 71;
/**
* File not found or access denied
*/
public static final int HASP_CANNOT_READ_FILE = 72;
/**
* Extension of license not allowed as number of detached
* licenses is greater than current concurrency count
*/
public static final int HASP_EXTENSION_NOT_ALLOWED = 73;
/**
* Detach of license not allowed as product
* contains VM disabled feature and host machine is a virtual machine
*/
public static final int HASP_DETACH_DISABLED = 74;
/**
* Rehost of license not allowed as container
* contains VM disabled feature and host machine is a virtual machine
*/
public static final int HASP_REHOST_DISABLED = 75;
/**
* Format SL-AdminMode or migrate SL-Legacy to SL-AdminMode not allowed
* as container has detached license
*/
public static final int HASP_DETACHED_LICENSE_FOUND = 76;
/**
* Recipient of the requested operation is older than expected
*/
public static final int HASP_RECIPIENT_OLD_LM = 77;
/**
* Secure storage ID mismatch
*/
public static final int HASP_SECURE_STORE_ID_MISMATCH = 78;
/**
* Duplicate Hostname found while key contains Hostname Fingerprinting
*/
public static final int HASP_DUPLICATE_HOSTNAME = 79;
/**
* The Sentinel License Manager is required for this operation
*/
public static final int HASP_MISSING_LM = 80;
/**
* Attempting to consume multiple executions during log in to a Feature.
* However, the license for the Feature does not contain enough remaining executions
*/
public static final int HASP_FEATURE_INSUFFICIENT_EXECUTION_COUNT = 81;
/**
* Attempting to perform an operation not compatible with target platform
*/
public static final int HASP_INCOMPATIBLE_PLATFORM = 82;
/**
* The key is disabled due to suspected tampering
*/
public static final int HASP_HASP_DISABLED = 83;
/**
* The key is inaccessible due to sharing
*/
public static final int HASP_SHARING_VIOLATION = 84;
/**
* The session was killed due a network malfunction or manually from ACC
*/
public static final int HASP_KILLED_SESSION = 85;
/**
* Program running on a virtual storage
*/
public static final int HASP_VS_DETECTED = 86;
/**
* An identity is required
*/
public static final int HASP_IDENTITY_REQUIRED = 87;
/**
* The identity is not authenticated
*/
public static final int HASP_IDENTITY_UNAUTHENTICATED = 88;
/**
* The identity is disabled
*/
public static final int HASP_IDENTITY_DISABLED = 89;
/**
* The identity doesn't have enough permission for the operation
*/
public static final int HASP_IDENTITY_DENIED = 90;
/**
* A session for this identity from a different machine already exists
*/
public static final int HASP_IDENTITY_SHARING_VIOLATION = 91;
/**
* The maximum number of machines usable by the identity was reached
*/
public static final int HASP_IDENTITY_TOO_MANY_MACHINES = 92;
/**
* The server is not ready to authenticate
*/
public static final int HASP_IDENTITY_SERVER_NOT_READY = 93;
/**
* Trying to install a V2C file with an update counter that is out of
* sync with update counter in the Sentinel protection key
*/
public static final int HASP_UPDATE_OUT_OF_SYNC = 94;
/**
* Multiple attemps to access the key from remote with a proxy
*/
public static final int HASP_REMOTE_SHARING_VIOLATION = 95;
/**
* The session was released because the seat was requested from a different location
*/
public static final int HASP_CLOUD_SESSION_OCCUPIED_REMOTELY = 96;
/**
* Cloud licensing authorization is required to use this license
*/
public static final int HASP_CLOUD_MISSING_AUTHORIZATION = 97;
/**
* Invalid seat value in network detach. Seat count cannot be decreased when modifying a detach
*/
public static final int HASP_INV_NETWORK_SEATS = 98;
/**
* Network detach is disabled on products with only unlimited concurrency features
*/
public static final int HASP_NETWORK_DETACH_DISABLED = 99;
/**
* The requested cloud functionality is not supported
*/
public static final int HASP_CLOUD_NOT_SUPP = 100;
/**
* Only trusted licenses can be installed in the trusted license storage
*/
public static final int HASP_CLOUD_NOT_TRUSTED = 101;
/**
* Communication error with the license storage
*/
public static final int HASP_CLOUD_STORAGE_COMM_ERR = 102;
/**
* The identity is expired
*/
public static final int HASP_IDENTITY_EXPIRED = 103;
/**
* Invalid option value
*/
public static final int HASP_INV_OPTION = 104;
/**
* Busy error with the license storage
*/
public static final int HASP_CLOUD_STORAGE_BUSY = 105;
/**
* This machine cannot be used
*/
public static final int HASP_MACHINE_DENIED = 106;
/**
* This machine is disabled
*/
public static final int HASP_MACHINE_DISABLED = 107;
/**
* The rate at which identity requests are received exceeds the contracted limit
*/
public static final int HASP_IDENTITY_RATE_LIMIT_EXCEEDED = 108;
/**
* Feature start date not yet reached
*/
public static final int HASP_FEATURE_START_DATE_NOT_REACHED = 109;
/**
* API dispatcher: API for this Vendor Code was not found
*/
public static final int HASP_NO_API_DYLIB = 400;
/**
* API dispatcher: Unable to load API; DLL possibly corrupt?
*/
public static final int HASP_INV_API_DYLIB = 401;
/**
* API dispatcher: Unable to find API function; DLL possibly old?
*/
public static final int HASP_INCOMPLETE_API_DYLIB = 402;
/**
* C++ API: Object incorrectly initialized
*/
public static final int HASP_INVALID_OBJECT = 500;
/**
* Invalid function parameter
*/
public static final int HASP_INV_PARAM = 501;
/**
* C++ API: Logging in twice to the same object
*/
public static final int HASP_ALREADY_LOGGED_IN = 502;
/**
* C++ API: Logging out twice of the same object
*/
public static final int HASP_ALREADY_LOGGED_OUT = 503;
/**
* .NET API: Incorrect use of system or platform
*/
public static final int HASP_OPERATION_FAILED = 525;
/*
* Internal use: no classic memory extension block available
*/
public static final int HASP_NO_EXTBLOCK = 600;
/*
* Internal use: invalid port type
*/
public static final int HASP_INV_PORT_TYPE = 650;
/*
* Internal use: invalid port value
*/
public static final int HASP_INV_PORT = 651;
/*
* Dot-Net DLL found broken
*/
public static final int HASP_NET_DLL_BROKEN = 652;
/**
* Requested function not implemented
*/
public static final int HASP_NOT_IMPL = 698;
/**
* Internal error occurred in API
*/
public static final int HASP_INT_ERR = 699;
/*
* Reserved for Sentinel helper libraries
*/
public static final int HASP_FIRST_HELPER = 2001;
/*
* Reserved for Sentinel Activation API
*/
public static final int HASP_FIRST_HASP_ACT = 3001;
public static final int HASP_NEXT_FREE_VALUES = 7001;
public static String runtime_library_default = "HASPJava";
public static String runtime_library_x64_windows = "HASPJava_x64";
public static String runtime_library_x64_linux = "HASPJava_x86_64";
public static String runtime_library_armhf_linux = "HASPJava_armhf";
public static String runtime_library_arm64_linux = "HASPJava_arm64";
public static void Init()
{
String operatingSystem = System.getProperty("os.name");
String architecture = System.getProperty("os.arch");
try
{
if (operatingSystem.indexOf("Windows") != -1)
{
if (architecture.equals("x86_64") || architecture.equals("amd64"))
{
System.loadLibrary(runtime_library_x64_windows);
}
else
{
System.loadLibrary(runtime_library_default);
}
}
else if (operatingSystem.indexOf("Linux") != -1)
{
if (architecture.equals("x86_64") || architecture.equals("amd64"))
{
System.loadLibrary(runtime_library_x64_linux);
}
else if (architecture.equals("arm"))
{
System.loadLibrary(runtime_library_armhf_linux);
}
else if (architecture.equals("aarch64"))
{
System.loadLibrary(runtime_library_arm64_linux);
}
else
{
System.loadLibrary(runtime_library_default);
}
}
else
{
System.loadLibrary(runtime_library_default);
}
}
catch (UnsatisfiedLinkError e)
{
if (e.getMessage().indexOf("already loaded in another classloader") == -1)
{
throw e;
}
}
}
}

118
bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspTime.java

@ -0,0 +1,118 @@
package com.jiluo.bolt.Aladdin;
import com.jiluo.bolt.Aladdin.HaspStatus;
public class HaspTime
{
private long time[] = {0};
private int day[] = {0};
private int month[] = {0};
private int year[] = {0};
private int hour[] = {0};
private int minute[] = {0};
private int second[] = {0};
private int status;
/*
* private native functions
*
*/
private static native int DatetimeToHasptime(int day, int month, int year, int hour, int minute, int second, long time[]);
private static native int HasptimeToDatetime(long time, int day[], int month[], int year[],int hour[], int minute[], int second[]);
/**
* IA 64 not considered yet
*/
static
{
HaspStatus.Init();
}
/**
* HaspTime constructor.
*
* @param year input year
* @param month input month
* @param day input day
* @param hour input hour
* @param minute input minute
* @param second input second
*
*/
public HaspTime(int year, int month, int day, int hour,
int minute, int second)
{
status = DatetimeToHasptime(day, month, year, hour, minute, second, time);
}
public HaspTime(long hasptime)
{
time[0] = hasptime;
status = HasptimeToDatetime(hasptime,day,month,year,hour,minute,second);
}
/**
* Returns the error that occurred in the last function call.
*/
public int getLastError()
{
return status;
}
/**
* Returns the HASP Time value in UTC format.
*/
public long getHaspTime()
{
return time[0];
}
/**
* Returns the month value of the time.
*/
public int getMonth()
{
return month[0];
}
/**
* Returns the year value of the time.
*/
public int getYear()
{
return year[0];
}
/**
* Returns the day value of the time.
*/
public int getDay()
{
return day[0];
}
/**
* Returns the hour value of the time.
*/
public int getHour()
{
return hour[0];
}
/**
* Returns the minute value of the time.
*/
public int getMinute()
{
return minute[0];
}
/**
* Returns the second value of the time.
*/
public int getSecond()
{
return second[0];
}
}

23
bolt-api/src/main/java/com/jiluo/bolt/common/BigDecimalValueFilter.java

@ -0,0 +1,23 @@
package com.jiluo.bolt.common;
import com.alibaba.fastjson.serializer.ValueFilter;
import java.math.BigDecimal;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/04/28/9:40
* @Description:
*/
public class BigDecimalValueFilter implements ValueFilter {
@Override
public Object process(Object object, String name, Object value) {
if (value instanceof BigDecimal) {
value = ((BigDecimal) value).setScale(2, BigDecimal.ROUND_HALF_EVEN);
return String.format("%.2f", value);
}
return value;
}
}

35
bolt-api/src/main/java/com/jiluo/bolt/common/CameraDriverEnum.java

@ -0,0 +1,35 @@
package com.jiluo.bolt.common;
import lombok.Getter;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/10/17/10:33
* @Description:
*/
@Getter
public enum CameraDriverEnum {
LucidCamera("lucid_camera","Lucid"),
BaslerCamera("basler_camera","Basler"),
BaumerCamera("baumer_camera","Baumer");
String vender;
String driverName;
CameraDriverEnum(String vender, String driverName){
this.vender = vender;
this.driverName = driverName;
}
public static String getDriverName(String vender){
for (CameraDriverEnum driver: CameraDriverEnum.values()) {
if (driver.getVender().equals(vender)){
return driver.getDriverName();
}
}
return null;
}
}

50
bolt-api/src/main/java/com/jiluo/bolt/common/DefectType.java

@ -0,0 +1,50 @@
package com.jiluo.bolt.common;
import lombok.Getter;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/04/27/14:12
* @Description:检测结果缺陷类型
*/
@Getter
public enum DefectType {
bolt("螺栓松动", DetectType.BOLT_AND_LINE, 0),
line("引出线变形", DetectType.BOLT_AND_LINE, 0),
pole("磁极开闸", DetectType.BOLT_AND_LINE, 0),
temperature("无线测温", DetectType.TEMPERATURE, 0);
@Getter
String desc;
@Getter
DetectType detectType;
@Getter
BigDecimal defaultValue;
DefectType(String desc, DetectType detectType, int defaultValue) {
this.desc = desc;
this.detectType = detectType;
this.defaultValue = new BigDecimal(defaultValue).setScale(2, RoundingMode.HALF_UP);
}
public static DefectType toDefectType(String type) {
return Arrays.stream(DefectType.values()).filter(_t -> _t.getDesc().equalsIgnoreCase(type) || _t.name().equalsIgnoreCase(type)).findFirst().orElse(null);
}
public static List<DefectType> defectTypes(String product) {
return Arrays.stream(DefectType.values()).filter(_t -> _t.getDetectType().getProduct().equalsIgnoreCase(product)).collect(Collectors.toList());
}
}

38
bolt-api/src/main/java/com/jiluo/bolt/common/DetectAttribute.java

@ -0,0 +1,38 @@
package com.jiluo.bolt.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/05/11/16:12
* @Description:检测结果描述
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DetectAttribute {
private String productId;
private String productName;
private Integer detectZone;
private Integer detectTotal;
private Integer detectDuration;
private Integer defectTotal;
private Map<String, List<Integer>> defectZone;
private String detectTrack;
}

68
bolt-api/src/main/java/com/jiluo/bolt/common/DetectConfig.java

@ -0,0 +1,68 @@
package com.jiluo.bolt.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/05/11/14:19
* @Description:检测参数配置
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DetectConfig {
private Boolean bolt;
private Boolean line;
private Boolean pole;
private Boolean temp;
private Double detect_threshold_bolt;
private Double detect_threshold_line;
private Double detect_threshold_pole;
private Double detect_threshold_temperature;
private Integer detect_duration;
private Integer detect_work_zone;
private String defect_work_dir;
private Integer delayDetect;
private String plc_ip;
private Integer plc_delay;
private String serial_number;
private Integer width;
private Integer height;
private Double fps;
private Double exposureTime;
private String jobId;
private String algorithm_id;
private String algorithm_type;
private String algorithm_name;
private String algorithm_model;
}

34
bolt-api/src/main/java/com/jiluo/bolt/common/DetectJob.java

@ -0,0 +1,34 @@
package com.jiluo.bolt.common;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/03/19:56
* @Description:检测任务
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DetectJob {
private String jobId;
private String powerStation;
private String motorGroup;
private String point;
private String deviceId;
private JSONObject attribute;
private JSONObject config;
/**
* 当前的检测状态 0-检测结束结果正常1-检测结束结果异常2-检测过程中程序错误3-检测中
*/
private Integer status;
}

25
bolt-api/src/main/java/com/jiluo/bolt/common/DetectMessage.java

@ -0,0 +1,25 @@
package com.jiluo.bolt.common;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/09/18/16:24
* @Description:检测结果Websocket消息队列
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DetectMessage {
private String pointId;
private JSONObject jsonObject;
}

26
bolt-api/src/main/java/com/jiluo/bolt/common/DetectResult.java

@ -0,0 +1,26 @@
package com.jiluo.bolt.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/10/11:08
* @Description:统一检测结果
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DetectResult {
private int zone; // 区域, 如: 1号扇区
private int position; // 位置, 如: 3号螺栓,5号引出线
private String type; // 类型, 如:螺栓,引出线
private Float value; // 检测值
private String img;
private int alarm;
}

50
bolt-api/src/main/java/com/jiluo/bolt/common/DetectResultKey.java

@ -0,0 +1,50 @@
package com.jiluo.bolt.common;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/26/14:07
* @Description:
*/
public class DetectResultKey {
private int zone;
private int position;
private String type;
public DetectResultKey(DetectResult detect) {
this.zone = detect.getZone();
this.position = detect.getPosition();
this.type = detect.getType();
}
// 实现hashCode()和equals()方法以便正确操作HashMap
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + zone;
result = prime * result + position;
result = prime * result + ((type == null) ? 0 : type.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
DetectResultKey other = (DetectResultKey) obj;
if (zone != other.zone)
return false;
if (position != other.position)
return false;
if (type == null) {
if (other.type != null)
return false;
} else if (!type.equals(other.type))
return false;
return true;
}
}

34
bolt-api/src/main/java/com/jiluo/bolt/common/DetectType.java

@ -0,0 +1,34 @@
package com.jiluo.bolt.common;
import lombok.Getter;
import java.util.Arrays;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/04/27/14:14
* @Description:检测类型
*/
@Getter
public enum DetectType {
BOLT_AND_LINE("BOLT_AND_LINE", "螺栓引出线磁极开闸检测"),
TEMPERATURE("TEMPERATURE", "无线测温");
@Getter
String desc;
@Getter
String product;
DetectType(String product, String desc) {
this.desc = desc;
this.product = product;
}
public static DetectType toDetectType(String type) {
return Arrays.stream(DetectType.values()).filter(_t -> _t.getProduct().equalsIgnoreCase(type) || _t.name().equalsIgnoreCase(type)).findFirst().orElse(null);
}
}

28
bolt-api/src/main/java/com/jiluo/bolt/common/LocalStatus.java

@ -0,0 +1,28 @@
package com.jiluo.bolt.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/19/10:06
* @Description:设备状态-内存存储
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LocalStatus {
private static final long serialVersionUID = 1L;
private Integer cameraStatus; //相机设备状态:0-停用,1-正常,2-离线
private Integer pointStatus; //检测点状态:0-检测正常,1-检测异常,2-设备掉线
private Integer tempSensorStatus; //温度传感器状态:0-停用,1-正常,2-离线
}

28
bolt-api/src/main/java/com/jiluo/bolt/common/PermissionValue.java

@ -0,0 +1,28 @@
package com.jiluo.bolt.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/06/11:12
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PermissionValue implements Serializable {
private static final long serialVersionUID = 1L;
private String permissionId;
private Boolean value;
}

39
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmConfigDto.java

@ -0,0 +1,39 @@
package com.jiluo.bolt.entity.dto;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.List;
/**
* (AlgorithmConfig)表实体类
*
* @author Fangy
* @since 2023-05-08 17:46:48
*/
@Data
@Builder
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class AlgorithmConfigDto implements Serializable {
private static final long serialVersionUID = 1L;
private String algorithmConfigId;
private String name;
private Double boltThreshold;
private Double lineThreshold;
@DateTimeFormat(pattern = "HH:mm")
private List<String> dailyAutoDetectionTime;
private Integer delayDetect;
private List<String> pointIdList;
}

41
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmDto.java

@ -0,0 +1,41 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/03/15:43
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AlgorithmDto implements Serializable {
private static final long serialVersionUID = 1L;
private String algorithmId;
private String source;
private String algorithmName;
private String algorithmFileName;
private String powerStationId;
private String motorGroupId;
private String pointId;
List<PointDto> points;
}

26
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmModelDto.java

@ -0,0 +1,26 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/05/15/16:59
* @Description:
*/
@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class AlgorithmModelDto {
private String detect_threshold_model;
private String detect_threshold_bk;
}

53
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectDto.java

@ -0,0 +1,53 @@
package com.jiluo.bolt.entity.dto;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Builder;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 检测过程表(Detect)实体类
*
* @author Fangy
* @since 2023-05-05 09:57:05
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DetectDto implements Serializable {
private static final long serialVersionUID = -11167425972916095L;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private String startTime;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private String endTime;
Integer current;
Integer size;
private Integer id;
private String powerStationId;
private String motorGroupId;
private String pointId;
private String jobId;
private Integer zone;
private Integer status;
private List<String> features;
private List<String> jobs;
}

30
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectResultDto.java

@ -0,0 +1,30 @@
package com.jiluo.bolt.entity.dto;
import com.jiluo.bolt.common.DetectResult;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/14/16:56
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DetectResultDto implements Serializable {
private static final long serialVersionUID = 1L;
private String jobId;
private List<DetectResult> detectList;
}

92
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DeviceDto.java

@ -0,0 +1,92 @@
package com.jiluo.bolt.entity.dto;
import java.math.BigDecimal;
import java.util.Date;
import java.io.Serializable;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Builder;
import org.hibernate.validator.constraints.Length;
/**
* 设备信息表(Device)实体类
*
* @author Fangy
* @since 2023-05-05 09:57:05
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class DeviceDto implements Serializable {
private static final long serialVersionUID = -34441038340206111L;
private Date gmtCreate;
private Date gmtModify;
private Integer id;
/**
* 设备编号
*/
@Length(max=50,message = "输入长度应小于{max}字")
private String deviceId;
/**
* 设备类别
*/
private String type;
/**
* 设备名称
*/
@Length(max=50,message = "输入长度应小于{max}字")
private String name;
/**
* 关联电站
*/
private String powerStationId;
/**
* 关联检测类型
*/
private String product;
/**
* 关联机组
*/
private String motorGroupId;
/**
* 关联检测点位
*/
private String pointId;
/**
* 设备状态0-停用,1-正常,2-离线
*/
private Integer status;
/**
* 工作保护温度
*/
private BigDecimal tempThreshold;
/**
* 设备配置属性
*/
private String config;
/**
* 标识厂商
*/
private String nameOrSN;
private String sn;
private String vender;
private Double fps;
private Double exposureTime;
@Length(max=50,message = "输入长度应小于{max}字")
private String plcIp;
private Integer plcDelay;
}

23
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/IdToNameDto.java

@ -0,0 +1,23 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/06/15/14:59
* @Description:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class IdToNameDto {
private static final long serialVersionUID = -18677499673088561L;
private String id;
private String name;
}

23
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ImgDto.java

@ -0,0 +1,23 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/06/06/15:27
* @Description:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ImgDto {
private static final long serialVersionUID = -18677499673088561L;
private String jobId;
private String img;
}

38
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/MotorGroupDto.java

@ -0,0 +1,38 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import java.io.Serializable;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/06/26/15:08
* @Description:
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class MotorGroupDto implements Serializable {
private static final long serialVersionUID = 1L;
private String powerStationId;
private String motorGroupId;
@Length(max=50,message = "输入长度应小于{max}字")
private String number;
@Length(max=50,message = "输入长度应小于{max}字")
private String contact;
@Length(max=50,message = "输入长度应小于{max}字")
private String phone;
}

30
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PermissionDto.java

@ -0,0 +1,30 @@
package com.jiluo.bolt.entity.dto;
import com.jiluo.bolt.common.PermissionValue;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/06/11:06
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PermissionDto implements Serializable {
private static final long serialVersionUID = 1L;
private String roleId;
private List<PermissionValue> permissionList;
}

56
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PointDto.java

@ -0,0 +1,56 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/06/27/10:18
* @Description:
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PointDto implements Serializable {
private static final long serialVersionUID = 1L;
private String powerStationId;
private String motorGroupId;
private String pointId;
@Length(max=10,message = "输入长度应小于{max}字")
private String name;
@Min(value = 1, message = "磁极数量应大于1个")
@Max(value = 999, message = "磁极数量应小于999个")
private Integer poleNum;
@DecimalMin(value = "0.0", inclusive = false, message = "检测时长应大于0s")
@DecimalMax(value = "600.0", inclusive = false, message = "检测时长应小于600s")
private BigDecimal manualTime;
@DecimalMin(value = "0.0", inclusive = false, message = "检测时长应大于0s")
@DecimalMax(value = "600.0", inclusive = false, message = "检测时长应小于600s")
private BigDecimal automaticTime;
private Boolean boltDetect;
private Boolean lineDetect;
private Boolean poleOpenDetect;
private Boolean pointTempDetect;
}

45
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PowerStationDto.java

@ -0,0 +1,45 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/06/26/10:10
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PowerStationDto implements Serializable {
private static final long serialVersionUID = 1L;
private String powerStationId;
@NotBlank(message = "名称不能为空")
@Length(max=50,message = "输入长度应小于{max}字")
private String name;
@Length(max=50,message = "输入长度应小于{max}字")
private String address;
@Length(max=50,message = "输入长度应小于{max}字")
private String contact;
@Length(max=50,message = "输入长度应小于{max}字")
private String phone;
@Length(max=200,message = "输入长度应小于{max}字")
private String introduction;
}

30
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/RoleDto.java

@ -0,0 +1,30 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/06/9:59
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RoleDto implements Serializable {
private static final long serialVersionUID = 1L;
private String roleId;
private String roleName;
}

40
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/SystemInfoConfigDto.java

@ -0,0 +1,40 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import java.io.Serializable;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/05/13:08
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SystemInfoConfigDto implements Serializable {
private static final long serialVersionUID = 1L;
private String systemInfoId;
private String systemInfoName;
private String logoFileName;
@Length(max=10,message = "输入长度应小于{max}字")
private String systemName;
List<String> powerStations;
private String reservedField;
}

60
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempSenserDto.java

@ -0,0 +1,60 @@
package com.jiluo.bolt.entity.dto;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import java.io.Serializable;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/11/16:41
* @Description:
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TempSenserDto implements Serializable {
private static final long serialVersionUID = 1L;
private String deviceId;
@Length(max=50,message = "输入长度应小于{max}字")
private String name;
private String serialPort;
private String nameOrSerialPort;
private String type;
private String powerStationId;
private String motorGroupId;
private String pointId;
private String powerStation;
private String Group_Point;
private String relatedDeviceId;
private String relatedDevice;
private Integer status;
private String typeId;
private String jobId;
private Double value;
private JSONObject config;
}

34
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempThresholdDto.java

@ -0,0 +1,34 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/05/10/15:33
* @Description:
*/
@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class TempThresholdDto {
private static final long serialVersionUID = 1L;
private String tempThresholdId;
private String name;
private BigDecimal tempThreshold;
private List<IdToNameDto> deviceIdList;
}

46
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ThemeConfigDto.java

@ -0,0 +1,46 @@
package com.jiluo.bolt.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/05/15:58
* @Description:
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ThemeConfigDto implements Serializable {
private static final long serialVersionUID = 1L;
private String themeId;
private String themeName;
private String primary;
private String primary_btn_color;
private String bg_color;
private String border_color;
private String nav_bg;
private String text_color;
private String desc_color;
private String thead_bg;
private String tag_bg;
private String tag_color;
private String card_text_color;
private String card_hd_bg_color;
private String corner_color;
private String title_color;
List<String> powerStationList;
}

54
bolt-api/src/main/java/com/jiluo/bolt/entity/dto/UserDto.java

@ -0,0 +1,54 @@
package com.jiluo.bolt.entity.dto;
import java.util.Date;
import java.io.Serializable;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Builder;
import org.hibernate.validator.constraints.Length;
/**
* 用户信息表(User)实体类
*
* @author Fangy
* @since 2023-05-05 09:57:05
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserDto implements Serializable {
private static final long serialVersionUID = -18677499673088561L;
private Date gmtCreate;
private Date gmtModify;
private Integer id;
/**
* 用户编号
*/
@Length(max=50,message = "输入长度应小于{max}字")
private String uid;
/**
* 用户姓名
*/
@Length(max=50,message = "输入长度应小于{max}字")
private String userName;
/**
* 用户密码
*/
@Length(max=50,message = "输入长度应小于{max}字")
private String password;
/**
* 用户类型
*/
private String role;
private String clientVersion;
private String clientType;
}

35
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/AlgorithmVo.java

@ -0,0 +1,35 @@
package com.jiluo.bolt.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/03/15:37
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AlgorithmVo {
private String AlgorithmId;
private String name;
private String source;
private Integer group_point_num;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date gmtCreate;
}

41
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DefectVo.java

@ -0,0 +1,41 @@
package com.jiluo.bolt.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.jiluo.bolt.common.DefectType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/04/21/18:35
* @Description:检测结果
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DefectVo {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date time;
private DefectType type;
private Integer zone;
private Integer position;
private String img;
private BigDecimal value;
private Boolean alarm;
}

56
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DeviceVo.java

@ -0,0 +1,56 @@
package com.jiluo.bolt.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/06/28/15:22
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeviceVo {
private String deviceId;
private String name;
private String sn;
private String plcIp;
private String powerStationId;
private String motorGroupId;
private String pointId;
private String powerStation;
private String Group_Point;
private Double fps;
private Double exposureTime;
private Integer status;
private String venderId;
private String vender;
private Integer plcDelay;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date gmtCreate;
}

28
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DropDownVo.java

@ -0,0 +1,28 @@
package com.jiluo.bolt.entity.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/03/11:51
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DropDownVo {
private String powerStationId;
private String motorGroupId;
private String pointId;
private String name;
}

39
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/HistoricalDataVo.java

@ -0,0 +1,39 @@
package com.jiluo.bolt.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/04/21/17:01
* @Description:历史数据
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class HistoricalDataVo {
private String jobId;
private String motorGroup;
private String point;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date gmtCreate;
private String type;
private Integer status;
private String info;
}

39
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/MotorGroupVo.java

@ -0,0 +1,39 @@
package com.jiluo.bolt.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/06/26/15:16
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MotorGroupVo {
private String motorGroupId;
private String name;
private String powerStationId;
private String powerStation;
private Integer pointNum;
private String contact;
private String phone;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date gmtCreate;
}

29
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PermissionVo.java

@ -0,0 +1,29 @@
package com.jiluo.bolt.entity.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/06/10:55
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PermissionVo {
private String permissionId;
private String permissionName;
private boolean value;
//应用范围 0-前端检测系统权限;1-后台管理系统权限
private Integer scope;
}

52
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PointVo.java

@ -0,0 +1,52 @@
package com.jiluo.bolt.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/06/27/10:38
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PointVo {
private String pointId;
private String name;
private String motorGroupId;
private String motorGroup;
private String powerStationId;
private String powerStation;
private Integer poleNum;
private Boolean boltDetect;
private Boolean lineDetect;
private Boolean poleOpenDetect;
private Boolean pointTempDetect;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date gmtCreate;
private Integer manualTime;
private Integer automaticTime;
}

39
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PowerStationVo.java

@ -0,0 +1,39 @@
package com.jiluo.bolt.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/06/26/10:06
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PowerStationVo {
private String powerStationId;
private String name;
private String address;
private Integer groupNum;
private String contact;
private String phone;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date gmtCreate;
private String introduction;
}

46
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/RoleVo.java

@ -0,0 +1,46 @@
package com.jiluo.bolt.entity.vo;
import java.io.Serializable;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Builder;
/**
* 角色信息表(Role)实体类
*
* @author Fangy
* @since 2023-05-05 09:57:05
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RoleVo implements Serializable {
private static final long serialVersionUID = -63387953100329487L;
/**
* 权限编号
*/
private String roleId;
/**
* 权限名称
*/
private String name;
/**
* 权限值
*/
private Object value;
private Integer scope;
/**
* 0-菜单权限1-检测功能权限2-机组权限
*/
private Integer type;
}

38
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/SystemInfoConfigVo.java

@ -0,0 +1,38 @@
package com.jiluo.bolt.entity.vo;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/05/14:41
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SystemInfoConfigVo {
private String systemInfoId;
private String systemInfoName;
private String logoImg;
private String logoFileName;
private String systemName;
private List<JSONObject> powerStations;
private String reservedField;
}

52
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/TempSenserVo.java

@ -0,0 +1,52 @@
package com.jiluo.bolt.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/11/16:38
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TempSenserVo {
private String deviceId;
private String name;
private String serialPort;
private String typeId;
private String type;
private String powerStationId;
private String motorGroupId;
private String pointId;
private String powerStation;
private String Group_Point;
private String relatedDeviceId;
private String relatedDevice;
private Integer status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date gmtCreate;
}

39
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/ThemeConfigVo.java

@ -0,0 +1,39 @@
package com.jiluo.bolt.entity.vo;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/05/15:48
* @Description:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ThemeConfigVo {
private String themeId;
private String themeName;
private String themeColor;
private String textColor;
private String topMenuSelectColor;
private String secondMenuSelectColor;
private String guideColor;
List<JSONObject> powerStations;
}

49
bolt-api/src/main/java/com/jiluo/bolt/entity/vo/UserVo.java

@ -0,0 +1,49 @@
package com.jiluo.bolt.entity.vo;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Builder;
/**
* 用户信息表(User)实体类
*
* @author Fangy
* @since 2023-05-05 09:57:05
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserVo {
@JsonInclude(JsonInclude.Include.NON_NULL)
private Integer id;
/**
* 用户编号
*/
private String uid;
/**
* 用户姓名
*/
private String userName;
/**
* 用户类型
*/
private String role;
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<RoleVo> permissionList;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date gmtCreate;
private String password;
}

76
bolt-core/pom.xml

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>bolt-server</artifactId>
<groupId>com.jiluo.bolt</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>bolt-core</artifactId>
<dependencies>
<dependency>
<groupId>com.jiluo.bolt</groupId>
<artifactId>bolt-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.jiluo.bolt</groupId>
<artifactId>bolt-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- jwt生成token的库 -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
</dependency>
<!-- hutool工具类-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
</dependency>
<!-- easyExcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
</project>

44
bolt-core/src/main/java/com/jiluo/bolt/config/MinioConfig.java

@ -0,0 +1,44 @@
package com.jiluo.bolt.config;
import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/10/13/14:35
* @Description:
*/
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
// endPoint是一个URL,域名,IPv4或者IPv6地址
private String endpoint;
// TCP/IP端口号
private int port;
private String accessKey;
private String secretKey;
// 如果是true,则用的是https而不是http,默认值是true
private Boolean secure;
// 默认存储桶
private String bucketName;
@Bean
public MinioClient getMinioClient() throws InvalidEndpointException, InvalidPortException {
MinioClient minioClient = new MinioClient(endpoint, port, accessKey, secretKey, secure);
return minioClient;
}
}

110
bolt-core/src/main/java/com/jiluo/bolt/config/UploadFile.java

@ -0,0 +1,110 @@
package com.jiluo.bolt.config;
import cn.hutool.core.io.file.FileNameUtil;
import com.jiluo.bolt.service.MinioService;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/10/13/14:55
* @Description:
*/
@Component
public class UploadFile {
@Autowired
private MinioService minioService;
@Autowired
private MinioConfig minioConfig;
@SneakyThrows
public void uploadFile(MultipartFile file, String bucketName) {
// 获取存储桶名称
bucketName = StringUtils.isNotBlank(bucketName) ? bucketName : minioConfig.getBucketName();
// 判断是否存在该存储桶
if (!minioService.bucketExists(bucketName)) {
// 不存在则创建
minioService.makeBucket(bucketName);
// 设置存储桶读写策略
String bucketPolicy = "{\"Version\":\"2023-10-10\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]}," +
"\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" +
bucketName + "\"]}," +
"{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::"
+ bucketName + "/*\"]}]}";
// 设置存储桶策略
minioService.setBucketPolicy(bucketName, bucketPolicy);
}
// 原始文件名
String fileName = file.getOriginalFilename();
// 获取文件后缀名
String extName = FileNameUtil.extName(fileName);
// 定义文件路径
String format = new SimpleDateFormat("yyyy/MM/dd/").format(new Date());
// 定义文件修改之后的名字,去除uuid中的' - '
String fileuuid = UUID.randomUUID().toString().replaceAll("-", "");
// 定义新的文件名
//String objectName = format + fileuuid + "." + extName;
String objectName = format + fileName;
//上传文件
minioService.putObject(bucketName, file, objectName);
}
@SneakyThrows
public void uploadFiles(List<MultipartFile> files) {
// 获取存储桶名称
String bucketName = minioConfig.getBucketName();
// 判断是否存在该存储桶
if (!minioService.bucketExists(bucketName)) {
// 不存在则创建
minioService.makeBucket(bucketName);
// 设置存储桶读写策略
String bucketPolicy = "{\"Version\":\"2023-10-10\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]}," +
"\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" +
bucketName + "\"]}," +
"{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::"
+ bucketName + "/*\"]}]}";
// 设置存储桶策略
minioService.setBucketPolicy(bucketName, bucketPolicy);
}
for (MultipartFile file : files) {
//上传文件
minioService.putObject(bucketName, file, file.getOriginalFilename());
}
}
@SneakyThrows
public void uploadFile(String objectName, InputStream stream, String contentType) {
String bucketName = minioConfig.getBucketName();
if (!minioService.bucketExists(bucketName)) {
minioService.makeBucket(bucketName);
String bucketPolicy = "{\"Version\":\"2023-10-10\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]}," +
"\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" +
bucketName + "\"]}," +
"{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::"
+ bucketName + "/*\"]}]}";
minioService.setBucketPolicy(bucketName, bucketPolicy);
}
minioService.putObject(bucketName, objectName, stream, contentType);
}
}

41
bolt-core/src/main/java/com/jiluo/bolt/domain/DefectInfo.java

@ -0,0 +1,41 @@
package com.jiluo.bolt.domain;
import com.alibaba.fastjson.annotation.JSONField;
import com.jiluo.bolt.common.DefectType;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/28/13:39
* @Description:
*/
@Data
@Builder
@EqualsAndHashCode(of = {"type", "zone", "position", "time"})
public class DefectInfo {
private DefectType type;
private Integer zone;
private Integer position;
private BigDecimal value;
private Boolean alarm;
private Date time;
@JSONField(serialize = false)
private String file;
public void setValue(BigDecimal value) {
this.value = value;
}
public BigDecimal getValue() {
return this.value;
}
}

127
bolt-core/src/main/java/com/jiluo/bolt/export/Analysis.java

@ -0,0 +1,127 @@
package com.jiluo.bolt.export;
import com.jiluo.bolt.common.DefectType;
import com.jiluo.bolt.common.DetectType;
import com.jiluo.bolt.domain.DefectInfo;
import com.jiluo.bolt.entity.po.*;
import com.jiluo.bolt.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.Range;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/28/15:04
* @Description:
*/
@Slf4j
@Component
public class Analysis {
@Resource
PointService pointService;
@Resource
MotorGroupService motorGroupService;
@Resource
PowerStationService powerStationService;
@Resource
JobService jobService;
@Resource
DefectService defectService;
@Value("${defect_work_dir}")
private String defect_work_dir;
public Report report(String pointId, List<String> jobs) {
Pair<List<Date>, List<DefectInfo>> data = load(pointId, jobs, null,null);
if (data.getKey().isEmpty()) {
data.getKey().add(new Date());
}
return analysis(pointId, data.getKey(), data.getValue());
}
public Report report(String pointId, Range<Date> dateRange, Integer status) {
Pair<List<Date>, List<DefectInfo>> data = load(pointId, null, dateRange, status);
if (data.getKey().isEmpty()) {
data.getKey().add(dateRange.getMinimum());
data.getKey().add(dateRange.getMaximum());
}
return analysis(pointId, data.getKey(), data.getValue());
}
private Report analysis(String pointId, List<Date> timeDim, List<DefectInfo> defects) {
Point _point = pointService.getByBizId(pointId);
MotorGroup _motorGroup = motorGroupService.getByBizId(_point.getMotorGroup());
PowerStation _powerStation = powerStationService.getByBizId(_point.getPowerStation());
return Report.builder().powerStationName(_powerStation.getName()).groupName(_motorGroup.getName())
.pointName(_point.getName())
.timeDimensions(timeDim).zoneDimensions(zoneDim(_point.getPoleNum())).typeDimensions(typeDim())
.allDefectData(defects.parallelStream().collect(Collectors.groupingBy(DefectInfo::getType)))
.build()
.generate();
}
private List<DefectType> typeDim() {
return DefectType.defectTypes(DetectType.BOLT_AND_LINE.getProduct());
}
private List<Integer> zoneDim(Integer zone) {
return IntStream.rangeClosed(1, zone).boxed().collect(Collectors.toList());
}
private Pair<List<Date>, List<DefectInfo>> load(String pointId, List<String> jobs, Range<Date> dateRange, Integer status) {
List<Job> jobList = new ArrayList<>();
List<Defect> defectList = new ArrayList<>();
if (!CollectionUtils.isEmpty(jobs)) {
jobList = jobService.getByBizId(jobs);
defectList = defectService.getByJob(jobs);
}
if (dateRange != null) {
jobList = jobService.exportData(dateRange.getMinimum(), dateRange.getMaximum());
defectList = defectService.exportData(pointId,dateRange.getMinimum(), dateRange.getMaximum(),status);
}
return apply(jobList, defectList);
}
private Pair<List<Date>, List<DefectInfo>> apply(List<Job> jobs, List<Defect> defects) {
Map<String, Date> _job = jobs.stream().collect(Collectors.toMap(Job::getJobId, Job::getGmtCreate));
List<DefectInfo> _defects = defects.stream().map(defect -> {
DefectType type = DefectType.toDefectType(defect.getType());
BigDecimal value = (type == DefectType.bolt || type == DefectType.temperature) ? BigDecimal.valueOf(defect.getValue() / 100.0).setScale(2, RoundingMode.HALF_UP) : (type == DefectType.line ? BigDecimal.valueOf(defect.getValue() / 1000.0).setScale(3, RoundingMode.HALF_UP) : BigDecimal.valueOf(defect.getValue()));
return DefectInfo.builder()
.time(_job.get(defect.getJob()))
.type(type)
.alarm(BooleanUtils.toBoolean(defect.getAlarm()))
.zone(defect.getZone())
.position(defect.getPosition())
.value(value)
.file(DetectType.BOLT_AND_LINE == type.getDetectType() ? String.format("ipc:%s/%s/%s/%s", defect_work_dir, defect.getJob(), "/detect/", defect.getData()) : null)
.build();
})
.filter(x -> x.getZone() != null && x.getType() != null && x.getPosition() != null && x.getValue() != null && x.getTime() != null)
.sorted(Comparator.comparing(DefectInfo::getTime).thenComparing(DefectInfo::getZone).thenComparing(DefectInfo::getType).thenComparing(DefectInfo::getPosition)).collect(Collectors.toList());
List<Date> timeDim = jobs.parallelStream().map(Job::getGmtCreate).distinct().sorted(Date::compareTo).collect(Collectors.toList());
return Pair.of(timeDim, _defects);
}
}

136
bolt-core/src/main/java/com/jiluo/bolt/export/Export.java

@ -0,0 +1,136 @@
package com.jiluo.bolt.export;
import com.jiluo.bolt.entity.po.*;
import com.jiluo.bolt.service.*;
import com.jiluo.bolt.util.ExcelUtils;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.Range;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.time.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/07/28/14:38
* @Description:报告导出
*/
@Slf4j
@Component
public class Export {
private static String AUTO_EXPORT_PATH = "/data/work/report";
private static Integer AUTO_EXPORT_PERIOD = 30;
@Resource
Analysis analysis;
@Resource
PointService pointService;
@Resource
ConfigService configService;
@PostConstruct
private void init() {
Config report_auto_export_dir = configService.selectByBizId("report_auto_export_dir");
Config report_auto_export_time = configService.selectByBizId("report_auto_export_time");
if (report_auto_export_time != null) {
AUTO_EXPORT_PERIOD = NumberUtils.toInt(report_auto_export_time.getValue());
}
if (report_auto_export_dir != null) {
AUTO_EXPORT_PATH = report_auto_export_dir.getValue().endsWith(File.pathSeparator) ? report_auto_export_dir.getValue() : report_auto_export_dir.getValue() + File.separator;
}
log.info(String.format("[Export] init AUTO_EXPORT_PATH=%s; AUTO_EXPORT_PERIOD=%s", AUTO_EXPORT_PATH, AUTO_EXPORT_PERIOD));
}
@Scheduled(cron = "0 0 1 * * ?")
private void autoExport() {
// Date now = new Date();
// Date start = getStartOfDay(now, -AUTO_EXPORT_PERIOD);
// Date end = getEndOfDay(now, -1);
// Range<Date> dateRange = Range.between(start, end);
LocalDate now = LocalDate.now();
LocalDateTime start = now.minusDays(1).atStartOfDay();
LocalDateTime end = now.minusDays(1).atTime(LocalTime.MAX);
if (AUTO_EXPORT_PERIOD == 1) {
// 每天导出一次报告
LocalDate startDaily = now.minusDays(1);
LocalDate endDaily = now.minusDays(1);
start = startDaily.atStartOfDay();
end = endDaily.atTime(LocalTime.MAX);
} else if (AUTO_EXPORT_PERIOD == 7) {
// 每周导出一次报告(周一开始,周日结束)
LocalDate startWeekly = now.minusWeeks(1).with(java.time.DayOfWeek.MONDAY);
LocalDate endWeekly = now.minusWeeks(1).with(java.time.DayOfWeek.SUNDAY);
start = startWeekly.atStartOfDay();
end = endWeekly.atTime(LocalTime.MAX);
} else if (AUTO_EXPORT_PERIOD == 30) {
// 每月导出一次报告(上个月的起始和结束日期)
LocalDate startMonthly = now.minusMonths(1).withDayOfMonth(1);
LocalDate endMonthly = now.minusMonths(1).withDayOfMonth(now.minusMonths(1).lengthOfMonth());
start = startMonthly.atStartOfDay();
end = endMonthly.atTime(LocalTime.MAX);
}
Range<Date> dateRange = Range.between(Date.from(start.toInstant(ZoneOffset.UTC)), Date.from(end.toInstant(ZoneOffset.UTC)));
List<Point> points = pointService.getAll();
for (Point point : points) {
try {
String filePath = analysis.report(point.getPointId(), dateRange, null).export(AUTO_EXPORT_PATH).getExportFileName();
log.info(String.format("[Export] autoExport point=%s; dateRange=%s~%s; filePath=%s", point.getName(), start, end, filePath));
} catch (Exception e) {
log.error(String.format("[Export] autoExport point=%s; dateRange=%s~%s", point.getName(), start, end), e);
}
}
}
@SneakyThrows
public String export(String pointId, List<String> jobs, ByteArrayOutputStream target) {
return analysis.report(pointId, jobs).export(target).getExportFileName();
}
@SneakyThrows
public String export(String pointId, Range<Date> dateRange, Integer status, ByteArrayOutputStream target) {
return analysis.report(pointId, dateRange, status).export(target).getExportFileName();
}
@SneakyThrows
public String export(String pointId, List<String> jobs, String path) {
return analysis.report(pointId, jobs).export(path).getExportFileName();
}
@SneakyThrows
public String export(String pointId, Range<Date> dateRange, Integer status, String path) {
return analysis.report(pointId, dateRange, status).export(path).getExportFileName();
}
public static Date getEndOfDay(Date date, int offset) {
Date _date = DateUtils.addDays(date, offset);
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(_date.getTime()), ZoneId.systemDefault());
LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
public static Date getStartOfDay(Date date, int offset) {
Date _date = DateUtils.addDays(date, offset);
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(_date.getTime()), ZoneId.systemDefault());
LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);
return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
}

278
bolt-core/src/main/java/com/jiluo/bolt/export/Report.java

@ -0,0 +1,278 @@
package com.jiluo.bolt.export;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.TableStyle;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.jiluo.bolt.common.DefectType;
import com.jiluo.bolt.domain.DefectInfo;
import lombok.Builder;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.Range;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.ResourceUtils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@Data
@Slf4j
@Builder
public class Report {
private static final String AUTO_EXPORT_FILE_NAME = "转子视觉检测报告_%s.docx";
private static final String AUTO_EXPORT_TEMPLATE = "report.docx";
private String exportFileName;
private String powerStationName;
private String groupName;
private String pointName;
private Range<Date> reportTime;
private List<Date> timeDimensions;
private List<DefectType> typeDimensions;
private List<Integer> zoneDimensions;
private Map<DefectType, List<DefectInfo>> allDefectData;
private Map<DefectType, AnalysisResult> analysisResult;
private AnalysisResult analysis(DefectType type, List<DefectInfo> defects) {
defects.removeAll(defects.parallelStream().filter(x -> !timeDimensions.contains(x.getTime()) || !zoneDimensions.contains(x.getZone())).collect(Collectors.toList()));
Map<Integer, List<DefectInfo>> _defects = defects.parallelStream().collect(Collectors.groupingBy(DefectInfo::getZone));
AnalysisResult result = new AnalysisResult(type, !defects.isEmpty());
zoneDimensions.forEach(z -> {
if (!_defects.containsKey(z)) {
result.getCensus().add(new DetectReport(type, z));
} else {
DetectReport detectReport = new DetectReport(type, z);
Map<Integer, DefectReport> defectReports = Maps.newConcurrentMap();
_defects.get(z).forEach(d -> {
detectReport.addValue(d.getAlarm(), d.getValue());
defectReports.putIfAbsent(d.getPosition(), new DefectReport(type, z, d.getPosition()));
defectReports.get(d.getPosition()).addValue(d.getAlarm(), d.getTime(), d.getValue(), d.getFile());
});
timeDimensions.forEach(d -> defectReports.values().stream().filter(r -> !r.getValues().containsKey(d)).forEach(r -> r.addValue(d)));
defectReports.keySet().stream().filter(k -> !defectReports.get(k).isAlarm()).forEach(defectReports::remove);
result.getCensus().add(detectReport);
result.getDetail().addAll(defectReports.values());
}
});
result.getCensus().sort(Comparator.comparing(DetectReport::getZone));
result.getDetail().sort(Comparator.comparing(DefectReport::getZone).thenComparing(DefectReport::getPosition));
result.fill();
return result;
}
public Report generate() {
if (timeDimensions.isEmpty()) {
timeDimensions.add(new Date());
}
reportTime = Range.between(timeDimensions.get(0), timeDimensions.get(timeDimensions.size() -1));
analysisResult = typeDimensions.parallelStream().map(t -> analysis(t, allDefectData.getOrDefault(t, new ArrayList<>()))).collect(Collectors.toMap(AnalysisResult::getType, x -> x));
exportFileName = String.format(AUTO_EXPORT_FILE_NAME, String.format("%s_%s", DateFormatUtils.format(getReportTime().getMinimum(), "yyyy年MM月dd日"), DateFormatUtils.format(getReportTime().getMaximum(), "yyyy年MM月dd日")));
return this;
}
private Map<String, Object> convert() {
Map<String, Object> data = new HashMap<>();
data.put("productLine", getPowerStationName());
data.put("groupName", getGroupName());
data.put("pointName", getPointName());
data.put("reportTime", String.format("%s-%s", DateFormatUtils.format(getReportTime().getMinimum(), "yyyy年MM月dd日"), DateFormatUtils.format(getReportTime().getMaximum(), "yyyy年MM月dd日")));
data.put("boltDetail", getAnalysisResult().get(DefectType.bolt).getDetail());
data.put("lineDetail", getAnalysisResult().get(DefectType.line).getDetail());
data.put("poleDetail", getAnalysisResult().get(DefectType.pole).getDetail());
data.put("boltTable", getAnalysisResult().get(DefectType.bolt).getTable());
data.put("lineTable", getAnalysisResult().get(DefectType.line).getTable());
data.put("poleTable", getAnalysisResult().get(DefectType.pole).getTable());
return data;
}
public Report export(String path) throws IOException {
File dir = FileUtils.getFile(path, powerStationName, groupName, pointName);
FileUtils.forceMkdir(dir);
this.exportFileName = FileUtils.getFile(dir, exportFileName).getAbsolutePath();
XWPFTemplate.compile(new ClassPathResource(AUTO_EXPORT_TEMPLATE).getInputStream(), Configure.builder().useSpringEL().build()).render(convert()).writeToFile(exportFileName);
return this;
}
public Report export(ByteArrayOutputStream target) throws IOException {
XWPFTemplate.compile(new ClassPathResource(AUTO_EXPORT_TEMPLATE).getInputStream(), Configure.builder().useSpringEL().build()).render(convert()).writeAndClose(target);
return this;
}
}
@Data
class AnalysisResult {
private DefectType type;
private boolean hasDefect;
private List<DetectReport> census;
private List<DefectReport> detail;
private TableRenderData table;
public AnalysisResult(DefectType type, boolean hasDefect) {
this.type = type;
this.hasDefect = hasDefect;
census = new ArrayList<>();
detail = new ArrayList<>();
}
public void fill() {
List<RowRenderData> rows = new ArrayList<>();
Lists.partition(census, 10).forEach(_values -> {
Rows.RowBuilder rowA = Rows.of("编号");
Rows.RowBuilder rowB = Rows.of("范围");
_values.forEach(x -> {
rowA.addCell(Cells.of(String.valueOf(x.getZone())).create());
StringBuilder _v = new StringBuilder();
_v.append(x.getMin().setScale(2, RoundingMode.HALF_UP)).append('~').append(x.getMax().setScale(2, RoundingMode.HALF_UP));
if (x.isAlarm()) {
rowB.addCell(Cells.of(Texts.of(_v.toString()).bold().create()).create());
} else {
rowB.addCell(Cells.of(_v.toString()).create());
}
});
if (_values.size() < 10) {
int _lack = 10 - _values.size();
while(_lack-- > 0) {
rowA.addCell(new CellRenderData());
rowB.addCell(new CellRenderData());
}
}
rows.add(rowA.textFontSize(10).center().create());
rows.add(rowB.textFontSize(10).center().create());
});
table = Tables.of(rows.toArray(new RowRenderData[]{})).width(16, null).center().border(TableStyle.BorderStyle.DEFAULT).create();
detail.forEach(DefectReport::fill);
}
}
@Data
class DetectReport {
private DefectType type;
private int zone;
private BigDecimal max = BigDecimal.ZERO;
private BigDecimal min = BigDecimal.ZERO;
private boolean alarm = false;
public DetectReport(DefectType type, int zone) {
this.type = type;
this.zone = zone;
}
public synchronized void addValue(boolean alarm, BigDecimal v) {
this.alarm = this.alarm || alarm;
if (v.compareTo(max) > 0) {
this.max = v;
}
if (this.min.equals(BigDecimal.ZERO)) {
this.min = v;
} else {
if (min.compareTo(v) > 0) {
this.min = v;
}
}
}
}
@Data
@Slf4j
class DefectReport {
private DefectType type;
private int zone;
private int position;
private BigDecimal value;
private String url;
private boolean alarm;
private TreeMap<Date, BigDecimal> values;
private PictureRenderData file;
private ChartMultiSeriesRenderData chart;
public DefectReport(DefectType type, int zone, int position) {
this.type = type;
this.zone = zone;
this.position = position;
this.value = type.getDefaultValue();
this.values = new TreeMap<>();
}
public synchronized void addValue(Date t) {
this.values.put(t, type.getDefaultValue());
this.value = this.values.lastEntry().getValue();
if (this.value.equals(type.getDefaultValue())) {
this.alarm = false;
}
}
public synchronized void addValue(boolean alarm, Date t, BigDecimal v, String url) {
this.values.put(t, v);
this.value = this.values.lastEntry().getValue();
if (this.value.equals(v)) {
this.alarm = alarm;
}
if (this.alarm) {
this.url = url;
}
}
public void fill() {
fillChart();
fillFile();
}
private void fillFile() {
try {
if (StringUtils.isBlank(url)) {
return;
}
if (url.startsWith("ipc")) {
String path = url.split(":")[1];
File img = ResourceUtils.getFile(path);
FileInputStream fileInputStream = new FileInputStream(img);
byte[] bytes = IOUtils.toByteArray(fileInputStream);
fileInputStream.close();
// 读取图像文件的字节数组
file = Pictures.ofBytes(bytes, PictureType.JPEG).altMeta("图片丢失!").size(577, 397).create();
} else {
file = Pictures.ofStream(new ClassPathResource(url.split(":")[1]).getInputStream(), PictureType.JPEG).altMeta("图片丢失!").size(577, 397).create();
}
} catch (Exception e) {
log.error("[DefectReport] fillFile exception!", e);
}
}
private void fillChart() {
String series = String.format("%s#磁极", zone);
if (type == DefectType.bolt) {
series = series + String.format("%s号螺栓", position);
}
if (type == DefectType.line) {
series = series + String.format("%s号引出线", position);
}
chart = Charts.ofLine(
this.type.getDesc(), this.getValues().keySet().stream().map(integer -> DateFormatUtils.format(integer, "yyyy-MM-dd HH:mm:ss")).toArray(String[]::new))
.addSeries(series, this.getValues().values().toArray(new Number[]{}))
.create();
}
}

22
bolt-core/src/main/java/com/jiluo/bolt/service/AlarmService.java

@ -0,0 +1,22 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.po.Alarm;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 告警信息表(Alarm)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:06
*/
public interface AlarmService extends IService<Alarm> {
public static Map<String, Alarm> ALARM_MAP = new ConcurrentHashMap<>();
public List<Alarm> getAll();
public void add(Alarm alarm);
}

23
bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmService.java

@ -0,0 +1,23 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.dto.AlgorithmDto;
import com.jiluo.bolt.entity.po.Algorithm;
import java.util.List;
/**
* 算法信息表(Algorithm)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:08
*/
public interface AlgorithmService extends IService<Algorithm> {
public Algorithm getByPoint(String pointId);
public Integer getPointCount(String algorithmId);
public List<Algorithm> select(AlgorithmDto algorithmDto);
public void add(AlgorithmDto algorithmDto);
}

24
bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmTempleteService.java

@ -0,0 +1,24 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.dto.AlgorithmDto;
import com.jiluo.bolt.entity.po.AlgorithmTemplete;
import java.util.List;
/**
* (AlgorithmTemplete)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:09
*/
public interface AlgorithmTempleteService extends IService<AlgorithmTemplete> {
public List<AlgorithmTemplete> select(AlgorithmDto algorithmDto);
public Integer selectTotal(AlgorithmDto algorithmDto);
public String add(AlgorithmDto algorithmDto);
public Boolean updateByBizId(AlgorithmDto algorithmDto);
}

32
bolt-core/src/main/java/com/jiluo/bolt/service/ConfigService.java

@ -0,0 +1,32 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.po.Config;
import java.util.List;
/**
* 系统配置表(Config)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:11
*/
public interface ConfigService extends IService<Config> {
public boolean updateByBizId(String bizId,String value);
public Config selectByBizId(String bizId);
public List<Config> selectByCategory(String category);
public Config selectByDescription(String description);
public List<Config> select(Config configDto);
public Boolean add(Config configDto,String type);
public Boolean updateByBizId(Config configDto);
}

35
bolt-core/src/main/java/com/jiluo/bolt/service/DefectService.java

@ -0,0 +1,35 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.po.Defect;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 检测结果表(Defect)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:11
*/
public interface DefectService extends IService<Defect> {
public static Map<String, Float> TEMPERATUREMAP = new ConcurrentHashMap<>();
public List<Defect> getRealTimeData(String jobId);
public List<Defect> getByJob(String jobId);
public List<Defect> getByJob(List<String> jobIds);
public List<Defect> chartData(String pointId,String product,Integer zone,String startTime,String endTime);
public List<Defect> exportData(String pointId, Date startTime, Date endTime, Integer status);
public Defect selectToCompare(String jobId,String type,Integer zone,Integer position);
public void add(Defect defect);
public void update(Defect defect);
}

23
bolt-core/src/main/java/com/jiluo/bolt/service/DetectService.java

@ -0,0 +1,23 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.po.Detect;
import java.util.List;
import java.util.Map;
/**
* 检测过程表(Detect)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:11
*/
public interface DetectService extends IService<Detect> {
public Map<Integer, List<String>> getImg(String jobId);
public void add(Detect detect);
public Integer selectByJob(String jobId);
public List<Detect> getByJob(String jobId);
}

50
bolt-core/src/main/java/com/jiluo/bolt/service/DeviceService.java

@ -0,0 +1,50 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.common.LocalStatus;
import com.jiluo.bolt.entity.dto.DeviceDto;
import com.jiluo.bolt.entity.dto.TempSenserDto;
import com.jiluo.bolt.entity.po.Device;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 设备信息表(Device)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:11
*/
public interface DeviceService extends IService<Device> {
Map<String, LocalStatus> DeviceLocalStatus = new ConcurrentHashMap<>();
public Device selectByBizId(String deviceId);
public List<Device> selectByPoint(String pointId);
public List<Device> selectAll();
public void updateTemp(String deviceId,String tempThreshold);
public void updateStatus(String deviceId,Integer status);
public List<Device> select(DeviceDto deviceDto);
public Integer selectTotal(DeviceDto deviceDto);
public Boolean add(DeviceDto deviceDto,String type);
public Boolean updateByBizId(DeviceDto deviceDto);
public Boolean deactivate(DeviceDto deviceDto);
public List<Device> select(TempSenserDto tempSenserDto);
public Integer selectTotal(TempSenserDto tempSenserDto);
public Boolean add(TempSenserDto tempSenserDto,String type);
public Boolean updateByBizId(TempSenserDto tempSenserDto);
}

20
bolt-core/src/main/java/com/jiluo/bolt/service/DeviceTempleteService.java

@ -0,0 +1,20 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.po.DeviceTemplete;
import java.util.List;
/**
* (DeviceTemplete)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:11
*/
public interface DeviceTempleteService extends IService<DeviceTemplete> {
public DeviceTemplete getByBizId(String venderId);
public List<DeviceTemplete> getByBizId(List<String> venderIds);
List<DeviceTemplete> getAll();
}

41
bolt-core/src/main/java/com/jiluo/bolt/service/JobService.java

@ -0,0 +1,41 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.common.DetectJob;
import com.jiluo.bolt.entity.po.Job;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 检测任务表(Job)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:12
*/
public interface JobService extends IService<Job> {
public static Map<String, DetectJob> JOB_MAP = new ConcurrentHashMap<>();
public Job getByBizId(String jobId);
public List<Job> getByBizId(List<String> jobIds);
public Job getRealtimeJob(String pointId,String product);
public List<Job> getHistoryJob(String pointId,Integer status, String product, Integer current, Integer size,
@DateTimeFormat(pattern = "yyyy-MM-dd") String startTime,
@DateTimeFormat(pattern = "yyyy-MM-dd") String endTime);
public Integer getHistoryJobTotal(String pointId,Integer status, String product,
@DateTimeFormat(pattern = "yyyy-MM-dd") String startTime,
@DateTimeFormat(pattern = "yyyy-MM-dd") String endTime);
public List<Job> exportData(Date startTime,Date endTime);
public void addJob(Job job);
public void updateAttribute(String jobId, String attribute, Integer status);
}

148
bolt-core/src/main/java/com/jiluo/bolt/service/MinioService.java

@ -0,0 +1,148 @@
package com.jiluo.bolt.service;
import io.minio.ObjectStat;
import io.minio.Result;
import io.minio.errors.*;
import io.minio.messages.Item;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/10/13/14:56
* @Description:
*/
public interface MinioService {
/**
* 判断 bucket是否存在
*
* @param bucketName
* @return
*/
boolean bucketExists(String bucketName);
/**
* 创建 bucket
*
* @param bucketName
*/
void makeBucket(String bucketName);
/**
* 文件上传
*
* @param bucketName
* @param objectName
* @param filename
*/
void putObject(String bucketName, String objectName, String filename);
/**
* 文件上传
*
* @param bucketName
* @param objectName
* @param stream
*/
void putObject(String bucketName, String objectName, InputStream stream, String contentType);
/**
* 文件上传
*
* @param bucketName
* @param multipartFile
*/
void putObject(String bucketName, MultipartFile multipartFile, String filename);
/**
* 删除文件
*
* @param bucketName
* @param objectName
*/
boolean removeObject(String bucketName, String objectName);
/**
* 下载文件
*
* @param fileName
* @param originalName
* @param response
*/
void downloadFile(String bucketName, String fileName, String originalName, HttpServletResponse response);
/**
* 获取文件路径
*
* @param bucketName
* @param objectName
* @return
*/
String getObjectUrl(String bucketName, String objectName);
/**
* @description: 文件下载
* @param: bucketName
* objectName
* @return: io.minio.ObjectStat
* @author yangc
* @date: 2020-10-20 20:24
*/
ObjectStat statObject(String bucketName, String objectName);
/**
* 以流的形式获取一个文件对象
*
* @param bucketName 存储桶名称
* @param objectName 存储桶里的对象名称
* @return
*/
InputStream getObject(String bucketName, String objectName);
/**
* 列出存储桶中所有对象
*
* @param bucketName 存储桶名称
* @return
*/
Iterable<Result<Item>> listObjects(String bucketName);
/**
* 生成一个给HTTP GET请求用的presigned URL
*
* @param bucketName 存储桶名称
* @param objectName 存储桶里的对象名称
* @param expires 失效时间以秒为单位默认是7天不得大于七天
* @return
*/
String presignedGetObject(String bucketName, String objectName, Integer expires);
/**
* 设置存储桶策略
*
* @param bucketName 存储桶名称
* @return
*/
void setBucketPolicy(String bucketName, String policy) throws IOException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, ErrorResponseException, XmlParserException, InvalidBucketNameException, InsufficientDataException, InternalException;
/**
* 获取存储桶策略
*
* @param bucketName 存储桶名称
* @return
*/
String getBucketPolicy(String bucketName) throws IOException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, BucketPolicyTooLargeException, ErrorResponseException, XmlParserException, InvalidBucketNameException, InsufficientDataException, InternalException;
}

29
bolt-core/src/main/java/com/jiluo/bolt/service/MotorGroupService.java

@ -0,0 +1,29 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.dto.MotorGroupDto;
import com.jiluo.bolt.entity.po.MotorGroup;
import java.util.List;
/**
* 机组信息表(MotorGroup)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:12
*/
public interface MotorGroupService extends IService<MotorGroup> {
public List<MotorGroup> getAll();
public MotorGroup getByBizId(String bizId);
public Integer getTotalByPowerStation(String powerStationId);
public List<MotorGroup> select(MotorGroupDto motorGroupDto);
public Integer selectTotal(MotorGroupDto motorGroupDto);
public Boolean add(MotorGroupDto motorGroupDto);
public Boolean updateByBizId(MotorGroupDto motorGroupDto);
}

42
bolt-core/src/main/java/com/jiluo/bolt/service/PointService.java

@ -0,0 +1,42 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.dto.PointDto;
import com.jiluo.bolt.entity.po.Point;
import java.util.Date;
import java.util.List;
/**
* 检测点表(Point)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:12
*/
public interface PointService extends IService<Point> {
public List<Point> getAll();
public List<Point> getByRole(String groupPermission);
public void updateEnableDetect(String pointId,Integer enableDetect);
public void updateResetTime(String pointId, Date date);
public void updateConfig(String pointId, String config);
public Point getByBizId(String bizId);
public Integer getTotalByMotorGroup(String motorGroupId);
public List<Point> select(PointDto pointDto);
public Integer selectTotal(PointDto pointDto);
public Boolean add(PointDto pointDto);
public Boolean updateByBizId(PointDto pointDto);
public Boolean updateDetect(PointDto pointDto);
public List<Point> getByPowerStation(String powerStationId);
}

27
bolt-core/src/main/java/com/jiluo/bolt/service/PowerStationService.java

@ -0,0 +1,27 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.dto.PowerStationDto;
import com.jiluo.bolt.entity.po.PowerStation;
import java.util.List;
/**
* 电站表(PowerStation)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:12
*/
public interface PowerStationService extends IService<PowerStation> {
public List<PowerStation> getAll();
public PowerStation getByBizId(String bizId);
public List<PowerStation> select(PowerStationDto powerStationDto);
public Integer selectTotal(PowerStationDto powerStationDto);
public Boolean add(PowerStationDto powerStationDto);
public Boolean updateByBizId(PowerStationDto powerStationDto);
}

13
bolt-core/src/main/java/com/jiluo/bolt/service/ProductService.java

@ -0,0 +1,13 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.po.Product;
/**
* 检测类型表(Product)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:12
*/
public interface ProductService extends IService<Product> {
}

20
bolt-core/src/main/java/com/jiluo/bolt/service/RoleItemService.java

@ -0,0 +1,20 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.po.RoleItem;
import java.util.List;
/**
* 权限信息表(RoleItem)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:12
*/
public interface RoleItemService extends IService<RoleItem> {
public RoleItem getByBizId(String bizId);
public List<RoleItem> getByBizId(List<String> itemIds);
public List<RoleItem> getAll();
}

23
bolt-core/src/main/java/com/jiluo/bolt/service/RoleService.java

@ -0,0 +1,23 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.dto.RoleDto;
import com.jiluo.bolt.entity.po.Role;
import java.util.List;
/**
* 角色信息表(Role)表服务接口
* @author Fangy
* @date 2023-05-05 18:59:16
*/
public interface RoleService extends IService<Role> {
public Role getByRoleId(String roleId);
public List<Role> select(RoleDto roleDto);
public String add(RoleDto roleDto);
public Boolean updateByBizId(RoleDto roleDto);
}

25
bolt-core/src/main/java/com/jiluo/bolt/service/RoleValueService.java

@ -0,0 +1,25 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.dto.PermissionDto;
import com.jiluo.bolt.entity.po.RoleValue;
import java.util.List;
/**
* 角色信息表(Role)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:12
*/
public interface RoleValueService extends IService<RoleValue> {
public List<RoleValue> getByRoleId(String roleId);
public RoleValue getProduct(String roleId);
public List<RoleValue> select(PermissionDto permissionDto);
public Boolean add(RoleValue roleValue);
public Boolean updateByItemId(RoleValue roleValue);
}

23
bolt-core/src/main/java/com/jiluo/bolt/service/UserService.java

@ -0,0 +1,23 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.dto.UserDto;
import com.jiluo.bolt.entity.po.User;
import java.util.List;
/**
* 用户信息表(User)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:12
*/
public interface UserService extends IService<User> {
public User getByUid(String uid);
public List<User> select(UserDto userDto);
public Boolean add(UserDto userDto);
public Boolean updateByBizId(UserDto userDto);
}

14
bolt-core/src/main/java/com/jiluo/bolt/service/VersionService.java

@ -0,0 +1,14 @@
package com.jiluo.bolt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiluo.bolt.entity.po.Version;
/**
* 版本信息表(Version)表服务接口
* @author Fangy
* @date 2023-05-05 10:10:12
*/
public interface VersionService extends IService<Version> {
public Version select();
}

36
bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlarmServiceImpl.java

@ -0,0 +1,36 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.mapper.AlarmMapper;
import com.jiluo.bolt.entity.po.Alarm;
import com.jiluo.bolt.service.AlarmService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/**
* 告警信息表(Alarm)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:07
*/
@Service
public class AlarmServiceImpl extends ServiceImpl<AlarmMapper, Alarm> implements AlarmService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(AlarmServiceImpl.class);
@Autowired
AlarmMapper alarmMapper;
public List<Alarm> getAll(){
return new ArrayList<>(ALARM_MAP.values());
}
public void add(Alarm alarm){
alarmMapper.insert(alarm);
}
}

86
bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmServiceImpl.java

@ -0,0 +1,86 @@
package com.jiluo.bolt.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.entity.dto.AlgorithmDto;
import com.jiluo.bolt.entity.po.AlgorithmTemplete;
import com.jiluo.bolt.entity.po.Config;
import com.jiluo.bolt.mapper.AlgorithmMapper;
import com.jiluo.bolt.entity.po.Algorithm;
import com.jiluo.bolt.mapper.AlgorithmTempleteMapper;
import com.jiluo.bolt.mapper.ConfigMapper;
import com.jiluo.bolt.service.AlgorithmService;
import com.jiluo.bolt.util.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* 算法信息表(Algorithm)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:09
*/
@Service
public class AlgorithmServiceImpl extends ServiceImpl<AlgorithmMapper, Algorithm> implements AlgorithmService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(AlgorithmServiceImpl.class);
@Autowired
AlgorithmMapper algorithmMapper;
@Autowired
AlgorithmTempleteMapper algorithmTempleteMapper;
@Autowired
ConfigMapper configMapper;
public Algorithm getByPoint(String pointId){
QueryWrapper<Algorithm> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("point",pointId);
return algorithmMapper.selectOne(queryWrapper);
}
@Override
public Integer getPointCount(String algorithmId) {
QueryWrapper<Algorithm> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("algorithm",algorithmId);
return algorithmMapper.selectCount(queryWrapper);
}
@Override
public List<Algorithm> select(AlgorithmDto algorithmDto) {
QueryWrapper<Algorithm> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(algorithmDto.getAlgorithmId()),"algorithm",algorithmDto.getAlgorithmId());
return algorithmMapper.selectList(queryWrapper);
}
@Override
public void add(AlgorithmDto algorithmDto) {
algorithmDto.getPoints().forEach(item ->{
Algorithm algorithm = new Algorithm();
JSONObject config = new JSONObject();
JSONObject attribute = new JSONObject();
Config algorithm_model_config = configMapper.selectOne(new QueryWrapper<Config>().eq("biz_id","algorithm_model_dir"));
if (algorithm_model_config!=null){
String algorithm_model_dir = algorithm_model_config.getValue()+algorithmDto.getAlgorithmFileName();
config.put("algorithm_name",algorithmDto.getAlgorithmName());
config.put("algorithm_model",algorithm_model_dir);
attribute.put("detect_threshold_model",algorithmDto.getAlgorithmFileName());
algorithm.setBizId("algorithm_"+ SnowFlakeUtil.getDefaultSnowFlakeId())
.setAlgorithm(algorithmDto.getAlgorithmId())
.setPowerStation(item.getPowerStationId())
.setMotorGroup(item.getMotorGroupId())
.setPoint(item.getPointId())
.setConfig(config.toJSONString())
.setAttribute(attribute.toJSONString())
.setVersion("1.0.0");
algorithmMapper.insert(algorithm);
}
});
}
}

79
bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmTempleteServiceImpl.java

@ -0,0 +1,79 @@
package com.jiluo.bolt.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.entity.dto.AlgorithmDto;
import com.jiluo.bolt.mapper.AlgorithmTempleteMapper;
import com.jiluo.bolt.entity.po.AlgorithmTemplete;
import com.jiluo.bolt.service.AlgorithmTempleteService;
import com.jiluo.bolt.util.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* (AlgorithmTemplete)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:10
*/
@Service
public class AlgorithmTempleteServiceImpl extends ServiceImpl<AlgorithmTempleteMapper, AlgorithmTemplete> implements AlgorithmTempleteService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(AlgorithmTempleteServiceImpl.class);
@Autowired
AlgorithmTempleteMapper algorithmTempleteMapper;
@Override
public List<AlgorithmTemplete> select(AlgorithmDto algorithmDto) {
QueryWrapper<AlgorithmTemplete> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(algorithmDto.getAlgorithmName()),"name",algorithmDto.getAlgorithmName())
.eq(StringUtils.isNotBlank(algorithmDto.getSource()),"source",algorithmDto.getSource())
.eq(StringUtils.isNotBlank(algorithmDto.getAlgorithmId()),"biz_id",algorithmDto.getAlgorithmId());;
return algorithmTempleteMapper.selectList(queryWrapper);
}
@Override
public Integer selectTotal(AlgorithmDto algorithmDto) {
QueryWrapper<AlgorithmTemplete> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(algorithmDto.getAlgorithmName()),"name",algorithmDto.getAlgorithmName())
.eq(StringUtils.isNotBlank(algorithmDto.getSource()),"source",algorithmDto.getSource());
return algorithmTempleteMapper.selectCount(queryWrapper);
}
@Override
public String add(AlgorithmDto algorithmDto) {
AlgorithmTemplete algorithmTemplete = new AlgorithmTemplete();
JSONObject config = new JSONObject();
config.put("detect_threshold_model",algorithmDto.getAlgorithmFileName());
algorithmTemplete.setBizId(algorithmDto.getSource()+ SnowFlakeUtil.getDefaultSnowFlakeId())
.setSource(algorithmDto.getSource())
.setName(algorithmDto.getAlgorithmName())
.setDrive(algorithmDto.getAlgorithmFileName())
.setVersion("1.0.0")
.setConfig(config.toJSONString());
algorithmTempleteMapper.insert(algorithmTemplete);
return algorithmTemplete.getBizId();
}
@Override
public Boolean updateByBizId(AlgorithmDto algorithmDto) {
UpdateWrapper<AlgorithmTemplete> updateWrapper = new UpdateWrapper<>();
JSONObject config = new JSONObject();
config.put("detect_threshold_model",algorithmDto.getAlgorithmFileName());
updateWrapper.eq("biz_id",algorithmDto.getAlgorithmId())
.set("source",algorithmDto.getSource())
.set("name",algorithmDto.getAlgorithmName())
.set("drive",algorithmDto.getAlgorithmFileName())
.set("config",config.toJSONString());
return algorithmTempleteMapper.update(null,updateWrapper)>0?true:false;
}
}

85
bolt-core/src/main/java/com/jiluo/bolt/service/impl/ConfigServiceImpl.java

@ -0,0 +1,85 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.mapper.ConfigMapper;
import com.jiluo.bolt.entity.po.Config;
import com.jiluo.bolt.service.ConfigService;
import com.jiluo.bolt.util.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* 系统配置表(Config)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:11
*/
@Service
public class ConfigServiceImpl extends ServiceImpl<ConfigMapper, Config> implements ConfigService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(ConfigServiceImpl.class);
@Autowired
ConfigMapper configMapper;
public boolean updateByBizId(String bizId,String value){
UpdateWrapper<Config> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",bizId).set("value",value);
configMapper.update(null,updateWrapper);
return true;
}
public Config selectByBizId(String bizId){
QueryWrapper<Config> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("biz_id",bizId);
return configMapper.selectOne(queryWrapper);
}
@Override
public List<Config> selectByCategory(String category) {
QueryWrapper<Config> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("category",category);
return configMapper.selectList(queryWrapper);
}
@Override
public Config selectByDescription(String description) {
QueryWrapper<Config> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("description",description);
return configMapper.selectOne(queryWrapper);
}
@Override
public List<Config> select(Config configDto) {
QueryWrapper<Config> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(configDto.getConfigId()),"biz_id",configDto.getConfigId())
.eq(StringUtils.isNotBlank(configDto.getDescription()),"description",configDto.getDescription())
.eq(StringUtils.isNotBlank(configDto.getCategory()),"category",configDto.getCategory());
return configMapper.selectList(queryWrapper);
}
@Override
public Boolean add(Config configDto,String type) {
configDto.setConfigId(type+ SnowFlakeUtil.getDefaultSnowFlakeId());
return configMapper.insert(configDto)>0?true:false;
}
@Override
public Boolean updateByBizId(Config configDto) {
UpdateWrapper<Config> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",configDto.getConfigId())
.set(StringUtils.isNotBlank(configDto.getValue()),"value",configDto.getValue())
.set(StringUtils.isNotBlank(configDto.getDescription()),"description",configDto.getDescription())
.set(StringUtils.isNotBlank(configDto.getCategory()),"category",configDto.getCategory())
.set(StringUtils.isNotBlank(configDto.getType()),"type",configDto.getType());
return configMapper.update(null,updateWrapper)>0?true:false;
}
}

106
bolt-core/src/main/java/com/jiluo/bolt/service/impl/DefectServiceImpl.java

@ -0,0 +1,106 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.common.DefectType;
import com.jiluo.bolt.common.DetectType;
import com.jiluo.bolt.common.LocalStatus;
import com.jiluo.bolt.entity.po.Job;
import com.jiluo.bolt.mapper.DefectMapper;
import com.jiluo.bolt.entity.po.Defect;
import com.jiluo.bolt.mapper.JobMapper;
import com.jiluo.bolt.service.DefectService;
import com.jiluo.bolt.util.BigDecimalUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 检测结果表(Defect)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:11
*/
@Service
public class DefectServiceImpl extends ServiceImpl<DefectMapper, Defect> implements DefectService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(DefectServiceImpl.class);
@Autowired
DefectMapper defectMapper;
@Autowired
JobMapper jobMapper;
@PostConstruct
public void init() {
defectMapper.selectTemperature().forEach(defect -> {
DefectService.TEMPERATUREMAP.put(defect.getPoint(), BigDecimalUtils.DBToFront(DefectType.temperature,defect.getValue()).floatValue());
});
}
@Scheduled(cron = "0 0 * * * *")
public void updateLocal() {
defectMapper.selectTemperature().forEach(defect -> {
DefectService.TEMPERATUREMAP.put(defect.getPoint(), BigDecimalUtils.DBToFront(DefectType.temperature,defect.getValue()).floatValue());
});
}
public List<Defect> getRealTimeData(String jobId){
QueryWrapper<Defect> wrapper = new QueryWrapper<Defect>();
wrapper.eq("job",jobId).eq("status",0);
return defectMapper.selectList(wrapper);
}
public List<Defect> getByJob(String jobId){
QueryWrapper<Defect> wrapper = new QueryWrapper<Defect>();
wrapper.eq("job",jobId).eq("status",0);
return defectMapper.selectList(wrapper);
}
public List<Defect> getByJob(List<String> jobIds){
QueryWrapper<Defect> wrapper = new QueryWrapper<Defect>();
wrapper.in("job",jobIds);
return defectMapper.selectList(wrapper);
}
public List<Defect> chartData(String pointId,String product,Integer zone,String startTime,String endTime){
QueryWrapper<Defect> wrapper = new QueryWrapper<Defect>();
wrapper.eq(StringUtils.isNotBlank(pointId),"point",pointId)
.eq(StringUtils.isNotBlank(product),"type",product)
.eq("zone",zone)
.between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),"gmt_create",startTime,endTime);
return defectMapper.selectList(wrapper);
}
public List<Defect> exportData(String pointId, Date startTime, Date endTime, Integer status){
QueryWrapper<Defect> wrapper = new QueryWrapper<Defect>();
wrapper.eq(pointId!=null&&StringUtils.isNotBlank(pointId),"point",pointId).between("gmt_create",startTime,endTime).eq(status!=null,"status",status);
return defectMapper.selectList(wrapper);
}
public Defect selectToCompare(String jobId,String type,Integer zone,Integer position){
QueryWrapper<Defect> wrapper = new QueryWrapper<>();
wrapper.eq("job",jobId)
.eq("type",type)
.eq("zone",zone)
.eq("position",position);
return defectMapper.selectOne(wrapper);
}
public void add(Defect defect){
defectMapper.insert(defect);
}
public void update(Defect defect){
defectMapper.updateById(defect);
}
}

63
bolt-core/src/main/java/com/jiluo/bolt/service/impl/DetectServiceImpl.java

@ -0,0 +1,63 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.mapper.DetectMapper;
import com.jiluo.bolt.entity.po.Detect;
import com.jiluo.bolt.service.DetectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 检测过程表(Detect)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:11
*/
@Service
public class DetectServiceImpl extends ServiceImpl<DetectMapper, Detect> implements DetectService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(DetectServiceImpl.class);
@Autowired
DetectMapper detectMapper;
public Map<Integer, List<String>> getImg(String jobId){
QueryWrapper<Detect> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("job",jobId);
Map<Integer,List<String>> result = new HashMap<>();
detectMapper.selectList(queryWrapper).stream().collect(Collectors.groupingBy(Detect::getZone))
.forEach((k,v)->{
List<String> imgs = new ArrayList<>();
v.stream().forEach(defect->imgs.add(defect.getData()));
result.put(k,imgs);
});
return result;
}
public void add(Detect detect){
detectMapper.insert(detect);
}
@Override
public Integer selectByJob(String jobId) {
QueryWrapper<Detect> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("job",jobId);
return detectMapper.selectCount(queryWrapper);
}
@Override
public List<Detect> getByJob(String jobId) {
QueryWrapper<Detect> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("job",jobId);
return detectMapper.selectList(queryWrapper);
}
}

202
bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceServiceImpl.java

@ -0,0 +1,202 @@
package com.jiluo.bolt.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.common.LocalStatus;
import com.jiluo.bolt.entity.dto.DeviceDto;
import com.jiluo.bolt.entity.dto.TempSenserDto;
import com.jiluo.bolt.mapper.DeviceMapper;
import com.jiluo.bolt.entity.po.Device;
import com.jiluo.bolt.service.DeviceService;
import com.jiluo.bolt.util.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.PostConstruct;
import java.util.*;
/**
* 设备信息表(Device)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:11
*/
@Service
public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(DeviceServiceImpl.class);
@Autowired
DeviceMapper deviceMapper;
@PostConstruct
public void init() {
deviceMapper.selectList(new QueryWrapper<>()).forEach(device -> DeviceLocalStatus.putIfAbsent(device.getPointId(), LocalStatus.builder().pointStatus(2).cameraStatus(2).tempSensorStatus(2).build()));
}
public Device selectByBizId(String deviceId){
QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("biz_id",deviceId);
Device device = deviceMapper.selectOne(queryWrapper);
if (DeviceLocalStatus.get(device.getPointId()).getCameraStatus()==2){
device.setStatus(2);
}
return device;
}
public List<Device> selectByPoint(String pointId){
QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("point",pointId);
List<Device> deviceList = deviceMapper.selectList(queryWrapper);
deviceList.stream().filter(device -> DeviceLocalStatus.get(device.getPointId()).getCameraStatus()==2).forEach(device -> device.setStatus(2));
return deviceList;
}
public List<Device> selectAll(){
List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<>());
deviceList.stream().filter(device -> DeviceLocalStatus.get(device.getPointId()).getCameraStatus()==2).forEach(device -> device.setStatus(2));
return deviceList;
}
public void updateTemp(String deviceId,String tempThreshold){
UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",deviceId).set("temp_threshold",tempThreshold);
deviceMapper.update(null,updateWrapper);
}
public void updateStatus(String deviceId,Integer status){
UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",deviceId).set("status",status);
deviceMapper.update(null,updateWrapper);
}
@Override
public List<Device> select(DeviceDto deviceDto) {
QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("type","camera")
.eq(StringUtils.isNotBlank(deviceDto.getPowerStationId()),"power_station",deviceDto.getPowerStationId())
.eq(StringUtils.isNotBlank(deviceDto.getPointId()),"point",deviceDto.getPointId())
.eq(deviceDto.getStatus()!=null,"status",deviceDto.getStatus());
List<Device> deviceList = deviceMapper.selectList(queryWrapper);
deviceList.stream().filter(device -> DeviceLocalStatus.get(device.getPointId()).getCameraStatus()==2).forEach(device -> device.setStatus(2));
return deviceList;
}
@Override
public Integer selectTotal(DeviceDto deviceDto) {
QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("type","camera")
.eq(StringUtils.isNotBlank(deviceDto.getPowerStationId()),"power_station",deviceDto.getPowerStationId())
.eq(StringUtils.isNotBlank(deviceDto.getPointId()),"point",deviceDto.getPointId())
.eq(deviceDto.getStatus()!=null,"status",deviceDto.getStatus());
return deviceMapper.selectCount(queryWrapper);
}
@Override
public Boolean add(DeviceDto deviceDto,String type) {
Device device = new Device();
String deviceId = "camera_"+SnowFlakeUtil.getDefaultSnowFlakeId();
device.setDeviceId(deviceId)
.setType(type)
.setName(deviceDto.getName())
.setPowerStationId(deviceDto.getPowerStationId())
.setProduct("BOLT_AND_LINE")
.setMotorGroupId(deviceDto.getMotorGroupId())
.setPointId(deviceDto.getPointId())
.setStatus(1)
.setTempThreshold("")
.setConfig(deviceDto.getConfig())
.setVender(deviceDto.getVender());
boolean result = deviceMapper.insert(device)>0?true:false;
if(result){
DeviceLocalStatus.putIfAbsent(device.getPointId(), LocalStatus.builder().pointStatus(2).cameraStatus(2).tempSensorStatus(2).build());
}
return result;
}
@Override
public Boolean updateByBizId(DeviceDto deviceDto) {
UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",deviceDto.getDeviceId())
.set("power_station",deviceDto.getPowerStationId())
.set("motor_group",deviceDto.getMotorGroupId())
.set("point",deviceDto.getPointId())
.set("name",deviceDto.getName())
.set("vender",deviceDto.getVender())
.set("config",deviceDto.getConfig());
return deviceMapper.update(null,updateWrapper)>0?true:false;
}
@Override
public Boolean deactivate(DeviceDto deviceDto) {
if (!DeviceLocalStatus.containsKey(deviceDto.getPointId())){
return false;
}
UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",deviceDto.getDeviceId()).set("status",deviceDto.getStatus());
deviceMapper.update(null,updateWrapper);
return true;
}
@Override
public List<Device> select(TempSenserDto tempSenserDto) {
QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("type","temperature_sensor")
.eq(StringUtils.isNotBlank(tempSenserDto.getPowerStationId()),"power_station",tempSenserDto.getPowerStationId())
.eq(StringUtils.isNotBlank(tempSenserDto.getPointId()),"point",tempSenserDto.getPointId())
.eq(tempSenserDto.getStatus()!=null,"status",tempSenserDto.getStatus());
List<Device> deviceList = deviceMapper.selectList(queryWrapper);
deviceList.stream().filter(device -> DeviceLocalStatus.get(device.getPointId()).getCameraStatus()==2).forEach(device -> device.setStatus(2));
return deviceList;
}
@Override
public Integer selectTotal(TempSenserDto tempSenserDto) {
QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("type","temperature_sensor")
.eq(StringUtils.isNotBlank(tempSenserDto.getPowerStationId()),"power_station",tempSenserDto.getPowerStationId())
.eq(StringUtils.isNotBlank(tempSenserDto.getPointId()),"point",tempSenserDto.getPointId())
.eq(tempSenserDto.getStatus()!=null,"status",tempSenserDto.getStatus());
return deviceMapper.selectCount(queryWrapper);
}
@Override
public Boolean add(TempSenserDto tempSenserDto,String type) {
Device device = new Device();
String deviceId = "temperature_sensor_"+SnowFlakeUtil.getDefaultSnowFlakeId();
device.setDeviceId(deviceId)
.setType(type)
.setName(tempSenserDto.getName())
.setPowerStationId(tempSenserDto.getPowerStationId())
.setProduct("TEMPERATURE")
.setMotorGroupId(tempSenserDto.getMotorGroupId())
.setPointId(tempSenserDto.getPointId())
.setStatus(1)
.setTempThreshold("")
.setConfig(tempSenserDto.getConfig().toJSONString())
.setVender(tempSenserDto.getTypeId());
boolean result = deviceMapper.insert(device)>0?true:false;
if(result){
DeviceLocalStatus.putIfAbsent(device.getPointId(), LocalStatus.builder().pointStatus(2).cameraStatus(2).tempSensorStatus(2).build());
}
return result;
}
@Override
public Boolean updateByBizId(TempSenserDto tempSenserDto) {
UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",tempSenserDto.getDeviceId())
.set("power_station",tempSenserDto.getPowerStationId())
.set("motor_group",tempSenserDto.getMotorGroupId())
.set("point",tempSenserDto.getPointId())
.set("name",tempSenserDto.getName())
.set("vender",tempSenserDto.getTypeId())
.set("config",tempSenserDto.getConfig().toJSONString());
return deviceMapper.update(null,updateWrapper)>0?true:false;
}
}

54
bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceTempleteServiceImpl.java

@ -0,0 +1,54 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.mapper.DeviceTempleteMapper;
import com.jiluo.bolt.entity.po.DeviceTemplete;
import com.jiluo.bolt.service.DeviceTempleteService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* (DeviceTemplete)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:11
*/
@Service
public class DeviceTempleteServiceImpl extends ServiceImpl<DeviceTempleteMapper, DeviceTemplete> implements DeviceTempleteService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(DeviceTempleteServiceImpl.class);
List<DeviceTemplete> deviceTempleteList = new ArrayList<>();
@Autowired
DeviceTempleteMapper deviceTempleteMapper;
@PostConstruct
private void init(){
QueryWrapper<DeviceTemplete> queryWrapper = new QueryWrapper<>();
deviceTempleteList = deviceTempleteMapper.selectList(queryWrapper);
}
@Override
public DeviceTemplete getByBizId(String venderId) {
return deviceTempleteList.stream().filter(x-> StringUtils.equalsIgnoreCase(x.getBizId(),venderId)).findFirst().orElse(null);
}
@Override
public List<DeviceTemplete> getByBizId(List<String> venderIds) {
return deviceTempleteList.stream().filter(x->venderIds.stream().anyMatch(_venderId -> StringUtils.equalsIgnoreCase(x.getBizId(),_venderId))).collect(Collectors.toList());
}
@Override
public List<DeviceTemplete> getAll() {
return deviceTempleteList;
}
}

99
bolt-core/src/main/java/com/jiluo/bolt/service/impl/JobServiceImpl.java

@ -0,0 +1,99 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.mapper.JobMapper;
import com.jiluo.bolt.entity.po.Job;
import com.jiluo.bolt.service.JobService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
import java.util.List;
/**
* 检测任务表(Job)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:12
*/
@Service
public class JobServiceImpl extends ServiceImpl<JobMapper, Job> implements JobService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(JobServiceImpl.class);
@Autowired
JobMapper jobMapper;
@Override
public Job getByBizId(String jobId) {
QueryWrapper<Job> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("biz_id",jobId);
return jobMapper.selectOne(queryWrapper);
}
public List<Job> getByBizId(List<String> jobIds) {
QueryWrapper<Job> queryWrapper = new QueryWrapper<>();
queryWrapper.in("biz_id", jobIds);
return jobMapper.selectList(queryWrapper);
}
public Job getRealtimeJob(String pointId, String product){
QueryWrapper<Job> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("point",pointId)
.eq("product",product)
.orderByDesc("gmt_create")
.last("limit 1");
return jobMapper.selectOne(queryWrapper);
}
public List<Job> getHistoryJob(String pointId, Integer status, String product, Integer current, Integer size,
@DateTimeFormat(pattern = "yyyy-MM-dd") String startTime,
@DateTimeFormat(pattern = "yyyy-MM-dd") String endTime){
StringBuilder lastSql = new StringBuilder();
lastSql.append("limit ").append(current-1).append(",").append(size);
QueryWrapper<Job> wrapper = new QueryWrapper<Job>();
//组装模糊查询条件
wrapper.eq(StringUtils.isNotBlank(pointId),"point",pointId)
.eq(status!=null,"status",status)
.eq(StringUtils.isNotBlank(product),"product",product)
.between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),"gmt_create",startTime,endTime)
.ne("attribute","{}")
.orderByDesc("gmt_create");
wrapper.last(lastSql.toString());
return jobMapper.selectList(wrapper);
}
public Integer getHistoryJobTotal(String pointId,Integer status, String product,
@DateTimeFormat(pattern = "yyyy-MM-dd") String startTime,
@DateTimeFormat(pattern = "yyyy-MM-dd") String endTime){
QueryWrapper<Job> wrapper = new QueryWrapper<Job>();
//组装模糊查询条件
wrapper.eq(StringUtils.isNotBlank(pointId),"point",pointId)
.eq(status!=null,"status",status)
.eq(StringUtils.isNotBlank(product),"product",product)
.between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),"gmt_create",startTime,endTime);
return jobMapper.selectCount(wrapper);
}
public List<Job> exportData(Date startTime, Date endTime){
QueryWrapper<Job> wrapper = new QueryWrapper<Job>();
//组装模糊查询条件
wrapper.between("gmt_create",startTime,endTime);
return jobMapper.selectList(wrapper);
}
public void addJob(Job job){
jobMapper.insert(job);
}
public void updateAttribute(String jobId, String attribute, Integer status){
UpdateWrapper<Job> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",jobId).set("attribute",attribute).set("status",status);
jobMapper.update(null,updateWrapper);
}
}

191
bolt-core/src/main/java/com/jiluo/bolt/service/impl/MinioServiceImpl.java

@ -0,0 +1,191 @@
package com.jiluo.bolt.service.impl;
import com.jiluo.bolt.service.MinioService;
import com.jiluo.bolt.util.MinioUtil;
import io.minio.ObjectStat;
import io.minio.Result;
import io.minio.errors.*;
import io.minio.messages.Item;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/10/13/14:58
* @Description:
*/
@Service
public class MinioServiceImpl implements MinioService {
@Autowired
private MinioUtil minioUtil;
/**
* 判断 bucket是否存在
*
* @param bucketName
* @return
*/
@Override
public boolean bucketExists(String bucketName) {
return minioUtil.bucketExists(bucketName);
}
/**
* 创建 bucket
*
* @param bucketName
*/
@Override
public void makeBucket(String bucketName) {
minioUtil.makeBucket(bucketName);
}
/**
* 文件上传
*
* @param bucketName
* @param objectName
* @param filename
*/
@Override
public void putObject(String bucketName, String objectName, String filename) {
minioUtil.putObject(bucketName, objectName, filename);
}
@Override
public void putObject(String bucketName, String objectName, InputStream stream, String contentType) {
minioUtil.putObject(bucketName, objectName, stream, contentType);
}
/**
* 文件上传
*
* @param bucketName
* @param multipartFile
*/
@Override
public void putObject(String bucketName, MultipartFile multipartFile, String filename) {
minioUtil.putObject(bucketName, multipartFile, filename);
}
/**
* 删除文件
*
* @param bucketName
* @param objectName
*/
@Override
public boolean removeObject(String bucketName, String objectName) {
return minioUtil.removeObject(bucketName, objectName);
}
/**
* 下载文件
*
* @param fileName
* @param originalName
* @param response
*/
@Override
public void downloadFile(String bucketName, String fileName, String originalName, HttpServletResponse response) {
minioUtil.downloadFile(bucketName, fileName, originalName, response);
}
/**
* 获取文件路径
*
* @param bucketName
* @param objectName
* @return
*/
@Override
public String getObjectUrl(String bucketName, String objectName) {
return minioUtil.getObjectUrl(bucketName, objectName);
}
/**
* @param bucketName
* @param objectName
* @description: 文件下载
* @param: bucketName
* objectName
* @return: io.minio.ObjectStat
* @author yangc
* @date: 2020-10-20 20:24
*/
@Override
public ObjectStat statObject(String bucketName, String objectName) {
return minioUtil.statObject(bucketName, objectName);
}
/**
* 以流的形式获取一个文件对象
*
* @param bucketName 存储桶名称
* @param objectName 存储桶里的对象名称
* @return
*/
@Override
public InputStream getObject(String bucketName, String objectName) {
return minioUtil.getObject(bucketName, objectName);
}
/**
* 列出存储桶中所有对象
*
* @param bucketName 存储桶名称
* @return
*/
@Override
public Iterable<Result<Item>> listObjects(String bucketName) {
return minioUtil.listObjects(bucketName);
}
/**
* 生成一个给HTTP GET请求用的presigned URL
*
* @param bucketName 存储桶名称
* @param objectName 存储桶里的对象名称
* @param expires 失效时间以秒为单位默认是7天不得大于七天
* @return
*/
@Override
public String presignedGetObject(String bucketName, String objectName, Integer expires) {
return minioUtil.presignedGetObject(bucketName, objectName, expires);
}
/**
* 设置存储桶策略
*
* @param bucketName 存储桶名称
* @param policy
* @return
*/
@Override
public void setBucketPolicy(String bucketName, String policy) throws IOException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, ErrorResponseException, XmlParserException, InvalidBucketNameException, InsufficientDataException, InternalException {
minioUtil.setBucketPolicy(bucketName, policy);
}
/**
* 获取存储桶策略
*
* @param bucketName 存储桶名称
* @return
*/
@Override
public String getBucketPolicy(String bucketName) throws IOException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, BucketPolicyTooLargeException, ErrorResponseException, XmlParserException, InvalidBucketNameException, InsufficientDataException, InternalException {
return minioUtil.getBucketPolicy(bucketName);
}
}

89
bolt-core/src/main/java/com/jiluo/bolt/service/impl/MotorGroupServiceImpl.java

@ -0,0 +1,89 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.entity.dto.MotorGroupDto;
import com.jiluo.bolt.mapper.MotorGroupMapper;
import com.jiluo.bolt.entity.po.MotorGroup;
import com.jiluo.bolt.service.MotorGroupService;
import com.jiluo.bolt.util.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* 机组信息表(MotorGroup)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:12
*/
@Service
public class MotorGroupServiceImpl extends ServiceImpl<MotorGroupMapper, MotorGroup> implements MotorGroupService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(MotorGroupServiceImpl.class);
@Autowired
MotorGroupMapper motorGroupMapper;
public List<MotorGroup> getAll(){
QueryWrapper<MotorGroup> queryWrapper = new QueryWrapper<>();
return motorGroupMapper.selectList(queryWrapper);
}
public MotorGroup getByBizId(String bizId){
QueryWrapper<MotorGroup> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("biz_id",bizId);
return motorGroupMapper.selectOne(queryWrapper);
}
public Integer getTotalByPowerStation(String powerStationId){
QueryWrapper<MotorGroup> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("power_station",powerStationId);
return motorGroupMapper.selectCount(queryWrapper);
}
@Override
public List<MotorGroup> select(MotorGroupDto motorGroupDto) {
QueryWrapper<MotorGroup> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(motorGroupDto.getNumber()),"name",motorGroupDto.getNumber())
.eq(StringUtils.isNotBlank(motorGroupDto.getPowerStationId()),"power_station",motorGroupDto.getPowerStationId());
return motorGroupMapper.selectList(queryWrapper);
}
@Override
public Integer selectTotal(MotorGroupDto motorGroupDto) {
QueryWrapper<MotorGroup> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(motorGroupDto.getNumber()),"name",motorGroupDto.getNumber())
.eq(StringUtils.isNotBlank(motorGroupDto.getPowerStationId()),"power_station",motorGroupDto.getPowerStationId());
return motorGroupMapper.selectCount(queryWrapper);
}
@Override
public Boolean add(MotorGroupDto motorGroupDto) {
MotorGroup motorGroup = new MotorGroup();
motorGroup.setMotorGroupId("GROUP_"+ SnowFlakeUtil.getDefaultSnowFlakeId())
.setName(motorGroupDto.getNumber()+"#机组")
.setContact(motorGroupDto.getContact())
.setPhone(motorGroupDto.getPhone())
.setPowerStation(motorGroupDto.getPowerStationId());
return motorGroupMapper.insert(motorGroup)>0?true:false;
}
@Override
public Boolean updateByBizId(MotorGroupDto motorGroupDto) {
UpdateWrapper<MotorGroup> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",motorGroupDto.getMotorGroupId())
.set("name",motorGroupDto.getNumber()+"#机组")
.set("contact",motorGroupDto.getContact())
.set("phone",motorGroupDto.getPhone())
.set("power_station",motorGroupDto.getPowerStationId());
return motorGroupMapper.update(null,updateWrapper)>0?true:false;
}
}

152
bolt-core/src/main/java/com/jiluo/bolt/service/impl/PointServiceImpl.java

@ -0,0 +1,152 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.entity.dto.PointDto;
import com.jiluo.bolt.mapper.PointMapper;
import com.jiluo.bolt.entity.po.Point;
import com.jiluo.bolt.service.DeviceService;
import com.jiluo.bolt.service.PointService;
import com.jiluo.bolt.util.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
/**
* 检测点表(Point)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:12
*/
@Service
public class PointServiceImpl extends ServiceImpl<PointMapper, Point> implements PointService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(PointServiceImpl.class);
@Autowired
PointMapper pointMapper;
public List<Point> getAll(){
QueryWrapper<Point> queryWrapper = new QueryWrapper<>();
List<Point> points = pointMapper.selectList(queryWrapper);
points.stream().forEach(point -> {
if (DeviceService.DeviceLocalStatus.containsKey(point.getPointId())){
point.setStatus(DeviceService.DeviceLocalStatus.get(point.getPointId()).getPointStatus());
}
});
return points;
}
public List<Point> getByRole(String motorGroup){
QueryWrapper<Point> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("motor_group",motorGroup);
return pointMapper.selectList(queryWrapper);
}
public void updateEnableDetect(String pointId,Integer enableDetect){
UpdateWrapper<Point> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",pointId).set("enable_detect",enableDetect);
pointMapper.update(null,updateWrapper);
}
public void updateResetTime(String pointId,Date date){
UpdateWrapper<Point> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",pointId).set("gmt_reset",date);
pointMapper.update(null,updateWrapper);
}
public void updateConfig(String pointId, String config){
UpdateWrapper<Point> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",pointId).set("config",config);
pointMapper.update(null,updateWrapper);
}
public Point getByBizId(String bizId){
QueryWrapper<Point> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("biz_id",bizId);
return pointMapper.selectOne(queryWrapper);
}
@Override
public Integer getTotalByMotorGroup(String motorGroupId) {
QueryWrapper<Point> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("motor_group",motorGroupId);
return pointMapper.selectCount(queryWrapper);
}
@Override
public List<Point> select(PointDto pointDto) {
QueryWrapper<Point> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(pointDto.getName()),"name",pointDto.getName())
.eq(StringUtils.isNotBlank(pointDto.getPowerStationId()),"power_station",pointDto.getPowerStationId())
.eq(StringUtils.isNotBlank(pointDto.getMotorGroupId()),"motor_group",pointDto.getMotorGroupId());
return pointMapper.selectList(queryWrapper);
}
@Override
public Integer selectTotal(PointDto pointDto) {
QueryWrapper<Point> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(pointDto.getName()),"name",pointDto.getName())
.eq(StringUtils.isNotBlank(pointDto.getPowerStationId()),"power_station",pointDto.getPowerStationId())
.eq(StringUtils.isNotBlank(pointDto.getMotorGroupId()),"motor_group",pointDto.getMotorGroupId());
return pointMapper.selectCount(queryWrapper);
}
@Override
public Boolean add(PointDto pointDto) {
Point point = new Point();
point.setPointId("POINT_"+ SnowFlakeUtil.getDefaultSnowFlakeId())
.setPowerStation(pointDto.getPowerStationId())
.setMotorGroup(pointDto.getMotorGroupId())
.setName(pointDto.getName())
.setPoleNum(pointDto.getPoleNum())
.setManualTime(pointDto.getManualTime().intValue())
.setAutomaticTime(pointDto.getAutomaticTime().intValue())
.setStatus(0)
.setEnableDetect(0)
.setBoltDetect(0)
.setLineDetect(0)
.setPoleOpenDetect(0)
.setPointTempDetect(0)
.setConfig(" ");
return pointMapper.insert(point)>0?true:false;
}
@Override
public Boolean updateByBizId(PointDto pointDto) {
UpdateWrapper<Point> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",pointDto.getPointId())
.set("power_station",pointDto.getPowerStationId())
.set("motor_group",pointDto.getMotorGroupId())
.set("name",pointDto.getName())
.set("pole_num",pointDto.getPoleNum())
.set("manual_time",pointDto.getManualTime())
.set("automatic_time",pointDto.getAutomaticTime());
return pointMapper.update(null,updateWrapper)>0?true:false;
}
@Override
public Boolean updateDetect(PointDto pointDto) {
UpdateWrapper<Point> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",pointDto.getPointId())
.set("bolt_detect",pointDto.getBoltDetect().equals(true)?0:1)
.set("line_detect",pointDto.getLineDetect().equals(true)?0:1)
.set("pole_open_detect",pointDto.getPoleOpenDetect().equals(true)?0:1)
.set("point_temp_detect",pointDto.getPointTempDetect().equals(true)?0:1);
return pointMapper.update(null,updateWrapper)>0?true:false;
}
@Override
public List<Point> getByPowerStation(String powerStationId) {
QueryWrapper<Point> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("power_station",powerStationId);
return pointMapper.selectList(queryWrapper);
}
}

77
bolt-core/src/main/java/com/jiluo/bolt/service/impl/PowerStationServiceImpl.java

@ -0,0 +1,77 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.entity.dto.PowerStationDto;
import com.jiluo.bolt.mapper.PowerStationMapper;
import com.jiluo.bolt.entity.po.PowerStation;
import com.jiluo.bolt.service.PowerStationService;
import com.jiluo.bolt.util.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* 电站表(PowerStation)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:12
*/
@Service
public class PowerStationServiceImpl extends ServiceImpl<PowerStationMapper, PowerStation> implements PowerStationService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(PowerStationServiceImpl.class);
@Autowired
PowerStationMapper powerStationMapper;
public List<PowerStation> getAll(){
QueryWrapper<PowerStation> queryWrapper = new QueryWrapper<>();
return powerStationMapper.selectList(queryWrapper);
}
public PowerStation getByBizId(String bizId){
QueryWrapper<PowerStation> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("biz_id",bizId);
return powerStationMapper.selectOne(queryWrapper);
}
public List<PowerStation> select(PowerStationDto powerStationDto){
QueryWrapper<PowerStation> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(powerStationDto.getName()),"name",powerStationDto.getName());
return powerStationMapper.selectList(queryWrapper);
}
public Integer selectTotal(PowerStationDto powerStationDto){
QueryWrapper<PowerStation> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(powerStationDto.getName()),"name",powerStationDto.getName());
return powerStationMapper.selectCount(queryWrapper);
}
public Boolean add(PowerStationDto powerStationDto){
PowerStation powerStation = new PowerStation();
powerStation.setPowerStationId("STATION_"+SnowFlakeUtil.getDefaultSnowFlakeId())
.setName(powerStationDto.getName())
.setAddress(powerStationDto.getAddress())
.setContact(powerStationDto.getContact())
.setPhone(powerStationDto.getPhone())
.setIntroduction(powerStationDto.getIntroduction());
return powerStationMapper.insert(powerStation)>0?true:false;
}
public Boolean updateByBizId(PowerStationDto powerStationDto){
UpdateWrapper<PowerStation> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("biz_id",powerStationDto.getPowerStationId())
.set(StringUtils.isNotBlank(powerStationDto.getName()),"name",powerStationDto.getName())
.set("address",powerStationDto.getAddress())
.set("contact",powerStationDto.getContact())
.set("phone",powerStationDto.getPhone())
.set("introduction",powerStationDto.getIntroduction());
return powerStationMapper.update(null,updateWrapper)>0?true:false;
}
}

21
bolt-core/src/main/java/com/jiluo/bolt/service/impl/ProductServiceImpl.java

@ -0,0 +1,21 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.mapper.ProductMapper;
import com.jiluo.bolt.entity.po.Product;
import com.jiluo.bolt.service.ProductService;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 检测类型表(Product)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:12
*/
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(ProductServiceImpl.class);
}

53
bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleItemServiceImpl.java

@ -0,0 +1,53 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.entity.po.RoleItem;
import com.jiluo.bolt.mapper.RoleItemMapper;
import com.jiluo.bolt.service.RoleItemService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 权限信息表(RoleItem)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:12
*/
@Service
public class RoleItemServiceImpl extends ServiceImpl<RoleItemMapper, RoleItem> implements RoleItemService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(RoleItemServiceImpl.class);
private List<RoleItem> roleItemList = new ArrayList<>();
@Autowired
RoleItemMapper roleItemMapper;
@PostConstruct
private void init(){
QueryWrapper<RoleItem> queryWrapper = new QueryWrapper<>();
roleItemList = roleItemMapper.selectList(queryWrapper);
}
public RoleItem getByBizId(String itemId){
return roleItemList.stream().filter(x -> StringUtils.equalsIgnoreCase(x.getBizId(), itemId)).findFirst().orElse(null);
}
public List<RoleItem> getByBizId(List<String> itemIds){
return roleItemList.stream().filter(x -> itemIds.stream().anyMatch(_itemId -> StringUtils.equalsIgnoreCase(x.getBizId(), _itemId))).collect(Collectors.toList());
}
public List<RoleItem> getAll(){
return roleItemList;
}
}

62
bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleServiceImpl.java

@ -0,0 +1,62 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.entity.dto.RoleDto;
import com.jiluo.bolt.mapper.RoleMapper;
import com.jiluo.bolt.entity.po.Role;
import com.jiluo.bolt.service.RoleService;
import com.jiluo.bolt.util.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* 角色信息表(Role)表服务实现类
* @author Fangy
* @date 2023-05-05 18:59:16
*/
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(RoleServiceImpl.class);
@Autowired
RoleMapper roleMapper;
public Role getByRoleId(String roleId){
QueryWrapper<Role> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("role_id",roleId);
return roleMapper.selectOne(queryWrapper);
}
@Override
public List<Role> select(RoleDto roleDto) {
QueryWrapper<Role> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(roleDto.getRoleId()),"role_id",roleDto.getRoleId())
.like(StringUtils.isNotBlank(roleDto.getRoleName()),"role_name",roleDto.getRoleName());
return roleMapper.selectList(queryWrapper);
}
@Override
public String add(RoleDto roleDto) {
Role role = new Role();
role.setRoleId("role_"+ SnowFlakeUtil.getDefaultSnowFlakeId())
.setRoleName(roleDto.getRoleName());
roleMapper.insert(role);
return role.getRoleId();
}
@Override
public Boolean updateByBizId(RoleDto roleDto) {
UpdateWrapper<Role> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("role_id",roleDto.getRoleId())
.set("role_name",roleDto.getRoleName());
return roleMapper.update(null,updateWrapper)>0?true:false;
}
}

64
bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleValueServiceImpl.java

@ -0,0 +1,64 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.entity.dto.PermissionDto;
import com.jiluo.bolt.entity.po.RoleValue;
import com.jiluo.bolt.mapper.RoleValueMapper;
import com.jiluo.bolt.service.RoleValueService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* 角色信息表(Role)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:12
*/
@Service
public class RoleValueServiceImpl extends ServiceImpl<RoleValueMapper, RoleValue> implements RoleValueService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(RoleValueServiceImpl.class);
@Autowired
RoleValueMapper roleValueMapper;
public List<RoleValue> getByRoleId(String roleId){
QueryWrapper<RoleValue> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("role_id",roleId);
return roleValueMapper.selectList(queryWrapper);
}
public RoleValue getProduct(String roleId){
QueryWrapper<RoleValue> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("role_id",roleId)
.eq("item_id","detect_pole");
return roleValueMapper.selectOne(queryWrapper);
}
@Override
public List<RoleValue> select(PermissionDto permissionDto) {
QueryWrapper<RoleValue> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("role_id",permissionDto.getRoleId());
return roleValueMapper.selectList(queryWrapper);
}
@Override
public Boolean add(RoleValue roleValue) {
return roleValueMapper.insert(roleValue)>0?true:false;
}
@Override
public Boolean updateByItemId(RoleValue roleValue) {
UpdateWrapper<RoleValue> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("role_id",roleValue.getRoleId())
.eq("item_id",roleValue.getItemId())
.set("item_value",roleValue.getItemValue());
return roleValueMapper.update(null,updateWrapper)>0?true:false;
}
}

65
bolt-core/src/main/java/com/jiluo/bolt/service/impl/UserServiceImpl.java

@ -0,0 +1,65 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.entity.dto.UserDto;
import com.jiluo.bolt.mapper.UserMapper;
import com.jiluo.bolt.entity.po.User;
import com.jiluo.bolt.service.UserService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* 用户信息表(User)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:12
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
@Autowired
private UserMapper userMapper;
public User getByUid(String uid){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("biz_id",uid);
User user = userMapper.selectOne(queryWrapper);
return user;
}
@Override
public List<User> select(UserDto userDto) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(userDto.getRole()),"role",userDto.getRole())
.like(StringUtils.isNotBlank(userDto.getUserName()),"user_name",userDto.getUserName());
return userMapper.selectList(queryWrapper);
}
@Override
public Boolean add(UserDto userDto) {
User user = new User();
user.setBizId(userDto.getUid())
.setUserName(userDto.getUserName())
.setPassword(userDto.getPassword())
.setRole(userDto.getRole());
return userMapper.insert(user)>0?true:false;
}
@Override
public Boolean updateByBizId(UserDto userDto) {
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id",userDto.getId())
.set("biz_id",userDto.getUid())
.set("user_name",userDto.getUserName())
.set("password",userDto.getPassword());
return userMapper.update(null,updateWrapper)>0?true:false;
}
}

31
bolt-core/src/main/java/com/jiluo/bolt/service/impl/VersionServiceImpl.java

@ -0,0 +1,31 @@
package com.jiluo.bolt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiluo.bolt.mapper.VersionMapper;
import com.jiluo.bolt.entity.po.Version;
import com.jiluo.bolt.service.VersionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 版本信息表(Version)表服务实现类
* @author Fangy
* @date 2023-05-05 10:10:12
*/
@Service
public class VersionServiceImpl extends ServiceImpl<VersionMapper, Version> implements VersionService {
/** logger:日志文件 */
private static final Logger logger = LoggerFactory.getLogger(VersionServiceImpl.class);
@Autowired
VersionMapper versionMapper;
public Version select(){
QueryWrapper<Version> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("available",1);
return versionMapper.selectOne(queryWrapper);
}
}

259
bolt-core/src/main/java/com/jiluo/bolt/util/AesEncryptUtil.java

@ -0,0 +1,259 @@
package com.jiluo.bolt.util;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/08/03/10:05
* @Description:
*/
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
/**
* AES /解密工具类
* 使用密钥时请使用 initKey() 方法来生成随机密钥
* initKey 方法内部使用 java.crypto.KeyGenerator 密钥生成器来生成特定于 AES 算法参数集的随机密钥
*/
@Slf4j
public class AesEncryptUtil {
private AesEncryptUtil() {
}
/**
* 密钥算法类型
*/
public static final String KEY_ALGORITHM = "AES";
/**
* 密钥的默认位长度
*/
public static final int DEFAULT_KEY_SIZE = 128;
/**
* 加解密算法/工作模式/填充方式
*/
private static final String ECB_PKCS_5_PADDING = "AES/ECB/PKCS5Padding";
public static final String ECB_NO_PADDING = "AES/ECB/NoPadding";
public static String base64Encode(byte[] bytes) {
return Base64.encodeBase64String(bytes);
}
public static byte[] base64Decode(String base64Code) {
return Base64.decodeBase64(base64Code);
}
public static byte[] aesEncryptToBytes(String content, String hexAesKey) throws Exception {
return encrypt(content.getBytes(StandardCharsets.UTF_8), Hex.decodeHex(hexAesKey.toCharArray()));
}
public static String aesEncrypt(String content, String hexAesKey) throws Exception {
return base64Encode(aesEncryptToBytes(content, hexAesKey));
}
public static String aesDecryptByBytes(byte[] encryptBytes, String hexAesKey) throws Exception {
byte[] decrypt = decrypt(encryptBytes, Hex.decodeHex(hexAesKey.toCharArray()));
return new String(decrypt, StandardCharsets.UTF_8);
}
public static String aesDecrypt(String encryptStr, String hexAesKey) throws Exception {
return aesDecryptByBytes(base64Decode(encryptStr), hexAesKey);
}
/**
* 生成 Hex 格式默认长度的随机密钥
* 字符串长度为 32解二进制后为 16 个字节
*
* @return String Hex 格式的随机密钥
*/
public static String initHexKey() {
return Hex.encodeHexString(initKey());
}
/**
* 生成默认长度的随机密钥
* 默认长度为 128
*
* @return byte[] 二进制密钥
*/
public static byte[] initKey() {
return initKey(DEFAULT_KEY_SIZE);
}
/**
* 生成密钥
* 128192256 可选
*
* @param keySize 密钥长度
* @return byte[] 二进制密钥
*/
public static byte[] initKey(int keySize) {
// AES 要求密钥长度为 128 位、192 位或 256 位
if (keySize != 128 && keySize != 192 && keySize != 256) {
throw new RuntimeException("error keySize: " + keySize);
}
// 实例化
KeyGenerator keyGenerator;
try {
keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("no such algorithm exception: " + KEY_ALGORITHM, e);
}
keyGenerator.init(keySize);
// 生成秘密密钥
SecretKey secretKey = keyGenerator.generateKey();
// 获得密钥的二进制编码形式
return secretKey.getEncoded();
}
/**
* 转换密钥
*
* @param key 二进制密钥
* @return Key 密钥
*/
private static Key toKey(byte[] key) {
// 实例化 DES 密钥材料
return new SecretKeySpec(key, KEY_ALGORITHM);
}
/**
* 加密
*
* @param data 待加密数据
* @param key 密钥
* @return byte[] 加密的数据
*/
public static byte[] encrypt(byte[] data, byte[] key) {
return encrypt(data, key, ECB_PKCS_5_PADDING);
}
/**
* 加密
*
* @param data 待加密数据
* @param key 密钥
* @param cipherAlgorithm 算法/工作模式/填充模式
* @return byte[] 加密的数据
*/
public static byte[] encrypt(byte[] data, byte[] key, final String cipherAlgorithm) {
// 还原密钥
Key k = toKey(key);
try {
Cipher cipher = Cipher.getInstance(cipherAlgorithm);
// 初始化,设置为加密模式
cipher.init(Cipher.ENCRYPT_MODE, k);
// 发现使用 NoPadding 时,使用 ZeroPadding 填充
if (ECB_NO_PADDING.equals(cipherAlgorithm)) {
return cipher.doFinal(formatWithZeroPadding(data, cipher.getBlockSize()));
}
// 执行操作
return cipher.doFinal(data);
} catch (Exception e) {
throw new RuntimeException("AES encrypt error", e);
}
}
/**
* 解密
*
* @param data 待解密数据
* @param key 密钥
* @return byte[] 解密的数据
*/
public static byte[] decrypt(byte[] data, byte[] key) {
return decrypt(data, key, ECB_PKCS_5_PADDING);
}
/**
* 解密
*
* @param data 待解密数据
* @param key 密钥
* @param cipherAlgorithm 算法/工作模式/填充模式
* @return byte[] 解密的数据
*/
public static byte[] decrypt(byte[] data, byte[] key, final String cipherAlgorithm) {
// 还原密钥
Key k = toKey(key);
try {
Cipher cipher = Cipher.getInstance(cipherAlgorithm);
// 初始化,设置为解密模式
cipher.init(Cipher.DECRYPT_MODE, k);
// 发现使用 NoPadding 时,使用 ZeroPadding 填充
if (ECB_NO_PADDING.equals(cipherAlgorithm)) {
return removeZeroPadding(cipher.doFinal(data), cipher.getBlockSize());
}
// 执行操作
return cipher.doFinal(data);
} catch (Exception e) {
throw new RuntimeException("AES decrypt error", e);
}
}
private static byte[] formatWithZeroPadding(byte[] data, final int blockSize) {
final int length = data.length;
final int remainLength = length % blockSize;
if (remainLength > 0) {
byte[] inputData = new byte[length + blockSize - remainLength];
System.arraycopy(data, 0, inputData, 0, length);
return inputData;
}
return data;
}
private static byte[] removeZeroPadding(byte[] data, final int blockSize) {
final int length = data.length;
final int remainLength = length % blockSize;
if (remainLength == 0) {
// 解码后的数据正好是块大小的整数倍,说明可能存在补 0 的情况,去掉末尾所有的 0
int i = length - 1;
while (i >= 0 && 0 == data[i]) {
i--;
}
byte[] outputData = new byte[i + 1];
System.arraycopy(data, 0, outputData, 0, outputData.length);
return outputData;
}
return data;
}
// public static void main(String[] args) throws Exception {
//
// byte[] bytes = AesEncryptUtil.initKey();
//
// // 使用密钥生成器 KeyGenerator 生成的 16 字节随机密钥的 hex 字符串,使用时解 hex 得到二进制密钥
// String aesKey = Hex.encodeHexString(bytes);
// System.out.println(aesKey);
//
//// String aesKey = "dbf13279f5bc85b038cbc9ee21dfbc03";
//
// String content = "123456";
// System.out.println("加密前:" + content);
//
// String encrypt = aesEncrypt(content, aesKey);
// System.out.println(encrypt.length() + ":加密后:" + encrypt);
//
// String decrypt = aesDecrypt(encrypt, aesKey);
// System.out.println("解密后:" + decrypt);
// }
}

24
bolt-core/src/main/java/com/jiluo/bolt/util/BigDecimalUtils.java

@ -0,0 +1,24 @@
package com.jiluo.bolt.util;
import com.jiluo.bolt.common.DefectType;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* Created with IntelliJ IDEA.
*
* @Author: fy
* @Date: 2023/10/25/13:58
* @Description:
*/
public class BigDecimalUtils {
public static BigDecimal DBToFront(DefectType _type, Integer value){
return (_type == DefectType.bolt || _type == DefectType.temperature) ? BigDecimal.valueOf(value / 100.0).setScale(2, RoundingMode.HALF_UP) : (_type == DefectType.line ? BigDecimal.valueOf(value / 1000.0).setScale(3, RoundingMode.HALF_UP) : BigDecimal.valueOf(value));
}
public static BigDecimal FrontToDB(DefectType _type, Float value){
return (_type == DefectType.bolt || _type == DefectType.temperature) ? BigDecimal.valueOf(value * 100).setScale(0, RoundingMode.HALF_UP) :
(_type == DefectType.line) ? BigDecimal.valueOf(value * 1000).setScale(0, RoundingMode.HALF_UP) : BigDecimal.valueOf(value);
}
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save