From f57eb151db358622172c2b19c25cf39c28971d3d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A7=9C=E7=8E=89=E7=90=A6?=
<7507756+jiang_yuqi@user.noreply.gitee.com>
Date: Sun, 31 Mar 2024 23:31:38 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/LabourApiController.java | 27 +++++-
.../src/main/resources/application-druid.yml | 7 ++
.../src/main/resources/application-prod.yml | 7 ++
.../src/main/resources/application-test.yml | 7 ++
.../src/main/resources/application.yml | 4 +
.../wxstatic/MP_verify_CIDdpE5WbJ0acBKs.txt | 1 +
ruoyi-common/pom.xml | 6 ++
.../com/ruoyi/common/config/RuoYiConfig.java | 13 +++
.../common/config/WechatAccountConfig.java | 33 +++++++
.../ruoyi/common/config/WechatMpConfig.java | 52 ++++++++++
.../common/utils/file/FileUploadUtils.java | 13 ++-
.../framework/web/service/TokenService.java | 4 +-
ruoyi-ui/src/permission.js | 2 +-
ruoyi-ui/src/router/index.js | 9 +-
.../src/views/wxsetting/wxInit/binding.vue | 0
ruoyi-ui/src/views/wxsetting/wxInit/build.vue | 97 -------------------
yanzhu-jh/pom.xml | 8 ++
.../jh/project/task/AttendanceJgwTask.java | 6 +-
.../controller/WxAuthController.java | 92 ++++++++++++++++++
.../wxsetting/service/wxMessageService.java | 11 +++
20 files changed, 285 insertions(+), 114 deletions(-)
create mode 100644 ruoyi-admin/src/main/resources/wxstatic/MP_verify_CIDdpE5WbJ0acBKs.txt
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/config/WechatAccountConfig.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/config/WechatMpConfig.java
delete mode 100644 ruoyi-ui/src/views/wxsetting/wxInit/binding.vue
delete mode 100644 ruoyi-ui/src/views/wxsetting/wxInit/build.vue
create mode 100644 yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/controller/WxAuthController.java
create mode 100644 yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/wxMessageService.java
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/labour/controller/LabourApiController.java b/ruoyi-admin/src/main/java/com/ruoyi/api/labour/controller/LabourApiController.java
index 1f832fa5..df1ddfc4 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/api/labour/controller/LabourApiController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/api/labour/controller/LabourApiController.java
@@ -9,6 +9,7 @@ import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.annotation.RateLimiter;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
@@ -16,16 +17,22 @@ import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.*;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.exception.user.BlackListException;
import com.ruoyi.common.utils.AuthRsaUtils;
+import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.MultipartFileUtils;
import com.ruoyi.common.utils.http.HttpClientUtil;
+import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.common.utils.sign.Md5Utils;
+import com.ruoyi.framework.manager.AsyncManager;
+import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.framework.web.service.SysLoginService;
import com.ruoyi.system.domain.SysApplyConfig;
+import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import com.yanzhu.jh.project.domain.SurProjectAttendanceData;
import com.yanzhu.jh.project.domain.SurProjectAttendanceGroup;
@@ -70,6 +77,9 @@ public class LabourApiController extends BaseController {
@Autowired
private SysLoginService loginService;
+ @Autowired
+ private ISysConfigService configService;
+
@Autowired
private ISurProjectAttendanceGroupService surProjectAttendanceGroupService;
@@ -154,13 +164,21 @@ public class LabourApiController extends BaseController {
if(file==null){
throw new RuntimeException("请上传文件资源...");
}
+ String ipAddress = IpUtils.getIpAddr();
+ log.info("labourApi.pushProfileImage.ipAddress......{}",ipAddress);
+ // IP黑名单校验
+ String blackStr = configService.selectConfigByKey("api.labour.whiteIPList");
+ if (!IpUtils.isMatchedIp(blackStr,ipAddress))
+ {
+ throw new BlackListException();
+ }
SysApplyConfig sysApplyConfig = redisCache.getCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG+super.getUsername());
if(StringUtils.equals(ShiFouEnum.SHI.getCode(),sysApplyConfig.getIsDel())){
throw new ServiceException(HttpStatusEnum.DISABLE.getInfo(),HttpStatusEnum.DISABLE.getCode());
}
try {
// 上传并返回新文件名称
- String fileName = FileUploadUtils.upload(RuoYiConfig.getUploadPath(), file);
+ String fileName = FileUploadUtils.uploadImages(RuoYiConfig.getUploadPath(), file);
return success(fileName);
}catch (Exception e){
throw new ServiceException(e.getMessage(),HttpStatusEnum.DARA_EXCEPTION.getCode());
@@ -498,8 +516,13 @@ public class LabourApiController extends BaseController {
if(StringUtils.isNull(surProjectAttendanceUser.getCompanyTypeId())){
throw new ServiceException("人员部门类型信息不完整",HttpStatusEnum.DARA_EXCEPTION.getCode());
}
- surProjectAttendanceData.setAppId(sysApplyConfig.getAppId());
surProjectAttendanceData.setCfgid(sysApplyConfig.getCfgId());
+ surProjectAttendanceData.setAppId(sysApplyConfig.getAppId());
+ surProjectAttendanceData.setProjectId(sysApplyConfig.getProjectId());
+ surProjectAttendanceData.setProjectName(sysApplyConfig.getProjectName());
+ surProjectAttendanceData.setDeptId(sysApplyConfig.getDeptId());
+ surProjectAttendanceData.setDeptName(sysApplyConfig.getDeptName());
+ surProjectAttendanceData.setVendorsCode(VendorsCodeEnum.YANZHU.getCode());
surProjectAttendanceData.setCompanyId(surProjectAttendanceUser.getCompanyId());
surProjectAttendanceData.setCompanyName(surProjectAttendanceUser.getCompanyName());
surProjectAttendanceData.setWorkerName(surProjectAttendanceUser.getName());
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 23a709cc..5e5fcb57 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -14,6 +14,8 @@ ruoyi:
addressEnabled: false
# 验证码类型 math 数字计算 char 字符验证
captchaType: math
+ # 服务回调地址
+ projectUrl: http://127.0.0.1:8091/jhapi/
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
@@ -32,7 +34,12 @@ server:
# Tomcat启动初始化的线程数,默认值10
min-spare: 100
+#微信公众号配置
+wechat:
+ mpAppId: wxe6fd9ad863ac09bf
+ mpAppSecret: ed08e7f6f42a40fc9fa0ebbc1bc6a1db
# 数据源配置
+
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index c5a080c7..86adbf3b 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -14,6 +14,8 @@ ruoyi:
addressEnabled: false
# 验证码类型 math 数字计算 char 字符验证
captchaType: math
+ # 服务回调地址
+ projectUrl: http://127.0.0.1:8091/jhapi/
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
@@ -32,6 +34,11 @@ server:
# Tomcat启动初始化的线程数,默认值10
min-spare: 100
+#微信公众号配置
+wechat:
+ mpAppId: wx90a9158b6acc5584
+ mpAppSecret: ec23a5d78f12afa569c64794570d753c
+
# 数据源配置
spring:
datasource:
diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml
index ef42a5c0..42d5b5e6 100644
--- a/ruoyi-admin/src/main/resources/application-test.yml
+++ b/ruoyi-admin/src/main/resources/application-test.yml
@@ -14,6 +14,8 @@ ruoyi:
addressEnabled: false
# 验证码类型 math 数字计算 char 字符验证
captchaType: math
+ # 服务回调地址
+ projectUrl: http://127.0.0.1:8091/jhapi/
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
@@ -32,6 +34,11 @@ server:
# Tomcat启动初始化的线程数,默认值10
min-spare: 100
+#微信公众号配置
+wechat:
+ mpAppId: wxe6fd9ad863ac09bf
+ mpAppSecret: ed08e7f6f42a40fc9fa0ebbc1bc6a1db
+
# 数据源配置
spring:
datasource:
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 134c6f93..cd55cebe 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -15,6 +15,10 @@ user:
# Spring配置
spring:
+ # 微信资源验证访问
+ web:
+ resources:
+ static-locations: classpath:/wxstatic/
# 资源信息
messages:
# 国际化资源文件路径
diff --git a/ruoyi-admin/src/main/resources/wxstatic/MP_verify_CIDdpE5WbJ0acBKs.txt b/ruoyi-admin/src/main/resources/wxstatic/MP_verify_CIDdpE5WbJ0acBKs.txt
new file mode 100644
index 00000000..24661151
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/wxstatic/MP_verify_CIDdpE5WbJ0acBKs.txt
@@ -0,0 +1 @@
+CIDdpE5WbJ0acBKs
\ No newline at end of file
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 8c31d619..367cba70 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -169,6 +169,12 @@
4.5.13
+
+ com.github.binarywang
+ weixin-java-mp
+ 2.7.0
+
+
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
index 00f70f64..c19580a8 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
@@ -33,6 +33,11 @@ public class RuoYiConfig
/** 验证码类型 */
private static String captchaType;
+ /**
+ * 服务回调地址
+ */
+ private static String projectUrl;
+
public String getName()
{
return name;
@@ -101,6 +106,14 @@ public class RuoYiConfig
RuoYiConfig.captchaType = captchaType;
}
+ public static String getProjectUrl() {
+ return projectUrl;
+ }
+
+ public void setProjectUrl(String projectUrl) {
+ RuoYiConfig.projectUrl = projectUrl;
+ }
+
/**
* 获取导入上传路径
*/
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatAccountConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatAccountConfig.java
new file mode 100644
index 00000000..9fa392be
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatAccountConfig.java
@@ -0,0 +1,33 @@
+package com.ruoyi.common.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+import java.util.Map;
+/**
+ * Created by tao.
+ * Date: 2023/3/21 15:02
+ * 描述:
+ */
+
+@Data
+@Component
+//从配置文件里获取
+@ConfigurationProperties(prefix = "wechat")
+public class WechatAccountConfig {
+
+ /**
+ * 公众平台id
+ */
+ private String mpAppId;
+
+ /**
+ * 公众平台密钥
+ */
+ private String mpAppSecret;
+
+ /**
+ * 微信模版id
+ */
+ private Map templateId;
+}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatMpConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatMpConfig.java
new file mode 100644
index 00000000..84f7fd1d
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatMpConfig.java
@@ -0,0 +1,52 @@
+package com.ruoyi.common.config;
+
+import me.chanjar.weixin.mp.api.WxMpConfigStorage;
+import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+/**
+ * Created by tao.
+ * Date: 2023/3/21 15:00
+ * 描述:
+ */
+
+@Component
+public class WechatMpConfig {
+
+ @Autowired
+ private WechatAccountConfig accountConfig;
+
+ /**
+ * @author :tao
+ * @date :Created in 2021/3/12 10:15
+ * @param: :
+ * @return: WxMpService 对象
+ * 配置wxMpConfigStorage,返回 WxMpService 对象
+ */
+ @Bean
+ public WxMpService wxMpService() {
+ WxMpService wxMpService = new WxMpServiceImpl();
+ wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
+ return wxMpService;
+ }
+
+ /**
+ * @author :tao
+ * @date :Created in 2021/3/12 10:20
+ * @param: :
+ * @return: WxMpConfigStorage 对象
+ * 配置AppId、和AppSecret,获取WxMpConfigStorage 对象
+ */
+ @Bean
+ public WxMpConfigStorage wxMpConfigStorage() {
+ WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();
+ wxMpConfigStorage.setAppId(accountConfig.getMpAppId());
+ wxMpConfigStorage.setSecret(accountConfig.getMpAppSecret());
+ return wxMpConfigStorage;
+ }
+
+}
+
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
index 9a043c42..959bce2b 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
@@ -32,12 +32,17 @@ public class FileUploadUtils
/**
* 默认大小 50M
*/
- public static final long DEFAULT_MAX_SIZE = 100 * 1024 * 1024;
+ public static final long DEFAULT_MAX_SIZE = 200 * 1024 * 1024;
+
+ /**
+ * 默认大小 1M
+ */
+ public static final long API_PROFILE_MAX_SIZE = 1 * 1024 * 1024;
/**
* 默认的文件名最大长度 100
*/
- public static final int DEFAULT_FILE_NAME_LENGTH = 100;
+ public static final int DEFAULT_FILE_NAME_LENGTH = 200;
/**
* 默认上传的地址
@@ -105,6 +110,10 @@ public class FileUploadUtils
{
try
{
+ if (file.getSize() > API_PROFILE_MAX_SIZE)
+ {
+ throw new FileSizeLimitExceededException(1);
+ }
return upload(baseDir, file, MimeTypeUtils.IMAGE_EXTENSION);
}
catch (Exception e)
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
index 9d7fe89f..c9a9b699 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
@@ -161,10 +161,10 @@ public class TokenService
String userKey = getTokenKey(uuid);
LoginUser user = redisCache.getCacheObject(userKey);
user.setLoginTime(System.currentTimeMillis());
- int mobileExpireTime = expireTime * 3650 * 60 ;
+ int mobileExpireTime = 24;//expireTime * 3650 * 60 ;
user.setExpireTime(user.getLoginTime() + mobileExpireTime * MILLIS_MINUTE);
// 根据uuid将loginUser缓存
- redisCache.setCacheObject(userKey, user, mobileExpireTime, TimeUnit.MINUTES);
+ redisCache.setCacheObject(userKey, user, mobileExpireTime, TimeUnit.HOURS);
}
/**
diff --git a/ruoyi-ui/src/permission.js b/ruoyi-ui/src/permission.js
index f185c13a..8df85352 100644
--- a/ruoyi-ui/src/permission.js
+++ b/ruoyi-ui/src/permission.js
@@ -8,7 +8,7 @@ import { isRelogin } from '@/utils/request'
NProgress.configure({ showSpinner: false })
-const whiteList = ['/login', '/register', '/wxbuild', '/wxbinding']
+const whiteList = ['/login', '/register', '/wxAuth']
router.beforeEach((to, from, next) => {
NProgress.start()
if (getToken()) {
diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js
index 55f55a46..ae0173a2 100644
--- a/ruoyi-ui/src/router/index.js
+++ b/ruoyi-ui/src/router/index.js
@@ -62,13 +62,8 @@ export const constantRoutes = [
hidden: true
},
{
- path: '/wxbuild',
- component: () => import('@/views/wxsetting/wxInit/build'),
- hidden: true
- },
- {
- path: '/wxbinding',
- component: () => import('@/views/wxsetting/wxInit/binding'),
+ path: '/wxAuth',
+ component: () => import('@/views/wxsetting/wxAuth/index'),
hidden: true
},
{
diff --git a/ruoyi-ui/src/views/wxsetting/wxInit/binding.vue b/ruoyi-ui/src/views/wxsetting/wxInit/binding.vue
deleted file mode 100644
index e69de29b..00000000
diff --git a/ruoyi-ui/src/views/wxsetting/wxInit/build.vue b/ruoyi-ui/src/views/wxsetting/wxInit/build.vue
deleted file mode 100644
index 8c141d7b..00000000
--- a/ruoyi-ui/src/views/wxsetting/wxInit/build.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
-
-
-
-
长按识别或截图扫码关注公众号
-
长按识别或截图扫码关注公众号
-
-
-
-
-
-
-
diff --git a/yanzhu-jh/pom.xml b/yanzhu-jh/pom.xml
index 6a518b59..95738b5b 100644
--- a/yanzhu-jh/pom.xml
+++ b/yanzhu-jh/pom.xml
@@ -7,22 +7,30 @@
com.ruoyi
3.8.6
+
4.0.0
com.yanzhu.jh
yanzhu-jh
1.0.0
+
com.ruoyi
ruoyi-system
+
cn.hutool
hutool-poi
${hutool.version}
+
+ org.projectlombok
+ lombok
+
+
\ No newline at end of file
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceJgwTask.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceJgwTask.java
index 00d1f0a9..3e73d266 100644
--- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceJgwTask.java
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceJgwTask.java
@@ -450,7 +450,7 @@ public class AttendanceJgwTask {
if(arr.size()>0){
for(int i=0;i0){
for(int i=0;i