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