From 84eb072be2855cbb8bd35a775f2cdf22adc1abe4 Mon Sep 17 00:00:00 2001
From: lwj <3529558005@qq.com>
Date: Fri, 26 Jul 2024 09:28:56 +0800
Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E8=80=837=5F26?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 38 +++++
.idea/$PROJECT_FILE$ | 11 ++
.idea/.gitignore | 8 +
.idea/encodings.xml | 10 ++
.idea/misc.xml | 20 +++
.idea/qaplug_profiles.xml | 12 ++
bwie-common/pom.xml | 122 ++++++++++++++
.../com/bwie/common/config/RedisConfig.java | 40 +++++
.../com/bwie/common/constants/Constants.java | 18 +++
.../bwie/common/constants/JwtConstants.java | 29 ++++
.../common/constants/RabbitMQConstants.java | 5 +
.../bwie/common/constants/TokenConstants.java | 24 +++
.../java/com/bwie/common/domain/Bill.java | 10 ++
.../common/domain/response/JwtResponse.java | 9 ++
.../com/bwie/common/result/PageResult.java | 34 ++++
.../java/com/bwie/common/result/Result.java | 76 +++++++++
.../java/com/bwie/common/utils/FastUtil.java | 50 ++++++
.../com/bwie/common/utils/GenCodeUtils.java | 86 ++++++++++
.../java/com/bwie/common/utils/JwtUtils.java | 115 +++++++++++++
.../java/com/bwie/common/utils/OssUtil.java | 153 ++++++++++++++++++
.../com/bwie/common/utils/StringUtils.java | 67 ++++++++
.../com/bwie/common/utils/TelSmsUtils.java | 92 +++++++++++
bwie-moudles/pom.xml | 58 +++++++
.../main/java/com/bwie/BillApplication.java | 13 ++
.../com/bwie/controller/BillController.java | 28 ++++
.../main/java/com/bwie/mapper/BillMapper.java | 12 ++
.../java/com/bwie/service/BillService.java | 13 ++
.../bwie/service/impl/BillServiceImpl.java | 25 +++
bwie-moudles/src/main/resources/bootstrap.yml | 45 ++++++
.../src/main/resources/mapper/BillMapper.xml | 15 ++
img.png | Bin 0 -> 403001 bytes
pom.xml | 67 ++++++++
32 files changed, 1305 insertions(+)
create mode 100644 .gitignore
create mode 100644 .idea/$PROJECT_FILE$
create mode 100644 .idea/.gitignore
create mode 100644 .idea/encodings.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/qaplug_profiles.xml
create mode 100644 bwie-common/pom.xml
create mode 100644 bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/Constants.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/RabbitMQConstants.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/Bill.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/result/PageResult.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/result/Result.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/GenCodeUtils.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java
create mode 100644 bwie-moudles/pom.xml
create mode 100644 bwie-moudles/src/main/java/com/bwie/BillApplication.java
create mode 100644 bwie-moudles/src/main/java/com/bwie/controller/BillController.java
create mode 100644 bwie-moudles/src/main/java/com/bwie/mapper/BillMapper.java
create mode 100644 bwie-moudles/src/main/java/com/bwie/service/BillService.java
create mode 100644 bwie-moudles/src/main/java/com/bwie/service/impl/BillServiceImpl.java
create mode 100644 bwie-moudles/src/main/resources/bootstrap.yml
create mode 100644 bwie-moudles/src/main/resources/mapper/BillMapper.xml
create mode 100644 img.png
create mode 100644 pom.xml
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/.idea/$PROJECT_FILE$ b/.idea/$PROJECT_FILE$
new file mode 100644
index 0000000..58b7e3e
--- /dev/null
+++ b/.idea/$PROJECT_FILE$
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..35410ca
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..dbd1752
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..60003b0
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/qaplug_profiles.xml b/.idea/qaplug_profiles.xml
new file mode 100644
index 0000000..9a7566c
--- /dev/null
+++ b/.idea/qaplug_profiles.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bwie-common/pom.xml b/bwie-common/pom.xml
new file mode 100644
index 0000000..0a7a690
--- /dev/null
+++ b/bwie-common/pom.xml
@@ -0,0 +1,122 @@
+
+
+ 4.0.0
+
+ com.bwie
+ rikao7_26_26
+ 1.0-SNAPSHOT
+
+
+ bwie-common
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bootstrap
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.80
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+ org.apache.commons
+ commons-lang3
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+ cn.hutool
+ hutool-all
+ 5.8.3
+
+
+
+ com.aliyun
+ dysmsapi20170525
+ 2.0.1
+
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.12.0
+
+
+
+
+
+
+ com.github.tobato
+ fastdfs-client
+ 1.26.5
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+
+
diff --git a/bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java b/bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java
new file mode 100644
index 0000000..b62e4b1
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java
@@ -0,0 +1,40 @@
+package com.bwie.common.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+
+ @Bean
+ public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
+ RedisTemplate template = new RedisTemplate<>();
+ template.setConnectionFactory(factory);
+ Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new
+ Jackson2JsonRedisSerializer(Object.class);
+ ObjectMapper om = new ObjectMapper();
+ om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+ om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+ jackson2JsonRedisSerializer.setObjectMapper(om);
+
+ StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+ // key采用String的序列化方式
+ template.setKeySerializer(stringRedisSerializer);
+ // hash的key也采用String的序列化方式
+ template.setHashKeySerializer(stringRedisSerializer);
+ // value序列化方式采用jackson
+ template.setValueSerializer(jackson2JsonRedisSerializer);
+ // hash的value序列化方式采用jackson
+ template.setHashValueSerializer(jackson2JsonRedisSerializer);
+ template.afterPropertiesSet();
+
+ return template;
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/constants/Constants.java b/bwie-common/src/main/java/com/bwie/common/constants/Constants.java
new file mode 100644
index 0000000..2fdc9fe
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/constants/Constants.java
@@ -0,0 +1,18 @@
+package com.bwie.common.constants;
+
+/**
+ * @description: 系统常量
+ * @author DongZl
+ */
+public class Constants {
+ /**
+ * 成功标记
+ */
+ public static final Integer SUCCESS = 200;
+ public static final String SUCCESS_MSG = "操作成功";
+ /**
+ * 失败标记
+ */
+ public static final Integer ERROR = 500;
+ public static final String ERROR_MSG = "操作异常";
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java
new file mode 100644
index 0000000..03692c1
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java
@@ -0,0 +1,29 @@
+package com.bwie.common.constants;
+
+/**
+ * @author DongZl
+ * @description: Jwt常量
+ */
+public class JwtConstants {
+
+ /**
+ * 用户ID字段
+ */
+ public static final String DETAILS_USER_ID = "user_id";
+
+ /**
+ * 用户名字段
+ */
+ public static final String DETAILS_USERNAME = "username";
+
+ /**
+ * 用户标识
+ */
+ public static final String USER_KEY = "user_key";
+
+ /**
+ * 令牌秘钥
+ */
+ public final static String SECRET = "abcdefghijklmnopqrstuvwxyz";
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQConstants.java
new file mode 100644
index 0000000..1f09187
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQConstants.java
@@ -0,0 +1,5 @@
+package com.bwie.common.constants;
+
+public class RabbitMQConstants {
+ public static final String SEND_SMS_QUEUE = "send_sms_queue";
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java
new file mode 100644
index 0000000..1871fb7
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java
@@ -0,0 +1,24 @@
+package com.bwie.common.constants;
+
+/**
+ * @author DongZl
+ * @description: 令牌常量
+ */
+public class TokenConstants {
+ /**
+ * 缓存有效期,默认720(分钟)
+ */
+ public final static long EXPIRATION = 720;
+ /**
+ * 缓存刷新时间,默认120(分钟)
+ */
+ public final static long REFRESH_TIME = 120;
+ /**
+ * 权限缓存前缀
+ */
+ public final static String LOGIN_TOKEN_KEY = "login_tokens:";
+ /**
+ * token标识
+ */
+ public static final String TOKEN = "token";
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Bill.java b/bwie-common/src/main/java/com/bwie/common/domain/Bill.java
new file mode 100644
index 0000000..7cf1668
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/Bill.java
@@ -0,0 +1,10 @@
+package com.bwie.common.domain;
+
+import lombok.Data;
+
+@Data
+public class Bill {
+ private Integer billId;
+ private String billDate;
+ private String billMonery;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java b/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java
new file mode 100644
index 0000000..5d888b2
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java
@@ -0,0 +1,9 @@
+package com.bwie.common.domain.response;
+
+import lombok.Data;
+
+@Data
+public class JwtResponse {
+ private String token;
+ private String existTime;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/result/PageResult.java b/bwie-common/src/main/java/com/bwie/common/result/PageResult.java
new file mode 100644
index 0000000..85ecdda
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/result/PageResult.java
@@ -0,0 +1,34 @@
+package com.bwie.common.result;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author DongZl
+ * @description: 列表返回结果集
+ */
+@Data
+public class PageResult implements Serializable {
+ /**
+ * 总条数
+ */
+ private long total;
+ /**
+ * 结果集合
+ */
+ private List list;
+ public PageResult() {
+ }
+ public PageResult(long total, List list) {
+ this.total = total;
+ this.list = list;
+ }
+ public static PageResult toPageResult(long total, List list){
+ return new PageResult(total , list);
+ }
+ public static Result> toResult(long total, List list){
+ return Result.success(PageResult.toPageResult(total,list));
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/result/Result.java b/bwie-common/src/main/java/com/bwie/common/result/Result.java
new file mode 100644
index 0000000..30b1e73
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/result/Result.java
@@ -0,0 +1,76 @@
+package com.bwie.common.result;
+
+import com.bwie.common.constants.Constants;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author DongZl
+ * @description: 响应信息主体
+ */
+@Data
+public class Result implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+ /**
+ * 成功
+ */
+ public static final int SUCCESS = Constants.SUCCESS;
+ /**
+ * 失败
+ */
+ public static final int FAIL = Constants.ERROR;
+ /**
+ * 返回状态码
+ */
+ private int code;
+ /**
+ * 响应信息
+ */
+ private String msg;
+ /**
+ * 响应数据
+ */
+ private T data;
+
+ public static Result success() {
+ return restResult(null, SUCCESS, Constants.SUCCESS_MSG);
+ }
+
+ public static Result success(T data) {
+ return restResult(data, SUCCESS, Constants.SUCCESS_MSG);
+ }
+
+ public static Result success(T data, String msg) {
+ return restResult(data, SUCCESS, msg);
+ }
+
+ public static Result error() {
+ return restResult(null, FAIL, Constants.ERROR_MSG);
+ }
+
+ public static Result error(String msg) {
+ return restResult(null, FAIL, msg);
+ }
+
+ public static Result error(T data) {
+ return restResult(data, FAIL, Constants.ERROR_MSG);
+ }
+
+ public static Result error(T data, String msg) {
+ return restResult(data, FAIL, msg);
+ }
+
+ public static Result error(int code, String msg) {
+ return restResult(null, code, msg);
+ }
+
+ private static Result restResult(T data, int code, String msg) {
+ Result apiResult = new Result<>();
+ apiResult.setCode(code);
+ apiResult.setData(data);
+ apiResult.setMsg(msg);
+ return apiResult;
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java b/bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java
new file mode 100644
index 0000000..6d92a56
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java
@@ -0,0 +1,50 @@
+package com.bwie.common.utils;
+
+import org.springframework.stereotype.Component;
+import com.github.tobato.fastdfs.domain.fdfs.StorePath;
+import com.github.tobato.fastdfs.service.FastFileStorageClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+
+@Component
+public class FastUtil {
+ private static final Logger log = LoggerFactory.getLogger(FastUtil.class);
+
+ @Resource
+ private FastFileStorageClient storageClient ;
+
+ /**
+ * 上传文件
+ */
+ public String upload(MultipartFile multipartFile) throws Exception{
+ String originalFilename = multipartFile.getOriginalFilename().
+ substring(multipartFile.getOriginalFilename().
+ lastIndexOf(".") + 1);
+ StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
+ multipartFile.getInputStream(),
+ multipartFile.getSize(),originalFilename , null);
+ return storePath.getFullPath();
+ }
+ /**
+ * 删除文件
+ */
+ public String deleteFile(String fileUrl) {
+ if (StringUtils.isEmpty(fileUrl)) {
+ log.info("fileUrl == >>文件路径为空...");
+ return "文件路径不能为空";
+ }
+ try {
+ StorePath storePath = StorePath.parseFromUrl(fileUrl);
+ storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ return "删除成功";
+ }
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/GenCodeUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/GenCodeUtils.java
new file mode 100644
index 0000000..2ae9ff9
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/GenCodeUtils.java
@@ -0,0 +1,86 @@
+package com.bwie.common.utils;
+
+import java.util.Random;
+
+/**
+ * @description: 生成验证码工具类
+ * @Date 2023-5-11 上午 10:09
+ */
+public class GenCodeUtils {
+
+ /**
+ * 数字类型
+ */
+ private static final String NUMBER_STR = "0123456789";
+ /**
+ * 字母类型
+ */
+ private static final String LETTERS_STR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ /**
+ * 短信验证码长度
+ */
+ private static final Integer SMS_CODE_LENGTH = 4;
+
+ /**
+ * 生成短信四位验证码
+ * @return 验证码
+ */
+ public static String genLetterStrSms(){
+ return genCode(LETTERS_STR, SMS_CODE_LENGTH);
+ }
+
+ /**
+ * 生成短信四位验证码
+ * @return 验证码
+ */
+ public static String genNumberCodeSms(){
+ return genCode(NUMBER_STR, SMS_CODE_LENGTH);
+ }
+
+ /**
+ * 生成验证码
+ * @param codeLength 验证码长度
+ * @return 验证码
+ */
+ public static String genLetterStr(int codeLength){
+ return genCode(LETTERS_STR, codeLength);
+ }
+
+ /**
+ * 生成验证码
+ * @param codeLength 验证码长度
+ * @return 验证码
+ */
+ public static String genNumberCode( int codeLength){
+ return genCode(NUMBER_STR, codeLength);
+ }
+
+ /**
+ * 生成验证码
+ * @param str 验证码字符串
+ * @param codeLength 验证码长度
+ * @return 验证码
+ */
+ public static String genCode (String str, int codeLength){
+ //将字符串转换为一个新的字符数组。
+ char[] verificationCodeArray = str.toCharArray();
+ Random random = new Random();
+ //计数器
+ int count = 0;
+ StringBuilder stringBuilder = new StringBuilder();
+ do {
+ //随机生成一个随机数
+ int index = random.nextInt(verificationCodeArray.length);
+ char c = verificationCodeArray[index];
+ //限制四位不重复数字
+ if (stringBuilder.indexOf(String.valueOf(c)) == -1) {
+ stringBuilder.append(c);
+ //计数器加1
+ count++;
+ }
+ //当count等于4时结束,随机生成四位数的验证码
+ } while (count != codeLength);
+ return stringBuilder.toString();
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java
new file mode 100644
index 0000000..75f3c7b
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java
@@ -0,0 +1,115 @@
+package com.bwie.common.utils;
+
+import com.bwie.common.constants.JwtConstants;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import java.util.Map;
+
+/**
+ * @description: Jwt工具类
+ */
+public class JwtUtils {
+
+ /**
+ * 秘钥
+ */
+ public static String secret = JwtConstants.SECRET;
+
+ /**
+ * 从数据声明生成令牌
+ *
+ * @param claims 数据声明
+ * @return 令牌
+ */
+ public static String createToken(Map claims) {
+ String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();
+ return token;
+ }
+
+ /**
+ * 从令牌中获取数据声明
+ *
+ * @param token 令牌
+ * @return 数据声明
+ */
+ public static Claims parseToken(String token) {
+ return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
+ }
+
+ /**
+ * 根据令牌获取用户标识
+ *
+ * @param token 令牌
+ * @return 用户ID
+ */
+ public static String getUserKey(String token) {
+ Claims claims = parseToken(token);
+ return getValue(claims, JwtConstants.USER_KEY);
+ }
+
+ /**
+ * 根据令牌获取用户标识
+ *
+ * @param claims 身份信息
+ * @return 用户ID
+ */
+ public static String getUserKey(Claims claims) {
+ return getValue(claims, JwtConstants.USER_KEY);
+ }
+
+ /**
+ * 根据令牌获取用户ID
+ *
+ * @param token 令牌
+ * @return 用户ID
+ */
+ public static String getUserId(String token) {
+ Claims claims = parseToken(token);
+ return getValue(claims, JwtConstants.DETAILS_USER_ID);
+ }
+
+ /**
+ * 根据身份信息获取用户ID
+ *
+ * @param claims 身份信息
+ * @return 用户ID
+ */
+ public static String getUserId(Claims claims) {
+ return getValue(claims, JwtConstants.DETAILS_USER_ID);
+ }
+
+ /**
+ * 根据令牌获取用户名
+ *
+ * @param token 令牌
+ * @return 用户名
+ */
+ public static String getUserName(String token) {
+ Claims claims = parseToken(token);
+ return getValue(claims, JwtConstants.DETAILS_USERNAME);
+ }
+
+ /**
+ * 根据身份信息获取用户名
+ *
+ * @param claims 身份信息
+ * @return 用户名
+ */
+ public static String getUserName(Claims claims) {
+ return getValue(claims, JwtConstants.DETAILS_USERNAME);
+ }
+
+ /**
+ * 根据身份信息获取键值
+ *
+ * @param claims 身份信息
+ * @param key 键
+ * @return 值
+ */
+ public static String getValue(Claims claims, String key) {
+ Object obj = claims.get(key);
+ return obj == null ? "" : obj.toString();
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java b/bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java
new file mode 100644
index 0000000..9c1383f
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java
@@ -0,0 +1,153 @@
+package com.bwie.common.utils;
+
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.GetObjectRequest;
+import com.aliyun.oss.model.PutObjectRequest;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.time.LocalDateTime;
+import java.util.UUID;
+
+/**
+ * Oss服务调用
+ */
+@Log4j2
+public class OssUtil {
+
+ /**
+ * Endpoint 存储对象概述 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 访问路径前缀 存储对象概述
+ */
+ private static String endPoint = "oss-cn-shanghai.aliyuncs.com";
+ private static String accessKeyId = "LTAI5tD2tppzLQ4Rb6yKYyph";
+ private static String accessKeySecret = "KEKNKwVvDq7PZLjE63NPBouqHXox4Q";
+ private static String accessPre = "https://dzlmuyu.oss-cn-shanghai.aliyuncs.com/";
+
+ /**
+ * bucket名称
+ * @return
+ */
+ private static String bucketName = "dzlmuyu";
+
+ private static OSS ossClient ;
+
+ static {
+ ossClient = new OSSClientBuilder().build(
+ endPoint,
+ accessKeyId,
+ accessKeySecret);
+ log.info("oss服务连接成功!");
+ }
+
+ /**
+ * 默认路径上传本地文件
+ * @param filePath
+ */
+ public static String uploadFile(String filePath){
+ return uploadFileForBucket(bucketName,getOssFilePath(filePath) ,filePath);
+ }
+
+ /**
+ * 默认路径上传multipartFile文件
+ * @param multipartFile
+ */
+ public static String uploadMultipartFile(MultipartFile multipartFile) {
+ return uploadMultipartFile(bucketName,getOssFilePath(multipartFile.getOriginalFilename()),multipartFile);
+ }
+ /**
+ * 上传 multipartFile 类型文件
+ * @param bucketName
+ * @param ossPath
+ * @param multipartFile
+ */
+ public static String uploadMultipartFile(String bucketName , String ossPath , MultipartFile multipartFile){
+ InputStream inputStream = null;
+ try {
+ inputStream = multipartFile.getInputStream();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ uploadFileInputStreamForBucket(bucketName, ossPath, inputStream);
+ return accessPre+ossPath;
+ }
+
+ /**
+ * 使用File上传PutObject上传文件 ** 程序默认使用次方法上传
+ * @param bucketName 实例名称
+ * @param ossPath oss存储路径
+ * @param filePath 本地文件路径
+ */
+ public static String uploadFileForBucket(String bucketName , String ossPath , String filePath) {
+ // 创建PutObjectRequest对象。
+ PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, ossPath, new File(filePath));
+
+ // 上传
+ ossClient.putObject(putObjectRequest);
+ return accessPre+ossPath;
+ }
+
+ /**
+ * 使用文件流上传到指定的bucket实例
+ * @param bucketName 实例名称
+ * @param ossPath oss存储路径
+ * @param filePath 本地文件路径
+ */
+ public static String uploadFileInputStreamForBucket(String bucketName , String ossPath , String filePath){
+
+ // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
+ InputStream inputStream = null;
+ try {
+ inputStream = new FileInputStream(filePath);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
+ uploadFileInputStreamForBucket(bucketName, ossPath, inputStream);
+ return accessPre+ossPath;
+ }
+
+ public static void uploadFileInputStreamForBucket(String bucketName , String ossPath , InputStream inputStream ){
+ ossClient.putObject(bucketName, ossPath, inputStream);
+ }
+
+ /**
+ * 下载
+ * @param ossFilePath
+ * @param filePath
+ */
+ public static void downloadFile(String ossFilePath , String filePath ){
+ downloadFileForBucket(bucketName , ossFilePath , filePath);
+ }
+ /**
+ * 下载
+ * @param bucketName 实例名称
+ * @param ossFilePath oss存储路径
+ * @param filePath 本地文件路径
+ */
+ public static void downloadFileForBucket(String bucketName , String ossFilePath , String filePath ){
+ ossClient.getObject(new GetObjectRequest(bucketName, ossFilePath), new File(filePath));
+ }
+
+ /**
+ *
+ * @return
+ */
+ public static String getOssDefaultPath(){
+ LocalDateTime now = LocalDateTime.now();
+ String url =
+ now.getYear()+"/"+
+ now.getMonth()+"/"+
+ now.getDayOfMonth()+"/"+
+ now.getHour()+"/"+
+ now.getMinute()+"/";
+ return url;
+ }
+
+ public static String getOssFilePath(String filePath){
+ String fileSuf = filePath.substring(filePath.indexOf(".") + 1);
+ return getOssDefaultPath() + UUID.randomUUID().toString() + "." + fileSuf;
+ }
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java
new file mode 100644
index 0000000..7cf6a15
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java
@@ -0,0 +1,67 @@
+package com.bwie.common.utils;
+
+import org.springframework.util.AntPathMatcher;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @description: 字符串处理工具类
+ */
+public class StringUtils extends org.apache.commons.lang3.StringUtils {
+
+ /**
+ * * 判断一个对象是否为空
+ *
+ * @param object Object
+ * @return true:为空 false:非空
+ */
+ public static boolean isNull(Object object) {
+ return object == null;
+ }
+
+ /**
+ * * 判断一个Collection是否为空, 包含List,Set,Queue
+ *
+ * @param coll 要判断的Collection
+ * @return true:为空 false:非空
+ */
+ public static boolean isEmpty(Collection> coll) {
+ return isNull(coll) || coll.isEmpty();
+ }
+
+ /**
+ * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串
+ *
+ * @param str 指定字符串
+ * @param strs 需要检查的字符串数组
+ * @return 是否匹配
+ */
+ public static boolean matches(String str, List strs) {
+ if (isEmpty(str) || isEmpty(strs)) {
+ return false;
+ }
+ for (String pattern : strs) {
+ if (isMatch(pattern, str))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 判断url是否与规则配置:
+ * ? 表示单个字符;
+ * * 表示一层路径内的任意字符串,不可跨层级;
+ * ** 表示任意层路径;
+ *
+ * @param pattern 匹配规则
+ * @param url 需要匹配的url
+ * @return
+ */
+ public static boolean isMatch(String pattern, String url) {
+ AntPathMatcher matcher = new AntPathMatcher();
+ return matcher.match(pattern, url);
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java
new file mode 100644
index 0000000..1377336
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java
@@ -0,0 +1,92 @@
+package com.common.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.dysmsapi20170525.Client;
+import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
+import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
+import com.aliyun.teaopenapi.models.Config;
+import lombok.extern.log4j.Log4j2;
+
+import java.util.Map;
+
+/**
+ * 短信工具类
+ */
+@Log4j2
+public class TelSmsUtils {
+
+ /**
+ * 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限
+ */
+ private static String accessKeyId = "LTAI5tHU282xbcCSKZJSuKyH";
+
+ private static String accessKeySecret = "mX4tPoqoI55x3ACK1Z7IFiuAMVxuQr";
+
+ /**
+ * 短信访问域名
+ */
+ private static String endpoint = "dysmsapi.aliyuncs.com";
+ /**
+ * 短信签名
+ */
+ private static String signName = "乐优购";
+
+ private static String templateCode = "SMS_163851467";
+
+ /**
+ * 实例化短信对象
+ */
+ private static Client client;
+
+ static {
+ log.info("初始化短信服务开始");
+ long startTime = System.currentTimeMillis();
+ try {
+ client = initClient();
+ log.info("初始化短信成功:{}", signName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ log.info("初始化短信服务结束:耗时:{}MS", (System.currentTimeMillis() - startTime));
+ }
+
+ /**
+ * 初始化短信对象
+ *
+ * @return
+ * @throws Exception
+ */
+ private static Client initClient() throws Exception {
+ Config config = new Config()
+ // 您的AccessKey ID
+ .setAccessKeyId(accessKeyId)
+ // 您的AccessKey Secret
+ .setAccessKeySecret(accessKeySecret);
+ // 访问的域名
+ config.endpoint = endpoint;
+ return new Client(config);
+ }
+
+ /**
+ * 发送单条短信 第三方接口调用
+ *
+ * @param tel
+ * @param sendDataMap
+ */
+ public static String sendSms(String tel, Map sendDataMap) {
+ SendSmsRequest sendSmsRequest = new SendSmsRequest()
+ .setPhoneNumbers(tel)
+ .setSignName(signName)
+ .setTemplateCode(templateCode)
+ .setTemplateParam(JSONObject.toJSONString(sendDataMap));
+ SendSmsResponse sendSmsResponse = null;
+ try {
+ log.info("发送短信验证码:消息内容是:【{}】", JSONObject.toJSONString(sendDataMap));
+ sendSmsResponse = client.sendSms(sendSmsRequest);
+ } catch (Exception e) {
+ log.error("短信发送异常,手机号:【{}】,短信内容:【{}】,异常信息:【{}】", tel, sendDataMap, e);
+ }
+ return JSONObject.toJSONString(sendSmsResponse.getBody());
+ }
+
+}
diff --git a/bwie-moudles/pom.xml b/bwie-moudles/pom.xml
new file mode 100644
index 0000000..6a5a8db
--- /dev/null
+++ b/bwie-moudles/pom.xml
@@ -0,0 +1,58 @@
+
+
+ 4.0.0
+
+ com.bwie
+ rikao7_26_26
+ 1.0-SNAPSHOT
+
+
+ bwie-moudles
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+ com.bwie
+ bwie-common
+ 1.0-SNAPSHOT
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.2.8
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 2.2.2
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ 1.4.1
+
+
+
+
+
diff --git a/bwie-moudles/src/main/java/com/bwie/BillApplication.java b/bwie-moudles/src/main/java/com/bwie/BillApplication.java
new file mode 100644
index 0000000..525a3dd
--- /dev/null
+++ b/bwie-moudles/src/main/java/com/bwie/BillApplication.java
@@ -0,0 +1,13 @@
+package com.bwie;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@MapperScan("com.bwie.mapper")
+public class BillApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(BillApplication.class);
+ }
+}
diff --git a/bwie-moudles/src/main/java/com/bwie/controller/BillController.java b/bwie-moudles/src/main/java/com/bwie/controller/BillController.java
new file mode 100644
index 0000000..450cd20
--- /dev/null
+++ b/bwie-moudles/src/main/java/com/bwie/controller/BillController.java
@@ -0,0 +1,28 @@
+package com.bwie.controller;
+
+import com.bwie.common.domain.Bill;
+import com.bwie.service.BillService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/BillController")
+public class BillController {
+ @Autowired
+ private BillService billService;
+
+ @PostMapping("doAdd/")
+ public void doAdd(@RequestBody Bill bill){
+ billService.doAdd(bill);
+ }
+
+
+ @GetMapping("/findBillList")
+ public void findBillList(){
+ List billList=billService.findBillList();
+ System.out.println("表里面的数据"+billList.toString());
+ }
+
+}
diff --git a/bwie-moudles/src/main/java/com/bwie/mapper/BillMapper.java b/bwie-moudles/src/main/java/com/bwie/mapper/BillMapper.java
new file mode 100644
index 0000000..6de7668
--- /dev/null
+++ b/bwie-moudles/src/main/java/com/bwie/mapper/BillMapper.java
@@ -0,0 +1,12 @@
+package com.bwie.mapper;
+
+import com.bwie.common.domain.Bill;
+
+import java.util.List;
+
+public interface BillMapper {
+ void doAdd(Bill bill);
+
+ List findBillList();
+
+}
diff --git a/bwie-moudles/src/main/java/com/bwie/service/BillService.java b/bwie-moudles/src/main/java/com/bwie/service/BillService.java
new file mode 100644
index 0000000..a4837c1
--- /dev/null
+++ b/bwie-moudles/src/main/java/com/bwie/service/BillService.java
@@ -0,0 +1,13 @@
+package com.bwie.service;
+
+import com.bwie.common.domain.Bill;
+
+import java.util.List;
+
+public interface BillService {
+ void doAdd(Bill bill);
+
+ List findBillList();
+
+
+}
diff --git a/bwie-moudles/src/main/java/com/bwie/service/impl/BillServiceImpl.java b/bwie-moudles/src/main/java/com/bwie/service/impl/BillServiceImpl.java
new file mode 100644
index 0000000..ee8c4fd
--- /dev/null
+++ b/bwie-moudles/src/main/java/com/bwie/service/impl/BillServiceImpl.java
@@ -0,0 +1,25 @@
+package com.bwie.service.impl;
+
+import com.bwie.common.domain.Bill;
+import com.bwie.mapper.BillMapper;
+import com.bwie.service.BillService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class BillServiceImpl implements BillService {
+ @Autowired
+ private BillMapper billMapper;
+
+ @Override
+ public void doAdd(Bill bill) {
+ billMapper.doAdd(bill);
+ }
+
+ @Override
+ public List findBillList() {
+ return billMapper.findBillList();
+ }
+}
diff --git a/bwie-moudles/src/main/resources/bootstrap.yml b/bwie-moudles/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..e4b2449
--- /dev/null
+++ b/bwie-moudles/src/main/resources/bootstrap.yml
@@ -0,0 +1,45 @@
+# Tomcat
+server:
+ port: 9002
+# Spring
+spring:
+ main:
+ allow-circular-references: true
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
+ application:
+ # 应用名称
+ name: bwie-goods
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: 139.196.218.233:8848
+ namespace: 1d539f51-4f76-4501-aef3-307c261a7d81
+ group: nacos
+ config:
+ # 配置中心地址
+ server-addr: 139.196.218.233:8848
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ namespace: 1d539f51-4f76-4501-aef3-307c261a7d81
+ group: nacos
+fdfs:
+ so-timeout: 1500 # socket 连接时长
+ connect-timeout: 600 # 连接 tracker 服务器超时时长
+ # 这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流
+ tracker-list: 139.196.218.233:22122
+ web-server-url: 139.196.218.233:8888
+ pool:
+ jmx-enabled: false
+ # 生成缩略图
+ thumb-image:
+ height: 500
+ width: 500
diff --git a/bwie-moudles/src/main/resources/mapper/BillMapper.xml b/bwie-moudles/src/main/resources/mapper/BillMapper.xml
new file mode 100644
index 0000000..7c991df
--- /dev/null
+++ b/bwie-moudles/src/main/resources/mapper/BillMapper.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ INSERT INTO `rikao7_26`.`bill`
+ ( `billDate`, `billMonery`) VALUES ( #{billDate}, #{billMonery});
+
+
+
+
diff --git a/img.png b/img.png
new file mode 100644
index 0000000000000000000000000000000000000000..a2e4e22f686b3e2c700ff37482f6390a4ad9e86e
GIT binary patch
literal 403001
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