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