whyclxw
2024-08-28 0ae20eb0d70fb49c695716aaca7ea4634ac8d8fc
第一次提交
2个文件已删除
2 文件已重命名
16个文件已添加
29个文件已修改
1481 ■■■■■ 已修改文件
.idea/uiDesigner.xml 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/vcs.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/config/MinIoConfig.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/LoginController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/OperationLogController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/UploadController.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/UserInfController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/entity/MinIoUploadVo.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/entity/R.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/entity/ResultCodeEnum.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/filter/RolesOrAuthorizationFilter.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/DocUserMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/OperationLogMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/UserInfMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_lithium_ram_db/A200Realstate.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_lithium_ram_db/ActmRealstate.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_lithium_ram_db/BattRtdata.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_lithium_ram_db/DevA200Testparam.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_lithium_ram_db/DevActmTestparam.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_lithium_ram_db/DevInf.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_user/Baojigroup.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_user/BattgroupBaojigroup.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_user/OperationLog.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_user/UserInf.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/realm/CustomRealm.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/MinioService.java 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/OperationLogService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/UserBridgeService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/UserInfService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/UserUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/config/application-dev.yml 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/config/application-prod.yml 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/controller/LoginController.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/controller/OperationLogController.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/controller/UserInfController.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/filter/RolesOrAuthorizationFilter.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/mapper/DocUserMapper.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/mapper/OperationLogMapper.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/mapper/UserInfMapper.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/pojo/OperationLog.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/pojo/UserInf.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/realm/CustomRealm.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/service/OperationLogService.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/service/UserBridgeService.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/service/UserInfService.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/swagger/SwaggerConfig4Knife.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/com/whyc/util/UserUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/config/application-dev.yml 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/uiDesigner.xml
New file
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Palette2">
    <group name="Swing">
      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
      </item>
      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
      </item>
      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
      </item>
      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
      </item>
      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
        <initial-values>
          <property name="text" value="Button" />
        </initial-values>
      </item>
      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
        <initial-values>
          <property name="text" value="RadioButton" />
        </initial-values>
      </item>
      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
        <initial-values>
          <property name="text" value="CheckBox" />
        </initial-values>
      </item>
      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
        <initial-values>
          <property name="text" value="Label" />
        </initial-values>
      </item>
      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
          <preferred-size width="150" height="-1" />
        </default-constraints>
      </item>
      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
          <preferred-size width="150" height="-1" />
        </default-constraints>
      </item>
      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
          <preferred-size width="150" height="-1" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
      </item>
      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
          <preferred-size width="200" height="200" />
        </default-constraints>
      </item>
      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
          <preferred-size width="200" height="200" />
        </default-constraints>
      </item>
      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
      </item>
      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
      </item>
      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
      </item>
      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
      </item>
      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
          <preferred-size width="-1" height="20" />
        </default-constraints>
      </item>
      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
      </item>
      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
      </item>
    </group>
  </component>
</project>
.idea/vcs.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="$PROJECT_DIR$" vcs="Git" />
  </component>
</project>
pom.xml
@@ -16,6 +16,7 @@
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
@@ -103,6 +104,17 @@
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
            <version>1.3.70</version>
        </dependency>
        <!--pageHelper分页-->
        <dependency>
src/main/java/com/whyc/config/MinIoConfig.java
New file
@@ -0,0 +1,38 @@
package com.whyc.config;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @author 陳樂
 * @version 1.0.0
 * @ClassName MinIoConfig.java
 * @Description TODO
 * @createTime 2022年03月12日 14:01:00
 */
@Configuration
public class MinIoConfig {
    @Value("${minio.endpoint}")
    private String endpoint;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;
    /**
     * 注入minio 客户端
     *
     * @return
     */
    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }
}
src/main/java/com/whyc/controller/LoginController.java
@@ -2,7 +2,7 @@
import com.whyc.dto.Response;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.db_user.UserInf;
import com.whyc.service.UserInfService;
import com.whyc.util.UserUtil;
import io.swagger.annotations.Api;
src/main/java/com/whyc/controller/OperationLogController.java
@@ -1,7 +1,7 @@
package com.whyc.controller;
import com.whyc.dto.Response;
import com.whyc.pojo.OperationLog;
import com.whyc.pojo.db_user.OperationLog;
import com.whyc.service.OperationLogService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
src/main/java/com/whyc/controller/UploadController.java
New file
@@ -0,0 +1,104 @@
package com.whyc.controller;
import com.whyc.entity.MinIoUploadVo;
import com.whyc.entity.R;
import com.whyc.service.MinioService;
import io.minio.messages.DeleteObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * @author 陳樂
 * @version 1.0.0
 * @ClassName UploadController.java
 * @Description 文件上传处理
 * @createTime 2022年03月12日 14:03:00
 */
@RestController
@Slf4j
@RequestMapping("test")
@Api(tags = "测试")
public class UploadController {
    @Autowired
    private MinioService minioService;
    /**
     * 文件下载
     *
     * @param file
     * @param request
     * @return
     * @throws IOException
     */
    @PostMapping(value = "/upload")
    @ApiOperation("上传")
    public R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {
        //String strDir = request.getParameter("bucketName") == null ? "car" : request.getParameter("bucketName");
        String strDir ="test";
        try {
            MinIoUploadVo uploadVo = minioService.upload(strDir, file);
            return R.ok().message("文件上传成功").data(uploadVo);
        } catch (Exception e) {
            log.error("上传文件失败,msg={}", e.getMessage());
            e.printStackTrace();
            return R.error();
        }
    }
    /**
     * 文件下载公共组件
     *
     * @param minIoUploadVo
     * @param response
     */
    @RequestMapping(value = "/download", method = RequestMethod.GET)
    public void download(MinIoUploadVo minIoUploadVo, HttpServletResponse response) {
        try {
            minioService.download(response, minIoUploadVo.getBucketName(), minIoUploadVo.getMinFileName());
        } catch (Exception e) {
            log.error("下载文件失败,msg={}", e.getMessage());
            e.printStackTrace();
        }
    }
    /**
     * 文件服务器文件删除(支持多个)
     *
     * @param minIoUploadVo
     * @return
     */
    @RequestMapping(value = "/delete", method = RequestMethod.DELETE)
    public R delete(MinIoUploadVo minIoUploadVo) {
        try {
            List<DeleteObject> objectList = new ArrayList<>();
            String fileDir = minIoUploadVo.getBucketName().concat("/");
            Arrays.stream(minIoUploadVo.getMinFileName().split(",")).forEach(name -> objectList.add(new DeleteObject(fileDir.concat(name))));
            minioService.removeObject("car", objectList);
            return R.ok().message("删除成功");
        } catch (Exception e) {
            log.error("删除文件失败,msg={}", e.getMessage());
            e.printStackTrace();
            return R.error();
        }
    }
}
src/main/java/com/whyc/controller/UserInfController.java
@@ -1,7 +1,7 @@
package com.whyc.controller;
import com.whyc.dto.Response;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.db_user.UserInf;
import com.whyc.service.UserInfService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
src/main/java/com/whyc/entity/MinIoUploadVo.java
New file
@@ -0,0 +1,32 @@
package com.whyc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * @author 陳樂
 * @version 1.0.0
 * @ClassName MinIoUploadVo.java
 * @Description TODO
 * @createTime 2022年03月12日 14:32:00
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MinIoUploadVo implements Serializable {
    //对象桶名
    private String bucketName;
    //文件真实名称
    private String fileRealName;
    //文件名称
    private String minFileName;
    //文件路径
    private String minFileUrl;
}
src/main/java/com/whyc/entity/R.java
New file
@@ -0,0 +1,110 @@
package com.whyc.entity;
/**
 * @author 陈乐
 * @version 1.0.0
 * @ClassName R.java
 * @Description 统一返回结构体
 * @createTime 2022年02月08日 10:44:00
 */
public class R {
    private Boolean success;
    private Integer code;
    private String message;
    private Object data;
    // 构造器私有
    private R() {
    }
    // 通用返回成功
    public static R ok() {
        R r = new R();
        r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
        r.setCode(ResultCodeEnum.SUCCESS.getCode());
        r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
        return r;
    }
    // 通用返回失败,未知错误
    public static R error() {
        R r = new R();
        r.setSuccess(ResultCodeEnum.UNKNOWN_ERROR.getSuccess());
        r.setCode(ResultCodeEnum.UNKNOWN_ERROR.getCode());
        r.setMessage(ResultCodeEnum.UNKNOWN_ERROR.getMessage());
        return r;
    }
    // 设置结果,形参为结果枚举
    public static R setResult(ResultCodeEnum result) {
        R r = new R();
        r.setSuccess(result.getSuccess());
        r.setCode(result.getCode());
        r.setMessage(result.getMessage());
        return r;
    }
    /**
     * ------------使用链式编程,返回类本身-----------
     **/
    // 自定义返回数据
    public R data(Object data) {
        this.setData(data);
        return this;
    }
    // 自定义状态信息
    public R message(String message) {
        this.setMessage(message);
        return this;
    }
    // 自定义状态码
    public R code(Integer code) {
        this.setCode(code);
        return this;
    }
    // 自定义返回结果
    public R success(Boolean success) {
        this.setSuccess(success);
        return this;
    }
    public Boolean getSuccess() {
        return success;
    }
    public void setSuccess(Boolean success) {
        this.success = success;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
}
src/main/java/com/whyc/entity/ResultCodeEnum.java
New file
@@ -0,0 +1,37 @@
package com.whyc.entity;
import lombok.Getter;
/**
 * @author 陈乐
 * @version 1.0.0
 * @ClassName ResultCodeEnum.java
 * @Description 响应码枚举类
 * @createTime 2022年02月08日 10:42:00
 */
@Getter
public enum ResultCodeEnum {
    SUCCESS(true, 200, "成功"),
    UNKNOWN_ERROR(false, 500, "未知错误"),
    PARAM_ERROR(false, 501, "参数错误"),
    ;
    // 响应是否成功
    private Boolean success;
    // 响应状态码
    private Integer code;
    // 响应信息
    private String message;
    ResultCodeEnum(boolean success, Integer code, String message) {
        this.success = success;
        this.code = code;
        this.message = message;
    }
}
src/main/java/com/whyc/filter/RolesOrAuthorizationFilter.java
@@ -1,6 +1,6 @@
package com.whyc.filter;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.db_user.UserInf;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.CollectionUtils;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;
src/main/java/com/whyc/mapper/DocUserMapper.java
@@ -1,7 +1,7 @@
package com.whyc.mapper;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.db_user.UserInf;
import java.util.List;
src/main/java/com/whyc/mapper/OperationLogMapper.java
@@ -1,7 +1,7 @@
package com.whyc.mapper;
import com.whyc.pojo.OperationLog;
import com.whyc.pojo.db_user.OperationLog;
public interface OperationLogMapper extends CustomMapper<OperationLog> {
}
src/main/java/com/whyc/mapper/UserInfMapper.java
@@ -1,6 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.db_user.UserInf;
import org.apache.ibatis.annotations.Param;
import java.util.List;
src/main/java/com/whyc/pojo/db_lithium_ram_db/A200Realstate.java
New file
@@ -0,0 +1,106 @@
package com.whyc.pojo.db_lithium_ram_db;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * A200 设备实时状态表
 * </p>
 *
 * @author lxw
 * @since 2024-08-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_lithium_ram_db",value ="tb_a200_realstate")
@ApiModel(value="A200Realstate对象", description="A200 设备实时状态表")
public class A200Realstate implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    @ApiModelProperty(value = "设备ID")
    private Integer devId;
    @ApiModelProperty(value = "更新时间")
    private Date recordTime;
    @ApiModelProperty(value = "PACK/模组号")
    private String batteryName;
    @ApiModelProperty(value = "测试类型[1-放电  2-充电]")
    private Integer testType;
    @ApiModelProperty(value = "是否正在测试")
    private Integer isTesting;
    @ApiModelProperty(value = "测试开始时间")
    private String startTestTime;
    @ApiModelProperty(value = "测试时长(秒)")
    private Integer testDuration;
    @ApiModelProperty(value = "测试结束时间")
    private String stopTestTime;
    @ApiModelProperty(value = "最高单体电压(V)")
    private Double maxBatteryVoltage;
    @ApiModelProperty(value = "最低单体电压(V)")
    private Double minBatteryVoltage;
    @ApiModelProperty(value = "最高单体电压对应电芯编号")
    private Integer maxBatteryVoltageNumber;
    @ApiModelProperty(value = "最低单体电压对应电芯编号")
    private Integer minBatteryVoltageNumber;
    @ApiModelProperty(value = "电芯压差(mV)")
    private Double diffBatteryVoltage;
    @ApiModelProperty(value = "组端电压(V)")
    private Double storageVoltage;
    @ApiModelProperty(value = "测试电流(A)")
    private Double testCurrent;
    @ApiModelProperty(value = "测试容量(AH)")
    private Double testCapacity;
    @ApiModelProperty(value = "最小温度")
    private Double minBatteryTemperature;
    @ApiModelProperty(value = "最大温度")
    private Double maxBatteryTemperature;
    @ApiModelProperty(value = "最大温度对应温度序号")
    private Integer maxBatteryTemperatureNumber;
    @ApiModelProperty(value = "最小温度对应温度序号")
    private Integer minBatteryTemperatureNumber;
    @ApiModelProperty(value = "停机原因")
    private String stopReason;
    @ApiModelProperty(value = "停机原因序号")
    private Integer stopReasonNumber;
    @ApiModelProperty(value = "故障状态[0-无故障  1-有故障]")
    private Integer faultState;
}
src/main/java/com/whyc/pojo/db_lithium_ram_db/ActmRealstate.java
New file
@@ -0,0 +1,113 @@
package com.whyc.pojo.db_lithium_ram_db;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * ACTM 设备实时状态表
 * </p>
 *
 * @author lxw
 * @since 2024-08-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_lithium_ram_db",value ="tb_actm_realstate")
@ApiModel(value="ActmRealstate对象", description="ACTM 设备实时状态表")
public class ActmRealstate implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    @ApiModelProperty(value = "设备ID")
    private Integer devId;
    @ApiModelProperty(value = "模组序号 从0开始")
    private Integer batteryStorageIndex;
    @ApiModelProperty(value = "模组编号")
    private String moduleCode;
    @ApiModelProperty(value = "工作模式")
    private Integer workMode;
    @ApiModelProperty(value = "电池类型")
    private Integer batteryType;
    @ApiModelProperty(value = "电芯串数")
    private Integer batteryNumber;
    @ApiModelProperty(value = "单体目标电压")
    private Double batteryVoltageThreshold;
    @ApiModelProperty(value = "模组目标电压")
    private Double storageVoltageThreshold;
    @ApiModelProperty(value = "工作电流")
    private Double testCurrent;
    @ApiModelProperty(value = "温度传感器数量")
    private Integer ntcCount;
    @ApiModelProperty(value = "测试记录Id")
    private Integer testDataId;
    @ApiModelProperty(value = "是否正在测试")
    private Integer isTesting;
    @ApiModelProperty(value = "是否测试暂停")
    private Integer isTestPause;
    @ApiModelProperty(value = "测试开始时间")
    private String startTestTime;
    @ApiModelProperty(value = "测试时长(秒)")
    private Integer testDuration;
    @ApiModelProperty(value = "测试结束时间")
    private String stopTestTime;
    @ApiModelProperty(value = "电压Max")
    private Double maxBatteryVoltage;
    @ApiModelProperty(value = "电压Min")
    private Double minBatteryVoltage;
    @ApiModelProperty(value = "平均电压")
    private Double avgBatteryVoltage;
    @ApiModelProperty(value = "电芯压差")
    private Double diffBatteryVoltage;
    @ApiModelProperty(value = "模组总电压")
    private Double storageVoltage;
    @ApiModelProperty(value = "温度单位")
    private String temperatureUnitType;
    @ApiModelProperty(value = "模组状态")
    private String moduleStatus;
    @ApiModelProperty(value = "模组状态类型")
    private Integer moduleStatusInt;
    @ApiModelProperty(value = "模组状态颜色")
    private String moduleStatusColor;
    @ApiModelProperty(value = "故障信息")
    private String faultInfo;
}
src/main/java/com/whyc/pojo/db_lithium_ram_db/BattRtdata.java
New file
@@ -0,0 +1,70 @@
package com.whyc.pojo.db_lithium_ram_db;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 电池组单体实时状态信息表
 * </p>
 *
 * @author lxw
 * @since 2024-08-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_lithium_ram_db",value ="tb_batt_rtdata")
@ApiModel(value="BattRtdata对象", description="电池组单体实时状态信息表")
public class BattRtdata implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    @ApiModelProperty(value = "设备ID")
    private Integer devId;
    @ApiModelProperty(value = "电池组编号[0-组1 1-组2 ... 4-组4]")
    private Integer battIdx;
    @ApiModelProperty(value = "单体编号")
    private Integer monNum;
    @ApiModelProperty(value = "更新时间")
    private Date recordTime;
    @ApiModelProperty(value = "单体电压")
    private Double monVol;
    @ApiModelProperty(value = "单体温度")
    private Double monTmp;
    @ApiModelProperty(value = "单体电流")
    private Double monCurr;
    @ApiModelProperty(value = "单体容量")
    private Double monCap;
    @ApiModelProperty(value = "单体能量")
    private Double monWh;
    @ApiModelProperty(value = "单体状态")
    private Integer monState;
    @ApiModelProperty(value = "故障信息")
    private Integer monFault;
}
src/main/java/com/whyc/pojo/db_lithium_ram_db/DevA200Testparam.java
New file
@@ -0,0 +1,111 @@
package com.whyc.pojo.db_lithium_ram_db;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * A200测试参数表
 * </p>
 *
 * @author lxw
 * @since 2024-08-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_lithium_ram_db",value ="tb_dev_a200_testparam")
@ApiModel(value="DevA200Testparam对象", description="A200测试参数表")
public class DevA200Testparam implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    @ApiModelProperty(value = "设备ID")
    private Integer devId;
    @ApiModelProperty(value = "命令")
    private Integer opCmd;
    @ApiModelProperty(value = "返回响应码")
    private Integer returnCode;
    @ApiModelProperty(value = "pack/模组号")
    private String batteryName;
    @ApiModelProperty(value = "标称容量(AH)")
    private Double  nominalCapacity;
    @ApiModelProperty(value = "电池类型[0-磷酸铁锂  1-三元锂   2-太酸锂 4-锰酸锂]")
    private Integer batteryType;
    @ApiModelProperty(value = "电芯串数")
    private Integer batteryNumber;
    @ApiModelProperty(value = "电芯压差")
    private Double diffBatteryVoltage;
    @ApiModelProperty(value = "放电目标电压")
    private Double dischargeCurrent;
    @ApiModelProperty(value = "放电时间(秒)")
    private Integer dischargeTime;
    @ApiModelProperty(value = "预放容量(AH)")
    private Double dischargeCapacity;
    @ApiModelProperty(value = "预放容量限制是否开启")
    private Integer isDischargeCapacityEnable;
    @ApiModelProperty(value = "单串下限(V)")
    private Double minBatteryVoltage;
    @ApiModelProperty(value = "单串下限是否开启")
    private Double isMinBatteryVoltageEnable;
    @ApiModelProperty(value = "充电目标电压(V)")
    private Double chargeVoltage;
    @ApiModelProperty(value = "充电保护电压")
    private Double chargeProtectVoltage;
    @ApiModelProperty(value = "充电电流(A)")
    private Double chargeCurrent;
    @ApiModelProperty(value = "充电停机电流(A)")
    private Double chargeStopCurrent;
    @ApiModelProperty(value = "充电时间(秒)")
    private Integer chargeTime;
    @ApiModelProperty(value = "充电容量")
    private Double chargeCapacity;
    @ApiModelProperty(value = "预充容量限制是否开启")
    private Integer isChargeCapacityEnable;
    @ApiModelProperty(value = "单串上限")
    private Double maxBatteryVoltage;
    @ApiModelProperty(value = "单串上限限制是否开启")
    private Integer isMaxBatteryVoltageEnable;
    @ApiModelProperty(value = "充电功率(KW)")
    private Double chargePower;
    @ApiModelProperty(value = "单体温度保护")
    private Integer batteryTemperatureProtect;
}
src/main/java/com/whyc/pojo/db_lithium_ram_db/DevActmTestparam.java
New file
@@ -0,0 +1,74 @@
package com.whyc.pojo.db_lithium_ram_db;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * actm 测试参数表
 * </p>
 *
 * @author lxw
 * @since 2024-08-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_lithium_ram_db",value ="tb_dev_actm_testparam")
@ApiModel(value="DevActmTestparam对象", description="actm 测试参数表")
public class DevActmTestparam implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    private Integer devId;
    @ApiModelProperty(value = "操作命令")
    private Integer opCmd;
    @ApiModelProperty(value = "模组需要,从0开始")
    private Integer batteryStorageIndex;
    @ApiModelProperty(value = "模组编号")
    private String moduleCode;
    @ApiModelProperty(value = "工作模式[0-充电   1-放电   2-均衡]")
    private Integer workMode;
    @ApiModelProperty(value = "电池类型[0-铁锂 1-三元锂 2-钛酸锂 3-锰酸锂]")
    private Integer batteryType;
    @ApiModelProperty(value = "当前配置的电芯数量")
    private Integer batteryNumber;
    @ApiModelProperty(value = "当前配置的温度传感器数量")
    private Integer ntcCount;
    @ApiModelProperty(value = "测试电池列表[测试电池列表是将待测电芯编号用逗号分隔的字符串。例如:1,2,4,6 表示测试1#、2#、4#、6#电芯,其余没有包含的电芯不进行测试]")
    private String testBatteryArray;
    @ApiModelProperty(value = "电压阈值")
    private Double voltage;
    @ApiModelProperty(value = "工作电流")
    private Double current;
    @ApiModelProperty(value = "可配置的最大电芯数量[只读]")
    private Integer maxBatteryNumber;
    @ApiModelProperty(value = "可配置的最大温度传感器数量[只读]")
    private Integer maxNtcCount;
}
src/main/java/com/whyc/pojo/db_lithium_ram_db/DevInf.java
New file
@@ -0,0 +1,44 @@
package com.whyc.pojo.db_lithium_ram_db;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author lxw
 * @since 2024-08-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_lithium_ram_db",value ="tb_dev_inf")
@ApiModel(value="DevInf对象", description="")
public class DevInf implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "num", type = IdType.AUTO)
    private Integer num;
    private Integer devId;
    private String devIp;
    private Integer devType;
    private String devModel;
    private String devIdcode;
}
src/main/java/com/whyc/pojo/db_user/Baojigroup.java
New file
@@ -0,0 +1,38 @@
package com.whyc.pojo.db_user;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author lxw
 * @since 2024-08-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_user",value ="tb_baojigroup")
@ApiModel(value="Baojigroup对象", description="")
public class Baojigroup implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "num", type = IdType.AUTO)
    private Integer num;
    private Integer baojiGroupId;
    private String baojiGroupName;
}
src/main/java/com/whyc/pojo/db_user/BattgroupBaojigroup.java
New file
@@ -0,0 +1,40 @@
package com.whyc.pojo.db_user;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author lxw
 * @since 2024-08-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_user",value ="tb_battgroup_baojigroup")
@ApiModel(value="BattgroupBaojigroup对象", description="")
public class BattgroupBaojigroup implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    private Integer baojiGroupId;
    private Integer devId;
    private Integer userId;
}
src/main/java/com/whyc/pojo/db_user/OperationLog.java
File was renamed from src/main/java/com/whyc/pojo/OperationLog.java
@@ -1,4 +1,4 @@
package com.whyc.pojo;
package com.whyc.pojo.db_user;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
src/main/java/com/whyc/pojo/db_user/UserInf.java
File was renamed from src/main/java/com/whyc/pojo/UserInf.java
@@ -1,4 +1,4 @@
package com.whyc.pojo;
package com.whyc.pojo.db_user;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
src/main/java/com/whyc/realm/CustomRealm.java
@@ -1,7 +1,7 @@
package com.whyc.realm;
import com.whyc.anotation.Realm;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.db_user.UserInf;
import com.whyc.service.UserBridgeService;
import com.whyc.util.RSAUtil;
import org.apache.shiro.authc.*;
src/main/java/com/whyc/service/MinioService.java
New file
@@ -0,0 +1,252 @@
package com.whyc.service;
import com.whyc.entity.MinIoUploadVo;
import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.*;
/**
 * @author 陳樂
 * @version 1.0.0
 * @ClassName MinioService.java
 * @Description TODO
 * @createTime 2022年03月12日 14:26:00
 */
@Service
@Slf4j
public class MinioService {
    @Resource
    private MinioClient instance;
    @Value("${minio.endpoint}")
    private String endpoint;
    private static final String SEPARATOR_DOT = ".";
    private static final String SEPARATOR_ACROSS = "-";
    private static final String SEPARATOR_STR = "";
    /**
     * @Description 判断 bucket是否存在
     */
    public boolean bucketExists(String bucketName) {
        try {
            return instance.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 创建 bucket
     *
     * @param bucketName
     */
    public void makeBucket(String bucketName) {
        try {
            boolean isExist = instance.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if (!isExist) {
                instance.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * @param bucketName
     */
    public boolean removeBucket(String bucketName) throws InvalidKeyException, ErrorResponseException,
            IllegalArgumentException, InsufficientDataException, InternalException,
            InvalidResponseException, NoSuchAlgorithmException, XmlParserException, IOException, ServerException {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            Iterable<Result<Item>> myObjects = listObjects(bucketName);
            for (Result<Item> result : myObjects) {
                Item item = result.get();
                // 有对象文件,则删除失败
                if (item.size() > 0) {
                    return false;
                }
            }
            // 删除存储桶,注意,只有存储桶为空时才能删除成功。
            instance.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
            flag = bucketExists(bucketName);
            if (!flag) {
                return true;
            }
        }
        return false;
    }
    public List<String> listBucketNames() throws IOException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, ServerException, ErrorResponseException, XmlParserException, InsufficientDataException, InternalException {
        List<Bucket> bucketList = listBuckets();
        List<String> bucketListName = new ArrayList<>();
        for (Bucket bucket : bucketList) {
            bucketListName.add(bucket.name());
        }
        return bucketListName;
    }
    /**
     * 列出所有存储桶
     */
    public List<Bucket> listBuckets() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
        return instance.listBuckets();
    }
    /**
     * 列出存储桶中的所有对象名称
     */
    public List<String> listObjectNames(String bucketName) throws InvalidKeyException, ErrorResponseException,
            IllegalArgumentException, InsufficientDataException, InternalException,
            InvalidResponseException, NoSuchAlgorithmException, XmlParserException, IOException, ServerException {
        List<String> listObjectNames = new ArrayList<>();
        boolean flag = bucketExists(bucketName);
        if (flag) {
            Iterable<Result<Item>> myObjects = listObjects(bucketName);
            for (Result<Item> result : myObjects) {
                Item item = result.get();
                listObjectNames.add(item.objectName());
            }
        }
        return listObjectNames;
    }
    /**
     * 列出存储桶中的所有对象
     */
    public Iterable<Result<Item>> listObjects(String bucketName) {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            return instance.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
        }
        return null;
    }
    /**
     * 通过文件地址,保留原始文件名 文件上传
     */
    public MinIoUploadVo upload(String bucketName, String objectName, InputStream stream) throws Exception {
        if (!this.bucketExists(bucketName)) {
            this.makeBucket(bucketName);
        }
        instance.putObject(
                PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(
                        stream, stream.available(), -1) // PutObjectOptions,上传配置(文件大小,内存中文件分片大小)
                        .build());
        String url = instance.getPresignedObjectUrl(
                GetPresignedObjectUrlArgs.builder()
                        .method(Method.GET)
                        .bucket(bucketName)
                        .object(objectName)
                        .expiry(60 * 60 * 24)
                        .build());
        // 返回生成文件名、访问路径
        return new MinIoUploadVo(bucketName, objectName, "", url);
    }
    /**
     * 文件上传 (自定义文件名称)
     */
    public MinIoUploadVo upload(String strDir, MultipartFile multipartFile) throws Exception {
        // bucket 不存在,创建
        if (!this.bucketExists(strDir)) {
            this.makeBucket(strDir);
        }
        InputStream inputStream = multipartFile.getInputStream();
        // 创建一个 headers
        Map<String, String> headers = new HashMap<>();
        // 添加请求头 文件的ContentType 动态配置 multipartFile.getContentType()
        headers.put("Content-Type", "application/octet-stream");
        String fileName = multipartFile.getOriginalFilename();
        String minFileName = minFileName(fileName);
        instance.putObject(
                PutObjectArgs.builder().bucket(strDir).object(minFileName).stream(
                        inputStream, inputStream.available(), -1) // PutObjectOptions,上传配置(文件大小,内存中文件分片大小)
                        .headers(headers)
                        .build());
        String url = endpoint.concat("/").concat(strDir).concat("/").concat(minFileName);
        // 返回生成文件名、访问路径
        return new MinIoUploadVo(strDir, fileName, minFileName, url);
    }
    /**
     * 下载文件
     */
    public void download(HttpServletResponse response, String bucketName, String minFileName) throws Exception {
        InputStream fileInputStream =
                instance.getObject(
                        GetObjectArgs.builder().object(bucketName.concat("/").concat(minFileName)).build());
        response.setHeader("Content-Disposition", "attachment;filename=" + minFileName);
        response.setContentType("application/force-download");
        response.setCharacterEncoding("UTF-8");
        IOUtils.copy(fileInputStream, response.getOutputStream());
    }
    /**
     * 删除一个文件
     */
    public boolean removeObject(String bucketName, String objectName) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            instance.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());
            return true;
        }
        return false;
    }
    /**
     * 删除指定桶的多个文件对象, 返回删除错误的对象列表,全部删除成功,返回空列
     */
    public List<String> removeObject(String bucketName, List<DeleteObject> objects) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
        List<String> deleteErrorNames = new ArrayList<>();
        boolean flag = bucketExists(bucketName);
        if (flag) {
            Iterable<Result<DeleteError>> results = instance.removeObjects(
                    RemoveObjectsArgs.builder().bucket(bucketName).objects(objects).build());
            for (Result<DeleteError> result : results) {
                DeleteError error = result.get();
                deleteErrorNames.add(error.objectName());
            }
        }
        return deleteErrorNames;
    }
    /**
     * 生成上传文件名
     */
    private String minFileName(String originalFileName) {
        String suffix = originalFileName;
        if (originalFileName.contains(SEPARATOR_DOT)) {
            suffix = originalFileName.substring(originalFileName.lastIndexOf(SEPARATOR_DOT));
        }
        return UUID.randomUUID().toString().replace(SEPARATOR_ACROSS, SEPARATOR_STR).toUpperCase() + suffix;
    }
}
src/main/java/com/whyc/service/OperationLogService.java
@@ -7,8 +7,8 @@
import com.whyc.constant.OperationLogEnum;
import com.whyc.dto.Response;
import com.whyc.mapper.OperationLogMapper;
import com.whyc.pojo.OperationLog;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.db_user.OperationLog;
import com.whyc.pojo.db_user.UserInf;
import com.whyc.util.HttpUtil;
import com.whyc.util.UserUtil;
import org.springframework.stereotype.Service;
src/main/java/com/whyc/service/UserBridgeService.java
@@ -3,7 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.whyc.mapper.DocUserMapper;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.db_user.UserInf;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.springframework.cache.CacheManager;
src/main/java/com/whyc/service/UserInfService.java
@@ -7,7 +7,7 @@
import com.github.pagehelper.PageInfo;
import com.whyc.dto.Response;
import com.whyc.mapper.UserInfMapper;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.db_user.UserInf;
import com.whyc.util.MD5Util;
import com.whyc.util.RSAUtil;
import org.apache.shiro.SecurityUtils;
src/main/java/com/whyc/util/UserUtil.java
@@ -1,6 +1,6 @@
package com.whyc.util;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.db_user.UserInf;
import org.apache.shiro.SecurityUtils;
/**
src/main/resources/config/application-dev.yml
@@ -3,12 +3,12 @@
  type: 1
#服务端口号
server:
  port: 8095
  port: 8098
  servlet:
    context-path: /ms
    context-path: /ls
    session:
      cookie:
        name: MonitStation
        name: LithiumBms
  tomcat:
    max-http-form-post-size: 102400000
@@ -28,12 +28,6 @@
    multipart:
      max-file-size: -1
      max-request-size: -1
  mail:
    host: smtp.163.com
    port:
    username: whyc_doc@163.com
    password: JAMKMEQUOAGGMSVV
    default-encoding: UTF-8
mybatis-plus:
  typeAliasesPackage: com.whyc.pojo,com.whyc.dto
  mapper-locations: classpath:mapper/**/*Mapper.xml
@@ -68,22 +62,6 @@
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
custom:
  #人脸
  face:
    threshold: 0.8
    appId4Win: AafPX5afzycEnTqH3v79gY3VozNVTSNqT8kzSmP7b48q
    sdkKey4Win: GsYwWhxzuQEE1WE34J3Fo8d2QppjkqYGojyc4625JhKb
    appId4Linux: AafPX5afzycEnTqH3v79gY3VozNVTSNqT8kzSmP7b48q
    sdkKey4Linux: GsYwWhxzuQEE1WE34J3Fo8d2GiFdddqH81ghetQQTGmv
  #告警短信
  message:
    switch: OFF
    secret_id: AKIDaz80bw0oLbbLo0vay5vVoqb5IEtIQItD
    secret_key: 4sPeeNp0tWsVrxmLdfQu73i6D2btufAO
    region: ap-nanjing
    smsSdkAppId: 1400565791
    signName: 武汉源畅科技有限公司
    templateId: 1095970
  #告警工单
  alarm:
    task.switch: off
@@ -92,19 +70,18 @@
  rsa:
    #publicKey: ENC(ZCCRYK0TIFYCrdHZprQS0I8hWFD1uXKIRYcfwDkh3V87FjFePAWlWIzi6tJFcswo525c+m5UGmkt+eq/wCIIabjbcbt6l+18hz6ogtGXHTalaEATqjbrjWmbdzc92A6dYmoNI5Rdpi+jqBKciXZhDKWDNPY2M3/WyejcPGDOeo9CWOvR1hdmLX8iTlcuPRS6k7YzybGZwP9cOHfcAyt6QN+GSuNRzapo5pUmQdT7aUwF3P73qcoxHpRO1li6kYF9KVOMgVix8a3h6TyFMMuJdPGboRV8DL9wLK3bnJT6s0Ei35niYv4ePJ7IzHiEa4J1x0wo8pNU0CfdhylySWLsnxgFjzbhMWjmoQhwQjjnTj+DgyvRrZqaE3R0cLpSwxT4x2ceHzKm1KUzF7OhGgnmc3lPN3H8UyVHy+l3GyejGpRnqFtABHqIlbM2nbsTA8lT/sAeN/AVlBORNgd5Rai7upWk43pvd2qG9ykSW+t/++ZiKBXfAZOBgrcWhPseEG94e3bHhM62nwcgHZ5HzFCZ8PEwXn0053vbxdM6LxVIqCAIzrWoOgBWoaRRBqfSUTvJf2tdc5m9NncXRmYEzZOg3f1wOvVGDJeyKC3OuyhlJnD2VWYVwNsorDkI+dT9mPAMMTZaPeqwPGxtkjaaFSgB5RDHcBfeEIMNdAVOqMCA9qOLFX+zr9mHvjV1kpiDKb5JZFhLHlXObROUtqMndTQDRCATBjutLB4QS0/0BCOvSLnDTA39e/nVKBwTHPqnlz4N)
    #privateKey: ENC(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)
    publicKey: ENC(QR8EpIC0jzG2E29Dhtq/vqrwt99WtUix/h2J8OvD90w0fosfUM1EFpdHJ2nsdP84BOeVNoPmudqXCYWVeCuTrVkqfb2z8mMLDl8cry78P8Tu4il3m9hGxqjdeNJbdYA6z6eRaInoJj5BHUyNpAJDaNacMZoOUJU6lMySwujyrD8PfSY97St0XPL5GIFP9rP1FCnlVWBeH4tqZKZ6MGncYJaITUZ/BIPkhpDYxi+i4CnMIBqytCJ6OJCzjLBI44UsQOzsdLgppAE2O0fmgyXA6bh0VRdIaRhqDIrjur2e4sOEvjadORN0Kg==)
    privateKey: ENC(fDshYRxHSlpJ2v+CmDGzH/PlFIKr9+hcPg0patE+nOFMKQaEVNLj9XxOlGEDFabSLFvy1imSRmOF08EE/z9cmlsp+hfbF6feR6YABRHgDxOGWusZ9QKYLhv6vDD6pebKb2W3FCuIHnLicMiJfzpM5KGylTMv7rvtM7tFR8ZhDzn3s8uYotz6ORcfCPdgOcUcNHXT0WS2KA0NigsRH5YMF5IOCP2jNTaOFDDXYacjfGOwjFIGE71BMJCnMRp6RnukbAY1ZN3J88GpYRzYCYD/S9DbGFVY9giH0T7FZs5cgPsCoDZ1dIeJhmjbOxoQpwKoDZzvlYbsstMH+6wApaWgx9TJfBoNjEJdqM1S3asukV4bUq4cZnmryCeSWSYkR2FDuH792rXL3Msh2Jc2hB2Cg9ZPB5hljN5GWV0fYiKNjJW2ovgBZZRWURorkrfBReKsxuLcHlbBcdHBF9DZDJyy40fg9GP6w40uG3hBKd/OlA9IYWNWEgqgeMkNmesG9RTc4X7EG2Ar4MEDa1p6o3unIve/zTCpLoFzKCRIjYcqlW1pZfSwZD4wu6JJf+5tUoXaEEf5YD4dcWCD4DzUcv4qhOpHXDBtM3E45VdacMWZNdE7fXcDzWpgYdUSQ88HsXRjmaW0O/x5irdN5KGa89yj5bDYQeMzR7Cervxml3MUZSrkHVKsa9yWverlLaRXzTue3+MXgDudm1stHju5p2x55GWG9ZfcErDoTNqhgPwcbJnW7/vXFpoTt6AF3t8vbD7f5G+FXnvYLDUWtdNS8KN6X+EOkh4GWootC+QMEKArDr8AyL+5D2TkBGIDMAag/LVwAKSwvBs2+e/xsSlw+AuAsWcfb9whJCZNVogpA1jE56SIdIBtw4G4Lw9LMlJ2MprkV6e2VAtBwpou3fd5pUsKpu51WBfISRy60vls7Fu0mQXrT7cCzThptrk9KgIhjMtiI2jf6YpultF1+Hg5+IK863wKpiNmJbxmA+AOc171LVmNlqiSdDp2fptfIgaI5IMcLMJj8zvY2gghAGoRrchpSkteTLc48om87Duw1gR5lAZjUYzNON9wETte9bfUvQ6/ZkQE3rjEUY6TfyokKJf4X/0ZxKFz0YzkcHDXBaPefrIWxQGygeTsy0kZO7UKpYZo)
    publicKey: ENC(RFwEWQPojWyBu7BO0WwGEum/3YChVJuxg9i9W02gfSYi4V7Po56zRhFFGdIl60lTFxEA7JVgVZ+BTVVFAJcuaNECgVT0IbuzvGk/8GZslhVXciPqwonQmUxGbGQ9HP7wOl+pCkAB9vPa9qYnGrOb8Ie1c9Yz/ogGJzFBHPB5MFmkAKrt/QC55oBCFhj3+8JZYYDdy8HElZzjtp5BtPD60h0DVOLbw94PG8680VZNDv25yhtAZdsXYIpDpUuxAA+kvp0Zl0dXDRw6BHcPh0PP+q65pz56Fgy+8AXnPEP/o8jkaEs7WWFqqspHsi9joapK4rX47qyQX+2gLdjvI5gqcCucIC/lGl0uGusrWc7HbPGkVWewr7wKIv5hLGc2keMijLjGlqBr2PFBGtPeSk+BVxCIHK4kjKQ32bHP6OE4MtIjzg5G3M2fd04/KWDRqWkYq45oiJc2KBggyYCTUD4KkTVwL4OZxaqC7wQFmJbz2tzA2uvh0ejR3lA+lMSqjWarw7GuHK+L1on6ogzGOM5GHkuehkTvbQdCOOAxARg8YRiNd6tgnGwk7G+spLco3yqTbKcEy6Cr/oJ1ay4apiUgoyakA3/Lz0R+Z2zBKVzHp+kRN6R2Y4JzqmhHdbvLm2UrCkL4NA3NBQICbEiFlIccyUV+w48c3ENb+y+hLuzExI4baY4DF3CNYEwpIi8GEX5rwRlhxrr9FNpxkdx0Tkog+SLu4JMS9LDdiQZNimAxvdZqGpJxpoe6v7GVSs8TjEBy)
    privateKey: ENC(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)
#Config文件读取 涉及License和FGCDFileDownload
configFile:
  type: 1 #1:本地测试;2:打包jar
#FTP本分数据
ftpInforMation:
  ftpIp: 192.168.10.79
  ftpPort: 21
  ftpUserName: lxw
  ftpPassword: luxingwei+810412026
minio:
  endpoint: http://127.0.0.1:9002
  accessKey: minioadmin
  secretKey: minioadmin
  bucketName: test
src/main/resources/config/application-prod.yml
@@ -3,12 +3,12 @@
  type: 1
#服务端口号
server:
  port: 8095
  port: 8098
  servlet:
    context-path: /ms
    context-path: /ls
    session:
      cookie:
        name: MonitStation
        name: LithiumBms
  tomcat:
    max-http-form-post-size: 102400000
@@ -17,9 +17,9 @@
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3381/db_user?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
    url: jdbc:mysql://localhost:3361/db_user?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
    username: root
    password: ENC(TCTafHgB8pLJhvf59unszvgwRS5M2AVq)
    password: hdw8688139
    maxIdel: 60
    initialPoolSize: 2
    minPoolSize: 2
@@ -28,12 +28,6 @@
    multipart:
      max-file-size: -1
      max-request-size: -1
  mail:
    host: smtp.163.com
    port:
    username: whyc_doc@163.com
    password: JAMKMEQUOAGGMSVV
    default-encoding: UTF-8
mybatis-plus:
  typeAliasesPackage: com.whyc.pojo,com.whyc.dto
  mapper-locations: classpath:mapper/**/*Mapper.xml
@@ -54,7 +48,7 @@
    map-underscore-to-camel-case: true
    cache-enabled: false
    #mybatis日志输出
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
pagehelper:
  helper-dialect: mysql
  reasonable: true
@@ -68,40 +62,26 @@
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
custom:
  #人脸
  face:
    threshold: 0.8
    appId4Win: AafPX5afzycEnTqH3v79gY3VozNVTSNqT8kzSmP7b48q
    sdkKey4Win: GsYwWhxzuQEE1WE34J3Fo8d2QppjkqYGojyc4625JhKb
    appId4Linux: AafPX5afzycEnTqH3v79gY3VozNVTSNqT8kzSmP7b48q
    sdkKey4Linux: GsYwWhxzuQEE1WE34J3Fo8d2GiFdddqH81ghetQQTGmv
  #告警短信
  message:
    switch: OFF
    secret_id: AKIDaz80bw0oLbbLo0vay5vVoqb5IEtIQItD
    secret_key: 4sPeeNp0tWsVrxmLdfQu73i6D2btufAO
    region: ap-nanjing
    smsSdkAppId: 1400565791
    signName: 武汉源畅科技有限公司
    templateId: 1095970
  #告警工单
  alarm:
    task.switch: off
  #允许跨域的白名单 http://192.168.10.132:8080,http://192.168.10.109:8080
  cors: http://localhost:8080
  cors: http://localhost:8080,http://192.168.10.133:8080
  rsa:
    #publicKey: ENC(ZCCRYK0TIFYCrdHZprQS0I8hWFD1uXKIRYcfwDkh3V87FjFePAWlWIzi6tJFcswo525c+m5UGmkt+eq/wCIIabjbcbt6l+18hz6ogtGXHTalaEATqjbrjWmbdzc92A6dYmoNI5Rdpi+jqBKciXZhDKWDNPY2M3/WyejcPGDOeo9CWOvR1hdmLX8iTlcuPRS6k7YzybGZwP9cOHfcAyt6QN+GSuNRzapo5pUmQdT7aUwF3P73qcoxHpRO1li6kYF9KVOMgVix8a3h6TyFMMuJdPGboRV8DL9wLK3bnJT6s0Ei35niYv4ePJ7IzHiEa4J1x0wo8pNU0CfdhylySWLsnxgFjzbhMWjmoQhwQjjnTj+DgyvRrZqaE3R0cLpSwxT4x2ceHzKm1KUzF7OhGgnmc3lPN3H8UyVHy+l3GyejGpRnqFtABHqIlbM2nbsTA8lT/sAeN/AVlBORNgd5Rai7upWk43pvd2qG9ykSW+t/++ZiKBXfAZOBgrcWhPseEG94e3bHhM62nwcgHZ5HzFCZ8PEwXn0053vbxdM6LxVIqCAIzrWoOgBWoaRRBqfSUTvJf2tdc5m9NncXRmYEzZOg3f1wOvVGDJeyKC3OuyhlJnD2VWYVwNsorDkI+dT9mPAMMTZaPeqwPGxtkjaaFSgB5RDHcBfeEIMNdAVOqMCA9qOLFX+zr9mHvjV1kpiDKb5JZFhLHlXObROUtqMndTQDRCATBjutLB4QS0/0BCOvSLnDTA39e/nVKBwTHPqnlz4N)
    #privateKey: ENC(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)
    publicKey: ENC(QR8EpIC0jzG2E29Dhtq/vqrwt99WtUix/h2J8OvD90w0fosfUM1EFpdHJ2nsdP84BOeVNoPmudqXCYWVeCuTrVkqfb2z8mMLDl8cry78P8Tu4il3m9hGxqjdeNJbdYA6z6eRaInoJj5BHUyNpAJDaNacMZoOUJU6lMySwujyrD8PfSY97St0XPL5GIFP9rP1FCnlVWBeH4tqZKZ6MGncYJaITUZ/BIPkhpDYxi+i4CnMIBqytCJ6OJCzjLBI44UsQOzsdLgppAE2O0fmgyXA6bh0VRdIaRhqDIrjur2e4sOEvjadORN0Kg==)
    privateKey: ENC(fDshYRxHSlpJ2v+CmDGzH/PlFIKr9+hcPg0patE+nOFMKQaEVNLj9XxOlGEDFabSLFvy1imSRmOF08EE/z9cmlsp+hfbF6feR6YABRHgDxOGWusZ9QKYLhv6vDD6pebKb2W3FCuIHnLicMiJfzpM5KGylTMv7rvtM7tFR8ZhDzn3s8uYotz6ORcfCPdgOcUcNHXT0WS2KA0NigsRH5YMF5IOCP2jNTaOFDDXYacjfGOwjFIGE71BMJCnMRp6RnukbAY1ZN3J88GpYRzYCYD/S9DbGFVY9giH0T7FZs5cgPsCoDZ1dIeJhmjbOxoQpwKoDZzvlYbsstMH+6wApaWgx9TJfBoNjEJdqM1S3asukV4bUq4cZnmryCeSWSYkR2FDuH792rXL3Msh2Jc2hB2Cg9ZPB5hljN5GWV0fYiKNjJW2ovgBZZRWURorkrfBReKsxuLcHlbBcdHBF9DZDJyy40fg9GP6w40uG3hBKd/OlA9IYWNWEgqgeMkNmesG9RTc4X7EG2Ar4MEDa1p6o3unIve/zTCpLoFzKCRIjYcqlW1pZfSwZD4wu6JJf+5tUoXaEEf5YD4dcWCD4DzUcv4qhOpHXDBtM3E45VdacMWZNdE7fXcDzWpgYdUSQ88HsXRjmaW0O/x5irdN5KGa89yj5bDYQeMzR7Cervxml3MUZSrkHVKsa9yWverlLaRXzTue3+MXgDudm1stHju5p2x55GWG9ZfcErDoTNqhgPwcbJnW7/vXFpoTt6AF3t8vbD7f5G+FXnvYLDUWtdNS8KN6X+EOkh4GWootC+QMEKArDr8AyL+5D2TkBGIDMAag/LVwAKSwvBs2+e/xsSlw+AuAsWcfb9whJCZNVogpA1jE56SIdIBtw4G4Lw9LMlJ2MprkV6e2VAtBwpou3fd5pUsKpu51WBfISRy60vls7Fu0mQXrT7cCzThptrk9KgIhjMtiI2jf6YpultF1+Hg5+IK863wKpiNmJbxmA+AOc171LVmNlqiSdDp2fptfIgaI5IMcLMJj8zvY2gghAGoRrchpSkteTLc48om87Duw1gR5lAZjUYzNON9wETte9bfUvQ6/ZkQE3rjEUY6TfyokKJf4X/0ZxKFz0YzkcHDXBaPefrIWxQGygeTsy0kZO7UKpYZo)
    publicKey: ENC(RFwEWQPojWyBu7BO0WwGEum/3YChVJuxg9i9W02gfSYi4V7Po56zRhFFGdIl60lTFxEA7JVgVZ+BTVVFAJcuaNECgVT0IbuzvGk/8GZslhVXciPqwonQmUxGbGQ9HP7wOl+pCkAB9vPa9qYnGrOb8Ie1c9Yz/ogGJzFBHPB5MFmkAKrt/QC55oBCFhj3+8JZYYDdy8HElZzjtp5BtPD60h0DVOLbw94PG8680VZNDv25yhtAZdsXYIpDpUuxAA+kvp0Zl0dXDRw6BHcPh0PP+q65pz56Fgy+8AXnPEP/o8jkaEs7WWFqqspHsi9joapK4rX47qyQX+2gLdjvI5gqcCucIC/lGl0uGusrWc7HbPGkVWewr7wKIv5hLGc2keMijLjGlqBr2PFBGtPeSk+BVxCIHK4kjKQ32bHP6OE4MtIjzg5G3M2fd04/KWDRqWkYq45oiJc2KBggyYCTUD4KkTVwL4OZxaqC7wQFmJbz2tzA2uvh0ejR3lA+lMSqjWarw7GuHK+L1on6ogzGOM5GHkuehkTvbQdCOOAxARg8YRiNd6tgnGwk7G+spLco3yqTbKcEy6Cr/oJ1ay4apiUgoyakA3/Lz0R+Z2zBKVzHp+kRN6R2Y4JzqmhHdbvLm2UrCkL4NA3NBQICbEiFlIccyUV+w48c3ENb+y+hLuzExI4baY4DF3CNYEwpIi8GEX5rwRlhxrr9FNpxkdx0Tkog+SLu4JMS9LDdiQZNimAxvdZqGpJxpoe6v7GVSs8TjEBy)
    privateKey: ENC(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)
#Config文件读取 涉及License和FGCDFileDownload
configFile:
  type: 2 #1:本地测试;2:打包jar
#FTP本分数据
ftpInforMation:
  ftpIp: 192.168.10.79
  ftpPort: 21
  ftpUserName: lxw
  ftpPassword: luxingwei+810412026
minio:
  endpoint: http://127.0.0.1:9002
  accessKey: minioadmin
  secretKey: minioadmin
  bucketName: test
target/classes/com/whyc/controller/LoginController.class
Binary files differ
target/classes/com/whyc/controller/OperationLogController.class
Binary files differ
target/classes/com/whyc/controller/UserInfController.class
Binary files differ
target/classes/com/whyc/filter/RolesOrAuthorizationFilter.class
Binary files differ
target/classes/com/whyc/mapper/DocUserMapper.class
Binary files differ
target/classes/com/whyc/mapper/OperationLogMapper.class
Binary files differ
target/classes/com/whyc/mapper/UserInfMapper.class
Binary files differ
target/classes/com/whyc/pojo/OperationLog.class
Binary files differ
target/classes/com/whyc/pojo/UserInf.class
Binary files differ
target/classes/com/whyc/realm/CustomRealm.class
Binary files differ
target/classes/com/whyc/service/OperationLogService.class
Binary files differ
target/classes/com/whyc/service/UserBridgeService.class
Binary files differ
target/classes/com/whyc/service/UserInfService.class
Binary files differ
target/classes/com/whyc/swagger/SwaggerConfig4Knife.class
Binary files differ
target/classes/com/whyc/util/UserUtil.class
Binary files differ
target/classes/config/application-dev.yml
@@ -3,12 +3,12 @@
  type: 1
#服务端口号
server:
  port: 8095
  port: 8098
  servlet:
    context-path: /ms
    context-path: /ls
    session:
      cookie:
        name: MonitStation
        name: LithiumBms
  tomcat:
    max-http-form-post-size: 102400000
@@ -28,12 +28,6 @@
    multipart:
      max-file-size: -1
      max-request-size: -1
  mail:
    host: smtp.163.com
    port:
    username: whyc_doc@163.com
    password: JAMKMEQUOAGGMSVV
    default-encoding: UTF-8
mybatis-plus:
  typeAliasesPackage: com.whyc.pojo,com.whyc.dto
  mapper-locations: classpath:mapper/**/*Mapper.xml
@@ -68,22 +62,6 @@
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
custom:
  #人脸
  face:
    threshold: 0.8
    appId4Win: AafPX5afzycEnTqH3v79gY3VozNVTSNqT8kzSmP7b48q
    sdkKey4Win: GsYwWhxzuQEE1WE34J3Fo8d2QppjkqYGojyc4625JhKb
    appId4Linux: AafPX5afzycEnTqH3v79gY3VozNVTSNqT8kzSmP7b48q
    sdkKey4Linux: GsYwWhxzuQEE1WE34J3Fo8d2GiFdddqH81ghetQQTGmv
  #告警短信
  message:
    switch: OFF
    secret_id: AKIDaz80bw0oLbbLo0vay5vVoqb5IEtIQItD
    secret_key: 4sPeeNp0tWsVrxmLdfQu73i6D2btufAO
    region: ap-nanjing
    smsSdkAppId: 1400565791
    signName: 武汉源畅科技有限公司
    templateId: 1095970
  #告警工单
  alarm:
    task.switch: off
@@ -92,19 +70,18 @@
  rsa:
    #publicKey: ENC(ZCCRYK0TIFYCrdHZprQS0I8hWFD1uXKIRYcfwDkh3V87FjFePAWlWIzi6tJFcswo525c+m5UGmkt+eq/wCIIabjbcbt6l+18hz6ogtGXHTalaEATqjbrjWmbdzc92A6dYmoNI5Rdpi+jqBKciXZhDKWDNPY2M3/WyejcPGDOeo9CWOvR1hdmLX8iTlcuPRS6k7YzybGZwP9cOHfcAyt6QN+GSuNRzapo5pUmQdT7aUwF3P73qcoxHpRO1li6kYF9KVOMgVix8a3h6TyFMMuJdPGboRV8DL9wLK3bnJT6s0Ei35niYv4ePJ7IzHiEa4J1x0wo8pNU0CfdhylySWLsnxgFjzbhMWjmoQhwQjjnTj+DgyvRrZqaE3R0cLpSwxT4x2ceHzKm1KUzF7OhGgnmc3lPN3H8UyVHy+l3GyejGpRnqFtABHqIlbM2nbsTA8lT/sAeN/AVlBORNgd5Rai7upWk43pvd2qG9ykSW+t/++ZiKBXfAZOBgrcWhPseEG94e3bHhM62nwcgHZ5HzFCZ8PEwXn0053vbxdM6LxVIqCAIzrWoOgBWoaRRBqfSUTvJf2tdc5m9NncXRmYEzZOg3f1wOvVGDJeyKC3OuyhlJnD2VWYVwNsorDkI+dT9mPAMMTZaPeqwPGxtkjaaFSgB5RDHcBfeEIMNdAVOqMCA9qOLFX+zr9mHvjV1kpiDKb5JZFhLHlXObROUtqMndTQDRCATBjutLB4QS0/0BCOvSLnDTA39e/nVKBwTHPqnlz4N)
    #privateKey: ENC(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)
    publicKey: ENC(QR8EpIC0jzG2E29Dhtq/vqrwt99WtUix/h2J8OvD90w0fosfUM1EFpdHJ2nsdP84BOeVNoPmudqXCYWVeCuTrVkqfb2z8mMLDl8cry78P8Tu4il3m9hGxqjdeNJbdYA6z6eRaInoJj5BHUyNpAJDaNacMZoOUJU6lMySwujyrD8PfSY97St0XPL5GIFP9rP1FCnlVWBeH4tqZKZ6MGncYJaITUZ/BIPkhpDYxi+i4CnMIBqytCJ6OJCzjLBI44UsQOzsdLgppAE2O0fmgyXA6bh0VRdIaRhqDIrjur2e4sOEvjadORN0Kg==)
    privateKey: ENC(fDshYRxHSlpJ2v+CmDGzH/PlFIKr9+hcPg0patE+nOFMKQaEVNLj9XxOlGEDFabSLFvy1imSRmOF08EE/z9cmlsp+hfbF6feR6YABRHgDxOGWusZ9QKYLhv6vDD6pebKb2W3FCuIHnLicMiJfzpM5KGylTMv7rvtM7tFR8ZhDzn3s8uYotz6ORcfCPdgOcUcNHXT0WS2KA0NigsRH5YMF5IOCP2jNTaOFDDXYacjfGOwjFIGE71BMJCnMRp6RnukbAY1ZN3J88GpYRzYCYD/S9DbGFVY9giH0T7FZs5cgPsCoDZ1dIeJhmjbOxoQpwKoDZzvlYbsstMH+6wApaWgx9TJfBoNjEJdqM1S3asukV4bUq4cZnmryCeSWSYkR2FDuH792rXL3Msh2Jc2hB2Cg9ZPB5hljN5GWV0fYiKNjJW2ovgBZZRWURorkrfBReKsxuLcHlbBcdHBF9DZDJyy40fg9GP6w40uG3hBKd/OlA9IYWNWEgqgeMkNmesG9RTc4X7EG2Ar4MEDa1p6o3unIve/zTCpLoFzKCRIjYcqlW1pZfSwZD4wu6JJf+5tUoXaEEf5YD4dcWCD4DzUcv4qhOpHXDBtM3E45VdacMWZNdE7fXcDzWpgYdUSQ88HsXRjmaW0O/x5irdN5KGa89yj5bDYQeMzR7Cervxml3MUZSrkHVKsa9yWverlLaRXzTue3+MXgDudm1stHju5p2x55GWG9ZfcErDoTNqhgPwcbJnW7/vXFpoTt6AF3t8vbD7f5G+FXnvYLDUWtdNS8KN6X+EOkh4GWootC+QMEKArDr8AyL+5D2TkBGIDMAag/LVwAKSwvBs2+e/xsSlw+AuAsWcfb9whJCZNVogpA1jE56SIdIBtw4G4Lw9LMlJ2MprkV6e2VAtBwpou3fd5pUsKpu51WBfISRy60vls7Fu0mQXrT7cCzThptrk9KgIhjMtiI2jf6YpultF1+Hg5+IK863wKpiNmJbxmA+AOc171LVmNlqiSdDp2fptfIgaI5IMcLMJj8zvY2gghAGoRrchpSkteTLc48om87Duw1gR5lAZjUYzNON9wETte9bfUvQ6/ZkQE3rjEUY6TfyokKJf4X/0ZxKFz0YzkcHDXBaPefrIWxQGygeTsy0kZO7UKpYZo)
    publicKey: ENC(RFwEWQPojWyBu7BO0WwGEum/3YChVJuxg9i9W02gfSYi4V7Po56zRhFFGdIl60lTFxEA7JVgVZ+BTVVFAJcuaNECgVT0IbuzvGk/8GZslhVXciPqwonQmUxGbGQ9HP7wOl+pCkAB9vPa9qYnGrOb8Ie1c9Yz/ogGJzFBHPB5MFmkAKrt/QC55oBCFhj3+8JZYYDdy8HElZzjtp5BtPD60h0DVOLbw94PG8680VZNDv25yhtAZdsXYIpDpUuxAA+kvp0Zl0dXDRw6BHcPh0PP+q65pz56Fgy+8AXnPEP/o8jkaEs7WWFqqspHsi9joapK4rX47qyQX+2gLdjvI5gqcCucIC/lGl0uGusrWc7HbPGkVWewr7wKIv5hLGc2keMijLjGlqBr2PFBGtPeSk+BVxCIHK4kjKQ32bHP6OE4MtIjzg5G3M2fd04/KWDRqWkYq45oiJc2KBggyYCTUD4KkTVwL4OZxaqC7wQFmJbz2tzA2uvh0ejR3lA+lMSqjWarw7GuHK+L1on6ogzGOM5GHkuehkTvbQdCOOAxARg8YRiNd6tgnGwk7G+spLco3yqTbKcEy6Cr/oJ1ay4apiUgoyakA3/Lz0R+Z2zBKVzHp+kRN6R2Y4JzqmhHdbvLm2UrCkL4NA3NBQICbEiFlIccyUV+w48c3ENb+y+hLuzExI4baY4DF3CNYEwpIi8GEX5rwRlhxrr9FNpxkdx0Tkog+SLu4JMS9LDdiQZNimAxvdZqGpJxpoe6v7GVSs8TjEBy)
    privateKey: ENC(TaqleH2iZ43jXPkLOFNOUVAXucXxXjV4LH+B1X0mwZooChy5qd9MfEzlkxmeLHtEbzYXg7R24DtApqDRLzbEIbfCet25NcEZeCsWm6aNwu/dDvy1zT7xT/UAwlMDla1WdTc5QdHJLkmJBsfkCOEFgQL//RobdC4AaIjFILxjR7TGWmQJucQSEJxcb5VMOm6tm2hBbi2GQr0WREiBN+jqE50l+FKuSCsyqFwlGeaxpUhyBQZTircJbo103dKgcSN0GTZnxuRUi2Okhozbu+z231CAQFy0mvocBYipaCnzJSgzhsYgn+WxbcxRW+E67u67wsd89Xj7zpAt51UYg/e/fK8JwUWnZ63q441siDgVR3Pd+MBd8LnhS6OWAvSAN7G/Id8T3KzDW297khV7YYTbdHRdIFrqym3PkX2jJkPIWy+Py4LlLrqpaJ5GC58/TBpUgfM3OHpE2uTfDOibEIEboxKppZZk3CU5OHWP96qT4KFruB9bDBaTUn9KU1pIoX3IwczY1wMdMFskomBALCgUIYNjHWELqng92WYngefQGAppb7WZNHhPwjGrOYvko+CRNkY102Non5jEVlaeWM+TXQC2n2mvJnXyf9pk37hBROeRVrEUuRdD9aFSfeLiGDdDz9sFBeDKfzsbai3K5Z5cNsI7F32yKMIAHnF7CKw5P0O1tf9OJdgPL0W9VtR3WvhBftU8ZstOdIp7so1SCYzLTdbHsIk2+wgNtpmIWNNU1BQz3viBQbIQJVH5W6HN+d6UvS7zi/XU8CSRCo4PfyaE4z1yQWEcXsvKZgaFhhwoXQE35ssG/WYbL9bkg4yQQOAU3R3Fz/ttJrQrwJZkm4A10R0tyubikoPsPXFZjPerHJLEehMgKr27yzHJFypglQO3qxdSqZ/ypTmora8phpqHEuXDFitb5RETbiUJ44nTKRrWZ3FPCE9JmV+9ukPlb+R0A247dcXpNZ8bbNPWIgBzVD68TNw4WH3KCy2UNHoKU+4IX6sJDQtYUbkj9U8NwGjV55YAt9WFHQ/uBr/Z7RpJ0hkWwbyqqmorw28eHF/jZVU5a9dxvUPJDhhvDL3vgW1ZoRrHMjWcEPnDQI8QvYyd8QgTpVzERZAY2f0V9v3D5krv1pGSrxzeNOlOwne9eMsM27/mGhJusau4MHrv/BfWvk3OD4Durhf6Nxcro40+lgXn2QrVB7LCpeVorzFXO572nO3m2fvOFJgzmtzIB+N5M6433wySVIl5jxFWkLRJFqFrCNiuRLv+hsJt116EmxXk4G9+2AIZZ4WNI8pjM0+KLSNK442suJ1bxUTr+BoQbJKzrmvuf+/Kjqvf9MCnyGF1SegPGGFffqU+odxHHBxmRdIhqdCC34kAfHQiHIp3CwMv3Z48AcYsUlhMjan/HQ9WrBvoCEDvqPcZwZ6atBgjPQwkVrDnkaGpU3ejjGqgXBi59l4Q9Dz6WQlrOMT+qKJRmG+wjEzw9TV1AN7Pquyx+Wn3ocd5V7ft0wlNCvJ0fku2rhMiYMJwRH7wSFoNJ4OwqwryjVvxAdowP7NRqUPt/+SWFzCzf2pUx4BxrHpvCmUyQkgyot+qCN6QQTa15cdOrRK7+iSDtTQuL1VpPXFOBHFgCUA8dFxe1oElPEA2BXts+5e4HpDN8HoLr4kMqoxgU43PQh/3lC9cH+B6pEVmrzKnEMyYBvK6ReSAXOxvO0OXzlOtew6LoKD0CNyamLDw7zQRy3fv5W9wDfjyw5AaMqgtNOOCAY3VLT8cyvDxGqY9AiCkFz7DgvMVzp38gtAKVeT9hw+MHQZ4TuFMxZGfu50ptY8s3TH93dNpcC9r4OlANH+unioZYius60VGA+KAEwckDUnVuKiAkqus8x4PT0zQPSjM9IOg6uruz11DcQ+jMV7JB2A64pnPsBqKVyBTHco7Bp0Ufy8aUEApJ6wyIJUCH1N3ooYm+0sF2TOpvQhJ+2HoYRGj0rvKFV6oZBf/g/773MS1MiqJIw8fHkK448Zyc9Pj7N75xIEfK0bCwqicvJe8sL4GNBBrt/WbAloNszA5f6H4rFAWH4qprjFg4CMiAQPyhrLaGdk3Mv2oFjCa269k2UyVfTqD0s2egAeR1DyREzKZMrkkA/3XWEmI3bCUE0FY9AztREZHEkG9nZ/Dc6u/VToi2kYKI09Z4NubILfIklncaKN3cQlJ3wf2Jz+5AB9OD+b6SJcbkRSkHoWgxYPH2DrNeAq9kPe25H5dr+Hm8ewDWPcPYWjj2yjUi6oryVawgwFL3WUcmvsKXYGwKP+Uig8pBjnd1r4ncU9Hvp2kP0tcO8x4hoqlU30gPaRDB7de0IHW8R79oWtV1NlxwS4Wm+WVATGUs/YPTlQbbBosgDPHxdnj14t/vvNuqZnTG9ZrV+LJ6sVdm5Zsyw5rOq0ndyBb9Ms2rS2cwtE4UYeqTgyNvg3NCtkOEy6sYNCVocbtcASBLGMda9BZ8PWqJKu3sGMO191tss0ES1yAjYUWXtHRx9OwsZEd8m3cszmOqMFeo11+/jtz7COCe7giAL26+FlPVtgsvlV3HOJHGcfVP1FdnQ0PXJU6W79H203VkfvzqbSLVQnaKJi7JVsSKILFBfcbAmwP8VXobXBoLgxjo2m3wsoNQ0FpM76jQh41fZyC6NFSzEU4TRmL/kblPfYMwUeJqpT6FGEcPaZmL5w/7OIB4lhCr0B/LnUDvBgtnyKxo3wx1faBaWdIVsVv7pAd/r/c+K8/UrJ6WzrhRy2UKTNq1zpDyJXl3sZKfN9uCO/PJqLsIrWctMtuCESADfQRVUuZgmQOv6j3Y6Osi5UW8flXwO7sHsGyiDsC8fmJekEHi31n/hd3ZHMsp4maZwzj4UAKRe5WdK0UZXqfjELrW6cK3UZeuo1pY48fXbulWVJffhXyQUSiRl1PZnhBAqGmxXu0+6D7zpaA9CP60PTuB8cO6Gihu524tQ7IoHFdliurzSuG4Anll6CReBn2+CdpP7T/uIeZJ205DZtnRevliIGOSSf+rlM7G5n6DEuEGWwMw2Tdhd/GfHUa0vwrXyRFuRFpipPfoaD6LIH2+y0kylVeBD4UGAFleADnK/0F3fNxsEKXMu1ve7kITkGT1LnXkuWLa+MuWeoWw8n83NVQmJ9JhO6pM0ZBUp9HJUZS9SsuEehVvNBBGexnDe1AgkINlIwNN+7r5pxewATKIFV5RDAQqQQ=)
#Config文件读取 涉及License和FGCDFileDownload
configFile:
  type: 1 #1:本地测试;2:打包jar
#FTP本分数据
ftpInforMation:
  ftpIp: 192.168.10.79
  ftpPort: 21
  ftpUserName: lxw
  ftpPassword: luxingwei+810412026
minio:
  endpoint: http://127.0.0.1:9002
  accessKey: minioadmin
  secretKey: minioadmin
  bucketName: test