From 6813da9701ce0e797a10041bc2ff870d2086c68f Mon Sep 17 00:00:00 2001
From: 谢茂盛 <A807732>
Date: Thu, 14 Dec 2023 11:05:41 +0800
Subject: [PATCH] feat: 问题修复项 1、业务员查询列表修复

---
 src/main/java/com/order/erp/common/utils/DbUtil.java |  81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/order/erp/job/DbBackUpJob.java     |  55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/resources/application-local.yml             |  10 ++++++++++
 src/main/resources/application-prod.yml              | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
 src/main/resources/application-test.yml              | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
 src/main/resources/application.yml                   |   2 +-
 6 files changed, 341 insertions(+), 20 deletions(-)
 create mode 100644 src/main/java/com/order/erp/common/utils/DbUtil.java
 create mode 100644 src/main/java/com/order/erp/job/DbBackUpJob.java

diff --git a/src/main/java/com/order/erp/common/utils/DbUtil.java b/src/main/java/com/order/erp/common/utils/DbUtil.java
new file mode 100644
index 0000000..7a8e63e
--- /dev/null
+++ b/src/main/java/com/order/erp/common/utils/DbUtil.java
@@ -0,0 +1,81 @@
+package com.order.erp.common.utils;
+
+import com.order.erp.config.AliOssConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.io.*;
+import java.time.LocalDateTime;
+
+/**
+ * @author: xms
+ * @description: TODO
+ * @date: 2023/12/13 16:04
+ * @version: 1.0
+ */
+
+@Slf4j
+@Service
+public class DbUtil {
+
+    /**
+     * 备份数据库
+     *
+     * @param ip
+     * @param port
+     * @param username
+     * @param password
+     * @param databaseName
+     * @param savePath
+     * @param fileName
+     */
+    public void exportDatabaseTool(String ip, String port, String username, String password, String databaseName, String savePath, String fileName) {
+        PrintWriter printWriter = null;
+        BufferedReader bufferedReader = null;
+        try {
+            String cmd1 = "/bin/sh";
+            String cmd2 = "-c";
+            String os_name = System.getProperty("os.name");
+            // 判断是否是windows系统
+            if (os_name.toLowerCase().startsWith("win")) {
+                cmd1 = "cmd";
+                cmd2 = "/c";
+            }
+            File saveFile = new File(savePath);
+            if (!saveFile.exists()) {
+                // 目录不存在创建新的文件夹
+                saveFile.mkdirs();
+            }
+            if (!savePath.endsWith(File.separator)) {
+                savePath = savePath + File.separator;
+            }
+            printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf-8"));
+            String stmt2 = "mysqldump -h" + ip + " -p" + port + " -u" + username + " -p" + password + " --default-character-set=utf8 " + databaseName;
+            String[] cmd = {cmd1, cmd2, stmt2};
+            Process process = Runtime.getRuntime().exec(cmd);
+            InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
+            bufferedReader = new BufferedReader(inputStreamReader);
+            String line;
+            while ((line = bufferedReader.readLine()) != null) {
+                printWriter.println(line);
+            }
+            printWriter.flush();
+            AliOssUtil.upload(AliOssConfig.ALIYUN_BUCKET, fileName, FileUtil.imageParseBytes(process.getInputStream()));
+            log.info("已备份数据库,日期:{}", DateUtils.format(LocalDateTime.now(), DateUtils.DATE_TIME));
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("备份数据库失败,日期:{},e:{}", DateUtils.format(LocalDateTime.now(), DateUtils.DATE_TIME), e.toString());
+        } finally {
+            try {
+                if (bufferedReader != null) {
+                    bufferedReader.close();
+                }
+                if (printWriter != null) {
+                    printWriter.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/order/erp/job/DbBackUpJob.java b/src/main/java/com/order/erp/job/DbBackUpJob.java
new file mode 100644
index 0000000..a5f9227
--- /dev/null
+++ b/src/main/java/com/order/erp/job/DbBackUpJob.java
@@ -0,0 +1,55 @@
+package com.order.erp.job;
+
+import com.order.erp.common.utils.DateUtils;
+import com.order.erp.common.utils.DbUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+
+/**
+ * @author: xms
+ * @description: TODO
+ * @date: 2023/6/25 10:35
+ * @version: 1.0
+ */
+@Slf4j
+@Component
+public class DbBackUpJob {
+
+    @Value("${db.mysql.ip}")
+    private String ip;
+
+    @Value("${db.mysql.port}")
+    private String port;
+
+    @Value("${db.mysql.user}")
+    private String user;
+
+    @Value("${db.mysql.password}")
+    private String password;
+
+    @Value("${db.mysql.savePath}")
+    private String savePath;
+
+    @Value("${db.mysql.databaseName}")
+    private String databaseName;
+
+    @Resource
+    private DbUtil dbUtil;
+
+    /**
+     * 每隔30分执行一次
+     */
+//    @Scheduled(cron = "0 */30 * * * ?")
+    @Scheduled(cron = "0 */1 * * * ?")
+    public void backup() {
+        log.info("定时任务-开始备份db-时间:{}", DateUtils.format(LocalDateTime.now(), DateUtils.DATE_TIME));
+        String fileName = "db-backup-file";
+        dbUtil.exportDatabaseTool(ip, port, user, password, databaseName, savePath, fileName);
+        log.info("定时任务-完成备份db-时间:{}", DateUtils.format(LocalDateTime.now(), DateUtils.DATE_TIME));
+    }
+}
diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml
index 049f059..2dbd6a1 100644
--- a/src/main/resources/application-local.yml
+++ b/src/main/resources/application-local.yml
@@ -174,3 +174,13 @@ oss:
   accessKeyId: LTAIZCPI7OaWud0m
   accessKeySecret: nvtGeScBwRztGeoj8WSp5OWalalgpK
   bucket: order-erp
+
+
+db:
+  mysql:
+    ip: 39.108.227.113
+    port: 3307
+    user: root
+    password: 123456
+    databaseName: order-erp
+    savePath: /home/canrd/order-erp/files/backup/
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 84f33a8..e1c30ea 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -4,7 +4,7 @@ mybatis-plus:
     call-setters-on-nulls: true
     jdbc-type-for-null: 'null'
     map-underscore-to-camel-case: true
-    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
   global-config:
     db-config:
       capital-mode: false
@@ -14,7 +14,7 @@ mybatis-plus:
       logic-delete-value: 20
       logic-not-delete-value: 10
   mapper-locations: classpath:/mapper/**.xml
-  type-aliases-package: com.canrd.shop.**.dto
+  type-aliases-package: com.order.erp.**.dto
 #spring:
 #  datasource:
 #    dynamic:
@@ -59,11 +59,11 @@ spring:
     testOnReturn: true
     password: 123456
     time-between-eviction-runs-millis: 1000
-    url: jdbc:mysql://159.75.211.11:3306/canrd?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true&useAffectedRows=true&autoReconnectForPools=true
+    url: jdbc:mysql://172.17.0.1:3306/order-erp?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true&useAffectedRows=true&autoReconnectForPools=true
     username: root
   redis:
-    database: 3
-    host: 159.75.211.11
+    database: 0
+    host: 172.17.0.1
     lettuce:
       pool:
         max-active: 2000
@@ -74,11 +74,52 @@ spring:
     password: ''
     port: 6379
     timeout: 2000
+  mail:
+    # 配置 SMTP 服务器地址
+    host: xxx
+    # 发送者邮箱,已开通POP3/SMTP服务的邮箱,也就是你自己的
+    username: xxxx
+    # 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
+    password: xxx
+    # 邮件接收者
+    mailRecipient: #邮件接收者邮箱
+    # 端口号465或587(QQ邮箱发送邮件仅支持587端口协议)
+    port: 587
+    # 默认的邮件编码为UTF-8
+    default-encoding: UTF-8
+    # 配置SSL 加密工厂
+    properties:
+      mail:
+        smtp:
+          socketFactoryClass: javax.net.ssl.SSLSocketFactory
+        #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
+        debug: true
+
+  freemarker:
+    template-loader-path: classpath:/template/
+    suffix: .flt
+    enabled: true
+    cache: false
+    charset: UTF-8
+    content-type: text/html
+    allow-request-override: false
+    check-template-location: true
+    expose-request-attributes: false
+    expose-session-attributes: false
+    expose-spring-macro-helpers: false
 
 
 logging:
   config: classpath:log4j2-prod.xml
 
+#登录图形验证码有效时间/分钟
+loginCode:
+  expiration: 2
+
+#密码加密传输,前端公钥加密,后端私钥解密
+rsa:
+  private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
+
 
 #jwt
 jwt:
@@ -88,8 +129,58 @@ jwt:
   # 必须使用最少88位的Base64对该令牌进行编码
   base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI=
   # 令牌过期时间 此处单位/毫秒 ,默认2小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
-  token-validity-in-seconds: 7200000
+  token-validity-in-seconds: 720000000
   # 在线用户key
   online-key: online-token
   # 验证码
-  code-key: code-key
\ No newline at end of file
+  code-key: code-key
+
+outsys:
+  sms:
+    regionId: cn-hangzhou
+    accessKeyId: LTAIZCPI7OaWud0m
+    secret: nvtGeScBwRztGeoj8WSp5OWalalgpK
+    domain: dysmsapi.aliyuncs.com
+    version: 2017-05-25
+    action: SendSms
+    signName: canrd
+    templateCode: SMS_173005236
+  email:
+    host: xxxx
+    passwordRecoverKey: xxxxx
+
+
+
+system:
+  isLoginFailureLock: true
+  loginFailureLockTime: 5
+  loginFailureLockCount: 3
+
+openai:
+  token: Bearer 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
+
+# 文件存储路径
+file:
+  path: /home/canrd/order-erp/files/
+  host: http://47.104.8.35
+  avatar: /home/order-erp/avatar/
+  # 文件大小 /M
+  maxSize: 100
+  avatarMaxSize: 5
+
+# 阿里pss图片服务
+oss:
+  endpoint: https://oss-cn-qingdao.aliyuncs.com
+  accessKeyId: LTAI5t7u1gXR2vm82sd6CkVz
+  accessKeySecret: m4NzHZZsZiauKmRO8y7DihmcGNdQk4
+  bucket: alterego
+
+
+db:
+  mysql:
+    ip: 172.17.0.1
+    port: 3306
+    user: root
+    password: 123456
+    databaseName: order-erp
+    savePath: /home/canrd/order-erp/files/backup/
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index ccd5f03..2dbd6a1 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -4,7 +4,7 @@ mybatis-plus:
     call-setters-on-nulls: true
     jdbc-type-for-null: 'null'
     map-underscore-to-camel-case: true
-    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
   global-config:
     db-config:
       capital-mode: false
@@ -14,7 +14,7 @@ mybatis-plus:
       logic-delete-value: 20
       logic-not-delete-value: 10
   mapper-locations: classpath:/mapper/**.xml
-  type-aliases-package: com.canrd.shop.**.dto
+  type-aliases-package: com.order.erp.**.dto
 #spring:
 #  datasource:
 #    dynamic:
@@ -59,11 +59,11 @@ spring:
     testOnReturn: true
     password: 123456
     time-between-eviction-runs-millis: 1000
-    url: jdbc:mysql://159.75.211.11:3306/canrd?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true&useAffectedRows=true&autoReconnectForPools=true
+    url: jdbc:mysql://39.108.227.113:3307/order-erp?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true&useAffectedRows=true&autoReconnectForPools=true
     username: root
   redis:
-    database: 3
-    host: 159.75.211.11
+    database: 0
+    host: 39.108.227.113
     lettuce:
       pool:
         max-active: 2000
@@ -74,17 +74,51 @@ spring:
     password: ''
     port: 6379
     timeout: 2000
+  mail:
+    # 配置 SMTP 服务器地址
+    host: smtp.mxhichina.com
+    # 发送者邮箱,已开通POP3/SMTP服务的邮箱,也就是你自己的
+    username: system@canrd.com
+    # 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
+    password: Kelude2015
+    # 邮件接收者
+    mailRecipient: #邮件接收者邮箱
+    # 端口号465或587(QQ邮箱发送邮件仅支持587端口协议)
+    port: 587
+    # 默认的邮件编码为UTF-8
+    default-encoding: UTF-8
+    # 配置SSL 加密工厂
+    properties:
+      mail:
+        smtp:
+          socketFactoryClass: javax.net.ssl.SSLSocketFactory
+        #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
+        debug: true
+
+  freemarker:
+    template-loader-path: classpath:/template/
+    suffix: .flt
+    enabled: true
+    cache: false
+    charset: UTF-8
+    content-type: text/html
+    allow-request-override: false
+    check-template-location: true
+    expose-request-attributes: false
+    expose-session-attributes: false
+    expose-spring-macro-helpers: false
 
 
 logging:
   config: classpath:log4j2-dev.xml
 
-#spring security相关配置
-#security:
-#  token:
-#    header: Authorization
-#    expireTime: 30
-#  permitAllUrls: /api/overtime/account/login,/api/overtime/account/logout,/api/overtime/sms/send_auth_code,/api/overtime/account/reset_password,/admin/shop/test/add,/admin/shop/test/demo
+#登录图形验证码有效时间/分钟
+loginCode:
+  expiration: 2
+
+#密码加密传输,前端公钥加密,后端私钥解密
+rsa:
+  private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
 
 
 #jwt
@@ -95,8 +129,58 @@ jwt:
   # 必须使用最少88位的Base64对该令牌进行编码
   base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI=
   # 令牌过期时间 此处单位/毫秒 ,默认2小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
-  token-validity-in-seconds: 7200000
+  token-validity-in-seconds: 720000000
   # 在线用户key
   online-key: online-token
   # 验证码
   code-key: code-key
+
+outsys:
+  sms:
+    regionId: cn-hangzhou
+    accessKeyId: LTAIZCPI7OaWud0m
+    secret: nvtGeScBwRztGeoj8WSp5OWalalgpK
+    domain: dysmsapi.aliyuncs.com
+    version: 2017-05-25
+    action: SendSms
+    signName: canrd
+    templateCode: SMS_173005236
+  email:
+    host: http://core.canrd.com
+    passwordRecoverKey: http://www.canrd.com/canrd/shop/member/passwordModify
+
+
+
+system:
+  isLoginFailureLock: true
+  loginFailureLockTime: 5
+  loginFailureLockCount: 3
+
+openai:
+  token: Bearer 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
+
+# 文件存储路径
+file:
+  path: /home/canrd/order-erp/files/
+  host: http://39.108.227.113
+  avatar: /home/order-erp/avatar/
+  # 文件大小 /M
+  maxSize: 100
+  avatarMaxSize: 5
+
+# 阿里pss图片服务
+oss:
+  endpoint: https://oss-cn-qingdao.aliyuncs.com
+  accessKeyId: LTAIZCPI7OaWud0m
+  accessKeySecret: nvtGeScBwRztGeoj8WSp5OWalalgpK
+  bucket: order-erp
+
+
+db:
+  mysql:
+    ip: 39.108.227.113
+    port: 3307
+    user: root
+    password: 123456
+    databaseName: order-erp
+    savePath: /home/canrd/order-erp/files/backup/
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 6f456d8..28e9640 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -3,4 +3,4 @@ server:
 
 spring:
   profiles:
-    active: local
\ No newline at end of file
+    active: prod
\ No newline at end of file
--
libgit2 0.23.3