diff --git a/README.md b/README.md
index ca87f510e..4814ec753 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
-RuoYi v3.6.5.0.8
+RuoYi v3.6.5.0.9
基于 Vue/Element UI 和 Spring Boot/Spring Cloud & Alibaba 前后端分离的分布式微服务架构
-
+
diff --git a/pom.xml b/pom.xml
index b89229197..e07cd0ec0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,14 +6,14 @@
com.ruoyi
ruoyi
- 3.6.5.0.8
+ 3.6.5.0.9
ruoyi
http://www.ruoyi.vip
若依微服务系统
- 3.6.5.0.8
+ 3.6.5.0.9
UTF-8
UTF-8
1.8
diff --git a/ruoyi-api/pom.xml b/ruoyi-api/pom.xml
index a0952ae56..04ff21f4a 100644
--- a/ruoyi-api/pom.xml
+++ b/ruoyi-api/pom.xml
@@ -4,7 +4,7 @@
com.ruoyi
ruoyi
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-api/ruoyi-api-system/pom.xml b/ruoyi-api/ruoyi-api-system/pom.xml
index 07182762c..d0a42dc13 100644
--- a/ruoyi-api/ruoyi-api-system/pom.xml
+++ b/ruoyi-api/ruoyi-api-system/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-api
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
@@ -25,7 +25,7 @@
com.zkjiadi
zkjiadi-mall-api
- 1.0.6
+ 1.0.7
com.squareup.okhttp3
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
index e7885f5a4..14ab3c53d 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
@@ -52,4 +52,10 @@ public interface RemoteUserService extends InnerRemoteUserService
*/
@PutMapping("/user/recordlogin")
public R recordUserLogin(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+ /**
+ * 同步至go框架
+ */
+ @PostMapping("/user/syncGO")
+ public R syncGO(@RequestBody SysUser sysUser);
}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
index 88b20845a..8b92b528a 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
@@ -68,6 +68,11 @@ public class RemoteUserFallbackFactory implements FallbackFactory syncGO(SysUser sysUser) {
+ return R.fail("同步用户信息至GO失败:" + throwable.getMessage());
+ }
+
@NotNull
@Override
public R edit_Inner(@NotNull LoginUser user, @NotNull String source) {
diff --git a/ruoyi-auth/pom.xml b/ruoyi-auth/pom.xml
index 59094a488..827294415 100644
--- a/ruoyi-auth/pom.xml
+++ b/ruoyi-auth/pom.xml
@@ -4,7 +4,7 @@
com.ruoyi
ruoyi
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index ce988cb68..34d7d3e07 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -4,7 +4,7 @@
com.ruoyi
ruoyi
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml
index 7d86a7695..4dadeb1c3 100644
--- a/ruoyi-common/ruoyi-common-core/pom.xml
+++ b/ruoyi-common/ruoyi-common-core/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-common
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java
index 73cae223a..0d69def5c 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java
@@ -12,6 +12,20 @@ public class SecurityConstants
*/
public static final String DETAILS_USER_ID = "user_id";
+ /**
+ * 用户ID字段
+ */
+ public static final String DETAILS_SUB = "sub";
+
+ /**
+ * 用户ID字段
+ */
+ public static final String DETAILS_IAT= "iat";
+ /**
+ * 用户ID字段
+ */
+ public static final String DETAILS_EXP= "exp";
+
/**
* 用户名字段
*/
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java
index abe93c0c0..14ea876c8 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java
@@ -1,13 +1,18 @@
package com.ruoyi.common.core.utils;
+import java.util.Base64;
import java.util.Map;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.TokenConstants;
+import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.text.Convert;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
+import javax.naming.AuthenticationException;
+import javax.servlet.http.HttpServletResponse;
+
/**
* Jwt工具类
*
@@ -15,7 +20,7 @@ import io.jsonwebtoken.SignatureAlgorithm;
*/
public class JwtUtils
{
- public static String secret = TokenConstants.SECRET;
+ public static String secret = Base64.getEncoder().encodeToString(TokenConstants.SECRET.getBytes()) ;
/**
* 从数据声明生成令牌
diff --git a/ruoyi-common/ruoyi-common-datascope/pom.xml b/ruoyi-common/ruoyi-common-datascope/pom.xml
index 417dc4ab5..9d2e3f7e7 100644
--- a/ruoyi-common/ruoyi-common-datascope/pom.xml
+++ b/ruoyi-common/ruoyi-common-datascope/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-common
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-common/ruoyi-common-datasource/pom.xml b/ruoyi-common/ruoyi-common-datasource/pom.xml
index 25d4eb8b1..2b473a07b 100644
--- a/ruoyi-common/ruoyi-common-datasource/pom.xml
+++ b/ruoyi-common/ruoyi-common-datasource/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-common
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-common/ruoyi-common-log/pom.xml b/ruoyi-common/ruoyi-common-log/pom.xml
index 7d6f7be77..2b015834a 100644
--- a/ruoyi-common/ruoyi-common-log/pom.xml
+++ b/ruoyi-common/ruoyi-common-log/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-common
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-common/ruoyi-common-redis/pom.xml b/ruoyi-common/ruoyi-common-redis/pom.xml
index 63de4bbae..9b5611dd8 100644
--- a/ruoyi-common/ruoyi-common-redis/pom.xml
+++ b/ruoyi-common/ruoyi-common-redis/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-common
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-common/ruoyi-common-seata/pom.xml b/ruoyi-common/ruoyi-common-seata/pom.xml
index 94de8affa..e4e65fcd4 100644
--- a/ruoyi-common/ruoyi-common-seata/pom.xml
+++ b/ruoyi-common/ruoyi-common-seata/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-common
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-common/ruoyi-common-security/pom.xml b/ruoyi-common/ruoyi-common-security/pom.xml
index 7154ec52a..b9ec03f55 100644
--- a/ruoyi-common/ruoyi-common-security/pom.xml
+++ b/ruoyi-common/ruoyi-common-security/pom.xml
@@ -4,7 +4,7 @@
com.ruoyi
ruoyi-common
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
index 0a63b851e..784e63e99 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -1,9 +1,14 @@
package com.ruoyi.common.security.service;
+import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.impl.DefaultClaims;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -61,6 +66,10 @@ public class TokenService
claimsMap.put(SecurityConstants.USER_KEY, token);
claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
+ claimsMap.put(SecurityConstants.DETAILS_SUB,userId);
+ int now = Math.toIntExact(System.currentTimeMillis() / 1000);
+ claimsMap.put(SecurityConstants.DETAILS_IAT,now);
+ claimsMap.put(SecurityConstants.DETAILS_EXP,now+TOKEN_EXPIRE_TIME*60);
// 接口返回信息
Map rspMap = new HashMap();
diff --git a/ruoyi-common/ruoyi-common-sensitive/pom.xml b/ruoyi-common/ruoyi-common-sensitive/pom.xml
index 898a7c4ca..8bd4be024 100644
--- a/ruoyi-common/ruoyi-common-sensitive/pom.xml
+++ b/ruoyi-common/ruoyi-common-sensitive/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-common
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-common/ruoyi-common-swagger/pom.xml b/ruoyi-common/ruoyi-common-swagger/pom.xml
index f01a42810..1c1d4469e 100644
--- a/ruoyi-common/ruoyi-common-swagger/pom.xml
+++ b/ruoyi-common/ruoyi-common-swagger/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-common
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-gateway/pom.xml b/ruoyi-gateway/pom.xml
index 745feb983..2027f7c28 100644
--- a/ruoyi-gateway/pom.xml
+++ b/ruoyi-gateway/pom.xml
@@ -4,7 +4,7 @@
com.ruoyi
ruoyi
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
@@ -84,7 +84,7 @@
com.ujcms
ujcms-commons
- 9.6.0
+ 9.6.0.0.1
org.springframework
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
index 51d39ef9f..e4d791851 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -44,7 +44,6 @@ public class AuthFilter implements GlobalFilter, Ordered
{
ServerHttpRequest request = exchange.getRequest();
ServerHttpRequest.Builder mutate = request.mutate();
-
String url = request.getURI().getPath();
// 跳过不需要验证的路径
if (StringUtils.matches(url, ignoreWhite.getWhites()))
@@ -56,11 +55,19 @@ public class AuthFilter implements GlobalFilter, Ordered
{
return unauthorizedResponse(exchange, "令牌不能为空");
}
- Claims claims = JwtUtils.parseToken(token);
+ /*Claims claims = JwtUtils.parseToken(token);
if (claims == null)
{
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
- }
+ }*/
+ Claims claims;
+ try{
+ claims = JwtUtils.parseToken(token);
+ if (claims == null)
+ return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
+ }catch (Exception e){
+ return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
+ }
String userkey = JwtUtils.getUserKey(claims);
boolean islogin = redisService.hasKey(getTokenKey(userkey));
if (!islogin)
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/GatewayExceptionHandler.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/GatewayExceptionHandler.java
index 593e7e62a..2f017bddd 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/GatewayExceptionHandler.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/GatewayExceptionHandler.java
@@ -34,7 +34,6 @@ public class GatewayExceptionHandler implements ErrorWebExceptionHandler
}
String msg;
-
if (ex instanceof NotFoundException)
{
msg = "服务未找到";
diff --git a/ruoyi-modules/pom.xml b/ruoyi-modules/pom.xml
index 943a768ac..edc138aa5 100644
--- a/ruoyi-modules/pom.xml
+++ b/ruoyi-modules/pom.xml
@@ -4,7 +4,7 @@
com.ruoyi
ruoyi
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-modules/ruoyi-file/pom.xml b/ruoyi-modules/ruoyi-file/pom.xml
index 3050adfaa..6e42fbf95 100644
--- a/ruoyi-modules/ruoyi-file/pom.xml
+++ b/ruoyi-modules/ruoyi-file/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-modules
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-modules/ruoyi-gen/pom.xml b/ruoyi-modules/ruoyi-gen/pom.xml
index 0c93f077b..808700eb5 100644
--- a/ruoyi-modules/ruoyi-gen/pom.xml
+++ b/ruoyi-modules/ruoyi-gen/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-modules
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-modules/ruoyi-job/pom.xml b/ruoyi-modules/ruoyi-job/pom.xml
index bde3ab1e5..6b5440d5b 100644
--- a/ruoyi-modules/ruoyi-job/pom.xml
+++ b/ruoyi-modules/ruoyi-job/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-modules
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
@@ -75,6 +75,18 @@
de.codecentric
spring-boot-admin-starter-client
+
+ com.squareup.okhttp3
+ okhttp
+ 3.12.13
+
+
+ com.ujcms
+ ujcms-commons
+ 9.6.0.0.1
+ compile
+
+
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/SmsConfig.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/SmsConfig.java
new file mode 100644
index 000000000..9e483832d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/SmsConfig.java
@@ -0,0 +1,23 @@
+package com.ruoyi.job.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 验证码配置
+ *
+ * @author ruoyi
+ */
+@Data
+@Configuration
+@RefreshScope
+@ConfigurationProperties(prefix = "security.sms.aliyuncs")
+public class SmsConfig
+{
+ private String accessKeyId;
+ private String accessKeySecret;
+ private String signName;
+ private String templateCode;
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/ScClassUserInfo.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/ScClassUserInfo.java
new file mode 100644
index 000000000..aacd7cf74
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/ScClassUserInfo.java
@@ -0,0 +1,78 @@
+package com.ruoyi.job.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import com.ruoyi.job.util.ProgressFormatterUtil;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.data.annotation.Id;
+
+import java.math.BigDecimal;
+
+/**
+ * 直播预告报名信息导出实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ScClassUserInfo extends BaseEntity {
+
+ @Id
+ private Long id;
+
+ //@ExcelIgnore // 不导出该字段
+ private Long userId;
+
+ //@ExcelIgnore // 不导出该字段
+ private Long classId;
+
+ //@ColumnWidth(25)
+ // @ExcelProperty("名称(报名时)")
+ private String name;
+
+ //@ColumnWidth(25)
+ //@ExcelProperty("单位")
+ private String firm;
+
+ //@ColumnWidth(25)
+ //@ExcelProperty("专业")
+ private String specialized;
+
+ //@ColumnWidth(35)
+ //@ExcelProperty("手机号")
+ private String phonenumber;
+
+ //@ColumnWidth(35)
+ //@ExcelProperty("昵称")
+ private String nickName;
+
+ /**
+ * 客户订单编号
+ */
+ //@ExcelProperty("客户订单编号")
+ private String userSn;
+
+ //@ExcelIgnore
+ private Boolean todayAttendanceIs;
+
+ @JsonIgnore
+ // @ExcelProperty("是否打卡")
+ private String attendanceIs;
+
+ //@ExcelProperty("签到次数")
+ private Integer attendanceCount;
+
+ //@ExcelIgnore
+ private BigDecimal progress;
+
+ //@ExcelProperty("总学习进度")
+ private String progressPercent;
+
+ public String getAttendanceIs() {
+ return attendanceCount.compareTo(0) > 0 ? "是" : "否";
+ }
+
+ public String getProgressPercent() {
+ return ProgressFormatterUtil.format(this.progress.multiply(BigDecimal.valueOf(100)));
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SmsService.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SmsService.java
new file mode 100644
index 000000000..67a8602b1
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SmsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.job.service;
+
+import com.ruoyi.common.core.exception.CaptchaException;
+
+/**
+ * 验证码处理
+ *
+ * @author ruoyi
+ */
+public interface SmsService
+{
+ /**
+ * 发送学习短信通知
+ */
+ public void sendStudyNoticeSms(String phone) throws CaptchaException;
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/impl/SmsServiceImpl.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/impl/SmsServiceImpl.java
new file mode 100644
index 000000000..e8407555f
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/impl/SmsServiceImpl.java
@@ -0,0 +1,35 @@
+package com.ruoyi.job.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.exception.CaptchaException;
+import com.ruoyi.job.config.SmsConfig;
+import com.ruoyi.job.service.SmsService;
+import com.ujcms.commons.sms.AliyunUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 验证码实现处理
+ *
+ * @author ruoyi
+ */
+@Service
+public class SmsServiceImpl implements SmsService
+{
+ @Autowired
+ private SmsConfig smsConfig;
+
+ /**
+ * 发送学习短信通知
+ */
+ @Override
+ public void sendStudyNoticeSms(String phone) throws CaptchaException {
+ AliyunUtils.sendSms(smsConfig.getAccessKeyId(),
+ smsConfig.getAccessKeySecret(),
+ smsConfig.getSignName(),
+ smsConfig.getTemplateCode(),
+ JSONObject.of(),
+ phone
+ );
+ }
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/LiveTask.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/LiveTask.java
new file mode 100644
index 000000000..25f2aa07d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/LiveTask.java
@@ -0,0 +1,36 @@
+package com.ruoyi.job.task;
+
+import com.ruoyi.job.config.SmsConfig;
+import com.ruoyi.job.domain.ScClassUserInfo;
+import com.ruoyi.job.mapper.ScClassUserInfoMapper;
+import com.ruoyi.job.service.SmsService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Slf4j
+@Component("liveTask")
+public class LiveTask {
+ @Resource
+ ScClassUserInfoMapper scClassUserInfoMapper;
+ @Autowired
+ private SmsService smsAliyuncs;
+
+ @Autowired
+ private SmsConfig smsConfig;
+ /**
+ * 短信打卡
+ */
+ public void CourseSmsNotice(){
+ List list = scClassUserInfoMapper.waitNoticeCourseUser();
+ list.forEach(item->{
+ if (item.getPhonenumber() != null && !item.getPhonenumber().trim().isEmpty()){
+ log.info("发送打卡提醒 {} {} {}",item.getUserId(),item.getNickName(),item.getPhonenumber());
+ smsAliyuncs.sendStudyNoticeSms(item.getPhonenumber());
+ }
+ });
+ }
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ProgressFormatterUtil.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ProgressFormatterUtil.java
new file mode 100644
index 000000000..b88d4bb91
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ProgressFormatterUtil.java
@@ -0,0 +1,18 @@
+package com.ruoyi.job.util;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.NumberFormat;
+
+public class ProgressFormatterUtil {
+ public static String format(BigDecimal progress ) {
+ if (progress == null) return "0";
+ // 保留两位小数(四舍五入)
+ BigDecimal scaled = progress.setScale(2, RoundingMode.HALF_UP);
+ // 去除末尾零和小数点
+ NumberFormat nf = NumberFormat.getInstance();
+ nf.setMaximumFractionDigits(2);
+ nf.setMinimumFractionDigits(0);
+ return nf.format(scaled) + "%";
+ }
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/ScClassUserInfoMapper.xml b/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/ScClassUserInfoMapper.xml
new file mode 100644
index 000000000..5e405ee42
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/ScClassUserInfoMapper.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml
index 4cde9e928..dd9e6d39f 100644
--- a/ruoyi-modules/ruoyi-system/pom.xml
+++ b/ruoyi-modules/ruoyi-system/pom.xml
@@ -5,7 +5,7 @@
com.ruoyi
ruoyi-modules
- 3.6.5.0.8
+ 3.6.5.0.9
4.0.0
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index b26e5169e..74052636f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -166,6 +166,16 @@ public class SysUserController extends BaseController
return R.ok(userService.updateUserProfile(sysUser));
}
+ /**
+ *记录用户登录IP地址和登录时间
+ */
+ @InnerAuth
+ @PutMapping("/syncGO")
+ public R syncGO(@RequestBody SysUser sysUser)
+ {
+ return R.ok(userService.syncGO(sysUser));
+ }
+
/**
* 获取用户信息
*
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SyncGoUser.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SyncGoUser.java
new file mode 100644
index 000000000..d7c406e17
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SyncGoUser.java
@@ -0,0 +1,15 @@
+package com.ruoyi.system.domain;
+
+import lombok.Data;
+
+@Data
+public class SyncGoUser {
+ private Integer userId;
+ private String nickname;
+ private String username;
+ private String mobile;
+ private String lastIp;
+ private String remark;
+ private String avatar;
+ private Integer status;
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index 8d6e2b2b4..b7190830f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -170,6 +170,14 @@ public interface ISysUserService
*/
public boolean updateUserProfile(SysUser user);
+ /**
+ * 同步用户基本信息
+ *
+ * @param user 用户信息
+ * @return 结果
+ */
+ public boolean syncGO(SysUser user);
+
/**
* 修改用户头像
*
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index fa5d7c0b7..673a056ae 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -6,12 +6,17 @@ import java.util.Objects;
import java.util.stream.Collectors;
import javax.validation.Validator;
+import cn.hutool.system.UserInfo;
import com.github.pagehelper.Page;
import com.ruoyi.system.api.domain.KSysUserAccount;
+import com.ruoyi.system.domain.SyncGoUser;
import com.ruoyi.system.service.IKSysUserService;
+import org.apache.http.client.methods.HttpPost;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -35,6 +40,7 @@ import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysUserService;
+import org.springframework.web.client.RestTemplate;
/**
* 用户 业务层处理
@@ -44,6 +50,11 @@ import com.ruoyi.system.service.ISysUserService;
@Service
public class SysUserServiceImpl implements ISysUserService
{
+ @Value("${go.host}")
+ private String goHost;
+ @Value("${go.accessKey}")
+ private String accessKey;
+
private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
@Autowired
@@ -73,6 +84,7 @@ public class SysUserServiceImpl implements ISysUserService
@Autowired
protected Validator validator;
+
/**
* 根据条件分页查询用户列表
*
@@ -308,7 +320,9 @@ public class SysUserServiceImpl implements ISysUserService
@Override
public boolean registerUser(SysUser user)
{
- return userMapper.insertUser(user) > 0;
+ boolean res = userMapper.insertUser(user) > 0;
+ this.syncGO(user);
+ return res;
}
/**
@@ -335,6 +349,7 @@ public class SysUserServiceImpl implements ISysUserService
kSysUserService.updateSysUserAccount(user.getSysUserAccount());
}
}
+ this.syncGO(user);
return userMapper.updateUser(user);
}
@@ -361,6 +376,7 @@ public class SysUserServiceImpl implements ISysUserService
@Override
public int updateUserStatus(SysUser user)
{
+ this.syncGO(user);
return userMapper.updateUser(user);
}
@@ -373,9 +389,39 @@ public class SysUserServiceImpl implements ISysUserService
@Override
public boolean updateUserProfile(SysUser user)
{
+ this.syncGO(user);
return userMapper.updateUser(user) > 0;
}
+ /**
+ * 同步用户基本信息
+ *
+ * @param user 用户信息
+ * @return 结果
+ */
+ @Override
+ public boolean syncGO(SysUser user){
+ RestTemplate restTemplate = new RestTemplate();
+ String url = goHost + "/api/v2/mini/user/zkSyncUser/"+accessKey;
+ SyncGoUser syncGoUser = new SyncGoUser();
+ syncGoUser.setUserId(Math.toIntExact(user.getUserId()));
+ syncGoUser.setNickname(user.getNickName());
+ syncGoUser.setUsername(user.getUserName());
+ syncGoUser.setMobile(user.getPhonenumber());
+ syncGoUser.setLastIp(user.getLoginIp());
+ syncGoUser.setRemark(user.getRemark());
+ syncGoUser.setAvatar(user.getAvatar());
+ syncGoUser.setStatus(Objects.equals(user.getStatus(), "正常") ?0:1);
+ ResponseEntity response = restTemplate.postForEntity(url, syncGoUser, String.class);
+ // 检查响应状态码
+ if (response.getStatusCode().is2xxSuccessful()) {
+ System.out.println("响应内容:" + response.getBody());
+ } else {
+ System.out.println("请求失败,状态码:" + response.getStatusCode());
+ }
+ return true;
+ }
+
/**
* 修改用户头像
*
diff --git a/ruoyi-modules/ruoyi-system/src/main/kotlin/com/ruoyi/system/controller/inner/InnerSysUserController.kt b/ruoyi-modules/ruoyi-system/src/main/kotlin/com/ruoyi/system/controller/inner/InnerSysUserController.kt
index 18d47c165..e125fa8a7 100644
--- a/ruoyi-modules/ruoyi-system/src/main/kotlin/com/ruoyi/system/controller/inner/InnerSysUserController.kt
+++ b/ruoyi-modules/ruoyi-system/src/main/kotlin/com/ruoyi/system/controller/inner/InnerSysUserController.kt
@@ -141,7 +141,9 @@ open class InnerSysUserController : BaseController() {
originUser.avatar = targetUser.avatar ?: originUser.avatar
originUser.sex = targetUser.sex ?: originUser.sex
originUser.updateBy = originUser.userName
- originUser.sysUserAccount = loginUser.sysUser.sysUserAccount.apply { this.userId = originUser.userId }
+ if (loginUser.sysUser.sysUserAccount != null){
+ originUser.sysUserAccount = loginUser.sysUser.sysUserAccount.apply { this.userId = originUser.userId }
+ }
userService.updateUser(originUser)
// 更新缓存用户信息
tokenService.setLoginUser(loginUser)
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/KSysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/KSysUserMapper.xml
index 50511d346..fb8493266 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/KSysUserMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/KSysUserMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
+
@@ -25,7 +25,7 @@
-
+
@@ -44,7 +44,7 @@
-
+
@@ -54,7 +54,7 @@
-
+
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
index b4fef50d7..e3f22b4ca 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
@@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
+
@@ -33,12 +33,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-