cleanup code

This commit is contained in:
ls
2025-07-09 23:32:49 +08:00
parent f8421681cc
commit 8750c279eb
31 changed files with 4754 additions and 4744 deletions

View File

@@ -26,10 +26,10 @@
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot3</groupId>
<artifactId>hibernate-re</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.jeecgframework.boot3</groupId>-->
<!-- <artifactId>hibernate-re</artifactId>-->
<!-- </dependency>-->
<!-- 引入分布式锁依赖 -->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
@@ -37,20 +37,20 @@
<version>3.7.0</version>
</dependency>
<!-- 企业微信/钉钉 api -->
<dependency>
<groupId>org.jeecgframework</groupId>
<artifactId>jeewx-api</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.jeecgframework</groupId>-->
<!-- <artifactId>jeewx-api</artifactId>-->
<!-- </dependency>-->
<!-- 积木报表 -->
<dependency>
<groupId>org.jeecgframework.jimureport</groupId>
<artifactId>jimureport-spring-boot3-starter-fastjson2</artifactId>
</dependency>
<dependency>
<groupId>org.jeecgframework.jimureport</groupId>
<artifactId>drag-free-springboot3</artifactId>
<version>1.1.2</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.jeecgframework.jimureport</groupId>-->
<!-- <artifactId>jimureport-spring-boot3-starter-fastjson2</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.jeecgframework.jimureport</groupId>-->
<!-- <artifactId>drag-free-springboot3</artifactId>-->
<!-- <version>1.1.2</version>-->
<!-- </dependency>-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
@@ -60,17 +60,17 @@
<artifactId>hutool-http</artifactId>
</dependency>
<!-- chatgpt -->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-starter3-chatgpt</artifactId>
<version>3.7.0</version>
<exclusions>
<exclusion>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.jeecgframework.boot</groupId>-->
<!-- <artifactId>jeecg-boot-starter3-chatgpt</artifactId>-->
<!-- <version>3.7.0</version>-->
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <groupId>cn.hutool</groupId>-->
<!-- <artifactId>hutool-all</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
<!-- </dependency>-->
<dependency>
<!-- jsoup HTML parser library @ https://jsoup.org/ -->
<groupId>org.jsoup</groupId>

View File

@@ -3,7 +3,7 @@ package org.jeecg.config.init;
import com.alibaba.druid.filter.config.ConfigTools;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecgframework.codegenerate.database.CodegenDatasourceConfig;
//import org.jeecgframework.codegenerate.database.CodegenDatasourceConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -46,7 +46,7 @@ public class CodeGenerateDbConfig {
log.error(" 代码生成器数据库连接,数据库密码解密失败!");
}
}
CodegenDatasourceConfig.initDbConfig(driverClassName, url, username, password);
//CodegenDatasourceConfig.initDbConfig(driverClassName, url, username, password);
log.info(" Init CodeGenerate Config [ Get Db Config From application.yml ] ");
}
return null;

View File

@@ -1,105 +1,105 @@
package org.jeecg.config.jimureport;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.dto.LogDTO;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.base.service.BaseCommonService;
import org.jeecg.modules.drag.service.IOnlDragExternalService;
import org.jeecg.modules.drag.vo.DragDictModel;
import org.jeecg.modules.drag.vo.DragLogDTO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description: 字典处理
* @Author: lsq
* @Date:2023-01-09
* @Version:V1.0
*/
@Slf4j
@Service("onlDragExternalServiceImpl")
public class JimuDragExternalServiceImpl implements IOnlDragExternalService {
@Autowired
@Lazy
private BaseCommonService baseCommonService;
@Autowired
@Lazy
private ISysBaseAPI sysBaseApi;
/**
* 根据多个字典code查询多个字典项
*
* @param codeList
* @return key = dictCode value=对应的字典项
*/
@Override
public Map<String, List<DragDictModel>> getManyDictItems(List<String> codeList) {
Map<String, List<DragDictModel>> manyDragDictItems = new HashMap<>();
Map<String, List<DictModel>> dictItemsMap = sysBaseApi.getManyDictItems(codeList);
dictItemsMap.forEach((k, v) -> {
List<DragDictModel> dictItems = new ArrayList<>();
v.forEach(dictItem -> {
DragDictModel dictModel = new DragDictModel();
BeanUtils.copyProperties(dictItem, dictModel);
dictItems.add(dictModel);
});
manyDragDictItems.put(k, dictItems);
});
return manyDragDictItems;
}
/**
* @param dictCode
* @return
*/
@Override
public List<DragDictModel> getDictItems(String dictCode) {
List<DragDictModel> dictItems = new ArrayList<>();
if (oConvertUtils.isNotEmpty(dictCode)) {
List<DictModel> dictItemsList = sysBaseApi.getDictItems(dictCode);
dictItemsList.forEach(dictItem -> {
DragDictModel dictModel = new DragDictModel();
BeanUtils.copyProperties(dictItem, dictModel);
dictItems.add(dictModel);
});
}
return dictItems;
}
/**
* 添加日志
*
* @param dragLogDTO
*/
@Override
public void addLog(DragLogDTO dragLogDTO) {
if (oConvertUtils.isNotEmpty(dragLogDTO)) {
LogDTO dto = new LogDTO();
BeanUtils.copyProperties(dragLogDTO, dto);
baseCommonService.addLog(dto);
}
}
/**
* 保存日志
*
* @param logMsg
* @param logType
* @param operateType
*/
@Override
public void addLog(String logMsg, int logType, int operateType) {
baseCommonService.addLog(logMsg, logType, operateType);
}
}
//package org.jeecg.config.jimureport;
//
//import lombok.extern.slf4j.Slf4j;
//import org.jeecg.common.api.dto.LogDTO;
//import org.jeecg.common.system.api.ISysBaseAPI;
//import org.jeecg.common.system.vo.DictModel;
//import org.jeecg.common.util.oConvertUtils;
//import org.jeecg.modules.base.service.BaseCommonService;
//import org.jeecg.modules.drag.service.IOnlDragExternalService;
//import org.jeecg.modules.drag.vo.DragDictModel;
//import org.jeecg.modules.drag.vo.DragLogDTO;
//import org.springframework.beans.BeanUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Lazy;
//import org.springframework.stereotype.Service;
//
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
///**
// * @Description: 字典处理
// * @Author: lsq
// * @Date:2023-01-09
// * @Version:V1.0
// */
//@Slf4j
//@Service("onlDragExternalServiceImpl")
//public class JimuDragExternalServiceImpl implements IOnlDragExternalService {
//
// @Autowired
// @Lazy
// private BaseCommonService baseCommonService;
//
// @Autowired
// @Lazy
// private ISysBaseAPI sysBaseApi;
//
// /**
// * 根据多个字典code查询多个字典项
// *
// * @param codeList
// * @return key = dictCode value=对应的字典项
// */
// @Override
// public Map<String, List<DragDictModel>> getManyDictItems(List<String> codeList) {
// Map<String, List<DragDictModel>> manyDragDictItems = new HashMap<>();
// Map<String, List<DictModel>> dictItemsMap = sysBaseApi.getManyDictItems(codeList);
// dictItemsMap.forEach((k, v) -> {
// List<DragDictModel> dictItems = new ArrayList<>();
// v.forEach(dictItem -> {
// DragDictModel dictModel = new DragDictModel();
// BeanUtils.copyProperties(dictItem, dictModel);
// dictItems.add(dictModel);
// });
// manyDragDictItems.put(k, dictItems);
// });
// return manyDragDictItems;
// }
//
// /**
// * @param dictCode
// * @return
// */
// @Override
// public List<DragDictModel> getDictItems(String dictCode) {
// List<DragDictModel> dictItems = new ArrayList<>();
// if (oConvertUtils.isNotEmpty(dictCode)) {
// List<DictModel> dictItemsList = sysBaseApi.getDictItems(dictCode);
// dictItemsList.forEach(dictItem -> {
// DragDictModel dictModel = new DragDictModel();
// BeanUtils.copyProperties(dictItem, dictModel);
// dictItems.add(dictModel);
// });
// }
// return dictItems;
// }
//
// /**
// * 添加日志
// *
// * @param dragLogDTO
// */
// @Override
// public void addLog(DragLogDTO dragLogDTO) {
// if (oConvertUtils.isNotEmpty(dragLogDTO)) {
// LogDTO dto = new LogDTO();
// BeanUtils.copyProperties(dragLogDTO, dto);
// baseCommonService.addLog(dto);
// }
// }
//
// /**
// * 保存日志
// *
// * @param logMsg
// * @param logType
// * @param operateType
// */
// @Override
// public void addLog(String logMsg, int logType, int operateType) {
// baseCommonService.addLog(logMsg, logType, operateType);
// }
//}

View File

@@ -1,82 +1,82 @@
package org.jeecg.config.jimureport;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.system.vo.SysUserCacheInfo;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.common.util.TokenUtils;
import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* 自定义积木报表鉴权(如果不进行自定义,则所有请求不做权限控制)
* * 1.自定义获取登录token
* * 2.自定义获取登录用户
*
* @author: jeecg-boot
*/
@Slf4j
@Component
public class JimuReportTokenService implements JmReportTokenServiceI {
@Autowired
private SysBaseApiImpl sysBaseApi;
@Autowired
@Lazy
private RedisUtil redisUtil;
@Override
public String getToken(HttpServletRequest request) {
return TokenUtils.getTokenByRequest(request);
}
@Override
public String getUsername(String token) {
return JwtUtil.getUsername(token);
}
@Override
public String[] getRoles(String token) {
String username = JwtUtil.getUsername(token);
Set roles = sysBaseApi.getUserRoleSet(username);
if (CollectionUtils.isEmpty(roles)) {
return null;
}
return (String[]) roles.toArray(new String[roles.size()]);
}
@Override
public Boolean verifyToken(String token) {
return TokenUtils.verifyToken(token, sysBaseApi, redisUtil);
}
@Override
public Map<String, Object> getUserInfo(String token) {
Map<String, Object> map = new HashMap(5);
String username = JwtUtil.getUsername(token);
//此处通过token只能拿到一个信息 用户账号 后面的就是根据账号获取其他信息 查询数据或是走redis 用户根据自身业务可自定义
SysUserCacheInfo userInfo = null;
try {
userInfo = sysBaseApi.getCacheUser(username);
} catch (Exception e) {
log.error("获取用户信息异常:" + e.getMessage());
return map;
}
//设置账号名
map.put(SYS_USER_CODE, userInfo.getSysUserCode());
//设置部门编码
map.put(SYS_ORG_CODE, userInfo.getSysOrgCode());
// 将所有信息存放至map 解析sql/api会根据map的键值解析
return map;
}
}
//package org.jeecg.config.jimureport;
//
//import jakarta.servlet.http.HttpServletRequest;
//import lombok.extern.slf4j.Slf4j;
//import org.jeecg.common.system.util.JwtUtil;
//import org.jeecg.common.system.vo.SysUserCacheInfo;
//import org.jeecg.common.util.RedisUtil;
//import org.jeecg.common.util.TokenUtils;
////import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
//import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Lazy;
//import org.springframework.stereotype.Component;
//import org.springframework.util.CollectionUtils;
//
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Set;
//
///**
// * 自定义积木报表鉴权(如果不进行自定义,则所有请求不做权限控制)
// * * 1.自定义获取登录token
// * * 2.自定义获取登录用户
// *
// * @author: jeecg-boot
// */
//
//
//@Slf4j
//@Component
//public class JimuReportTokenService implements JmReportTokenServiceI {
// @Autowired
// private SysBaseApiImpl sysBaseApi;
// @Autowired
// @Lazy
// private RedisUtil redisUtil;
//
// @Override
// public String getToken(HttpServletRequest request) {
// return TokenUtils.getTokenByRequest(request);
// }
//
// @Override
// public String getUsername(String token) {
// return JwtUtil.getUsername(token);
// }
//
// @Override
// public String[] getRoles(String token) {
// String username = JwtUtil.getUsername(token);
// Set roles = sysBaseApi.getUserRoleSet(username);
// if (CollectionUtils.isEmpty(roles)) {
// return null;
// }
// return (String[]) roles.toArray(new String[roles.size()]);
// }
//
// @Override
// public Boolean verifyToken(String token) {
// return TokenUtils.verifyToken(token, sysBaseApi, redisUtil);
// }
//
// @Override
// public Map<String, Object> getUserInfo(String token) {
// Map<String, Object> map = new HashMap(5);
// String username = JwtUtil.getUsername(token);
// //此处通过token只能拿到一个信息 用户账号 后面的就是根据账号获取其他信息 查询数据或是走redis 用户根据自身业务可自定义
// SysUserCacheInfo userInfo = null;
// try {
// userInfo = sysBaseApi.getCacheUser(username);
// } catch (Exception e) {
// log.error("获取用户信息异常:" + e.getMessage());
// return map;
// }
// //设置账号名
// map.put(SYS_USER_CODE, userInfo.getSysUserCode());
// //设置部门编码
// map.put(SYS_ORG_CODE, userInfo.getSysOrgCode());
// // 将所有信息存放至map 解析sql/api会根据map的键值解析
// return map;
// }
//}

View File

@@ -1,106 +1,106 @@
package org.jeecg.modules.cas.util;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.cert.X509Certificate;
/**
* @Description: CasServiceUtil
* @author: jeecg-boot
*/
public class CasServiceUtil {
public static void main(String[] args) {
String serviceUrl = "https://cas.8f8.com.cn:8443/cas/p3/serviceValidate";
String service = "http://localhost:3003/user/login";
String ticket = "ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3";
String res = getStValidate(serviceUrl, ticket, service);
System.out.println("---------res-----" + res);
}
/**
* 验证ST
*/
public static String getStValidate(String url, String st, String service) {
try {
url = url + "?service=" + service + "&ticket=" + st;
CloseableHttpClient httpclient = createHttpClientWithNoSsl();
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
String res = readResponse(response);
return res == null ? null : (res == "" ? null : res);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 读取 response body 内容为字符串
*
* @param response
* @return
* @throws IOException
*/
private static String readResponse(HttpResponse response) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String result = new String();
String line;
while ((line = in.readLine()) != null) {
result += line;
}
return result;
}
/**
* 创建模拟客户端(针对 https 客户端禁用 SSL 验证)
*
* @param cookieStore 缓存的 Cookies 信息
* @return
* @throws Exception
*/
private static CloseableHttpClient createHttpClientWithNoSsl() throws Exception {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
// don't check
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
// don't check
}
}
};
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, trustAllCerts, null);
LayeredConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(ctx);
return HttpClients.custom()
.setSSLSocketFactory(sslSocketFactory)
.build();
}
}
//package org.jeecg.modules.cas.util;
//
//import org.apache.http.HttpResponse;
//import org.apache.http.client.methods.HttpGet;
//import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
//import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.apache.http.impl.client.HttpClients;
//
//import javax.net.ssl.SSLContext;
//import javax.net.ssl.TrustManager;
//import javax.net.ssl.X509TrustManager;
//import java.io.BufferedReader;
//import java.io.IOException;
//import java.io.InputStreamReader;
//import java.security.cert.X509Certificate;
//
///**
// * @Description: CasServiceUtil
// * @author: jeecg-boot
// */
//public class CasServiceUtil {
//
// public static void main(String[] args) {
// String serviceUrl = "https://cas.8f8.com.cn:8443/cas/p3/serviceValidate";
// String service = "http://localhost:3003/user/login";
// String ticket = "ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3";
// String res = getStValidate(serviceUrl, ticket, service);
//
// System.out.println("---------res-----" + res);
// }
//
//
// /**
// * 验证ST
// */
// public static String getStValidate(String url, String st, String service) {
// try {
// url = url + "?service=" + service + "&ticket=" + st;
// CloseableHttpClient httpclient = createHttpClientWithNoSsl();
// HttpGet httpget = new HttpGet(url);
// HttpResponse response = httpclient.execute(httpget);
// String res = readResponse(response);
// return res == null ? null : (res == "" ? null : res);
// } catch (Exception e) {
// e.printStackTrace();
// }
// return "";
// }
//
//
// /**
// * 读取 response body 内容为字符串
// *
// * @param response
// * @return
// * @throws IOException
// */
// private static String readResponse(HttpResponse response) throws IOException {
// BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
// String result = new String();
// String line;
// while ((line = in.readLine()) != null) {
// result += line;
// }
// return result;
// }
//
//
// /**
// * 创建模拟客户端(针对 https 客户端禁用 SSL 验证)
// *
// * @param cookieStore 缓存的 Cookies 信息
// * @return
// * @throws Exception
// */
// private static CloseableHttpClient createHttpClientWithNoSsl() throws Exception {
// // Create a trust manager that does not validate certificate chains
// TrustManager[] trustAllCerts = new TrustManager[]{
// new X509TrustManager() {
// @Override
// public X509Certificate[] getAcceptedIssuers() {
// return null;
// }
//
// @Override
// public void checkClientTrusted(X509Certificate[] certs, String authType) {
// // don't check
// }
//
// @Override
// public void checkServerTrusted(X509Certificate[] certs, String authType) {
// // don't check
// }
// }
// };
//
// SSLContext ctx = SSLContext.getInstance("TLS");
// ctx.init(null, trustAllCerts, null);
// LayeredConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(ctx);
// return HttpClients.custom()
// .setSSLSocketFactory(sslSocketFactory)
// .build();
// }
//
//}

View File

@@ -1,37 +1,37 @@
package org.jeecg.modules.message.handle.impl;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.modules.message.handle.ISendMsgHandle;
import org.jeecg.modules.system.service.impl.ThirdAppDingtalkServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Description: 发钉钉消息模板
* @author: jeecg-boot
*/
@Slf4j
@Component("ddSendMsgHandle")
public class DdSendMsgHandle implements ISendMsgHandle {
@Autowired
private ThirdAppDingtalkServiceImpl dingtalkService;
@Override
public void sendMsg(String esReceiver, String esTitle, String esContent) {
log.info("发微信消息模板");
MessageDTO messageDTO = new MessageDTO();
messageDTO.setToUser(esReceiver);
messageDTO.setTitle(esTitle);
messageDTO.setContent(esContent);
messageDTO.setToAll(false);
sendMessage(messageDTO);
}
@Override
public void sendMessage(MessageDTO messageDTO) {
dingtalkService.sendMessage(messageDTO, true);
}
}
//package org.jeecg.modules.message.handle.impl;
//
//import lombok.extern.slf4j.Slf4j;
//import org.jeecg.common.api.dto.message.MessageDTO;
//import org.jeecg.modules.message.handle.ISendMsgHandle;
//import org.jeecg.modules.system.service.impl.ThirdAppDingtalkServiceImpl;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
///**
// * @Description: 发钉钉消息模板
// * @author: jeecg-boot
// */
//@Slf4j
//@Component("ddSendMsgHandle")
//public class DdSendMsgHandle implements ISendMsgHandle {
//
// @Autowired
// private ThirdAppDingtalkServiceImpl dingtalkService;
//
// @Override
// public void sendMsg(String esReceiver, String esTitle, String esContent) {
// log.info("发微信消息模板");
// MessageDTO messageDTO = new MessageDTO();
// messageDTO.setToUser(esReceiver);
// messageDTO.setTitle(esTitle);
// messageDTO.setContent(esContent);
// messageDTO.setToAll(false);
// sendMessage(messageDTO);
// }
//
// @Override
// public void sendMessage(MessageDTO messageDTO) {
// dingtalkService.sendMessage(messageDTO, true);
// }
//
//}

View File

@@ -1,219 +1,219 @@
package org.jeecg.modules.message.handle.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.StaticConfig;
import org.jeecg.modules.message.handle.ISendMsgHandle;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Set;
/**
* @Description: 邮箱发送信息
* @author: jeecg-boot
*/
@Slf4j
@Component("emailSendMsgHandle")
public class EmailSendMsgHandle implements ISendMsgHandle {
static String emailFrom;
public static void setEmailFrom(String emailFrom) {
EmailSendMsgHandle.emailFrom = emailFrom;
}
@Autowired
SysUserMapper sysUserMapper;
@Autowired
private RedisUtil redisUtil;
/**
* 真实姓名变量
*/
private static final String realNameExp = "{REALNAME}";
@Override
public void sendMsg(String esReceiver, String esTitle, String esContent) {
JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender");
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = null;
//update-begin-authortaoyan date:20200811 for:配置类数据获取
if (oConvertUtils.isEmpty(emailFrom)) {
StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class);
setEmailFrom(staticConfig.getEmailFrom());
}
//update-end-authortaoyan date:20200811 for:配置类数据获取
try {
helper = new MimeMessageHelper(message, true);
// 设置发送方邮箱地址
helper.setFrom(emailFrom);
helper.setTo(esReceiver);
helper.setSubject(esTitle);
helper.setText(esContent, true);
mailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
@Override
public void sendMessage(MessageDTO messageDTO) {
String[] arr = messageDTO.getToUser().split(",");
LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<SysUser>().in(SysUser::getUsername, arr);
List<SysUser> list = sysUserMapper.selectList(query);
String content = messageDTO.getContent();
String title = messageDTO.getTitle();
for (SysUser user : list) {
String email = user.getEmail();
if (ObjectUtils.isEmpty(email)) {
continue;
}
content = replaceContent(user, content);
log.info("邮件内容:" + content);
sendMsg(email, title, content);
}
//update-begin-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱
Set<String> toEmailList = messageDTO.getToEmailList();
if (toEmailList != null && toEmailList.size() > 0) {
for (String email : toEmailList) {
if (ObjectUtils.isEmpty(email)) {
continue;
}
log.info("邮件内容:" + content);
sendMsg(email, title, content);
}
}
//update-end-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱
//发送给抄送人
sendMessageToCopyUser(messageDTO);
}
/**
* 发送邮件给抄送人
*
* @param messageDTO
*/
public void sendMessageToCopyUser(MessageDTO messageDTO) {
String copyToUser = messageDTO.getCopyToUser();
if (ObjectUtils.isNotEmpty(copyToUser)) {
LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<SysUser>().in(SysUser::getUsername, copyToUser.split(","));
List<SysUser> list = sysUserMapper.selectList(query);
String content = messageDTO.getContent();
String title = messageDTO.getTitle();
for (SysUser user : list) {
String email = user.getEmail();
if (ObjectUtils.isEmpty(email)) {
continue;
}
content = replaceContent(user, content);
log.info("邮件内容:" + content);
//update-begin-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱
sendEmail(email, content, title);
}
Set<String> ccEmailList = messageDTO.getCcEmailList();
if (ccEmailList != null && ccEmailList.size() > 0) {
for (String email : ccEmailList) {
if (ObjectUtils.isEmpty(email)) {
continue;
}
log.info("邮件内容:" + content);
sendEmail(email, content, title);
}
}
}
}
/**
* 发送邮件给抄送人调用
*
* @param email
* @param content
* @param title
*/
private void sendEmail(String email, String content, String title) {
JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender");
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = null;
if (oConvertUtils.isEmpty(emailFrom)) {
StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class);
setEmailFrom(staticConfig.getEmailFrom());
}
try {
helper = new MimeMessageHelper(message, true);
// 设置发送方邮箱地址
helper.setFrom(emailFrom);
helper.setTo(email);
//设置抄送人
helper.setCc(email);
helper.setSubject(title);
helper.setText(content, true);
mailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
//update-end-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱
/**
* 替换邮件内容变量
*
* @param user
* @param content
* @return
*/
private String replaceContent(SysUser user, String content) {
if (content.indexOf(realNameExp) > 0) {
content = content.replace("$" + realNameExp, user.getRealname()).replace(realNameExp, user.getRealname());
}
if (content.indexOf(CommonConstant.LOGIN_TOKEN) > 0) {
String token = getToken(user);
try {
content = content.replace(CommonConstant.LOGIN_TOKEN, URLEncoder.encode(token, "UTF-8"));
} catch (UnsupportedEncodingException e) {
log.error("邮件消息token编码失败", e.getMessage());
}
}
return content;
}
/**
* 获取token
*
* @param user
* @return
*/
private String getToken(SysUser user) {
// 生成token
String token = JwtUtil.sign(user.getUsername(), user.getPassword());
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
// 设置超时时间 1个小时
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 1 / 1000);
return token;
}
}
//package org.jeecg.modules.message.handle.impl;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import jakarta.mail.MessagingException;
//import jakarta.mail.internet.MimeMessage;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.ObjectUtils;
//import org.jeecg.common.api.dto.message.MessageDTO;
//import org.jeecg.common.constant.CommonConstant;
//import org.jeecg.common.system.util.JwtUtil;
//import org.jeecg.common.util.RedisUtil;
//import org.jeecg.common.util.SpringContextUtils;
//import org.jeecg.common.util.oConvertUtils;
//import org.jeecg.config.StaticConfig;
//import org.jeecg.modules.message.handle.ISendMsgHandle;
//import org.jeecg.modules.system.entity.SysUser;
//import org.jeecg.modules.system.mapper.SysUserMapper;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.mail.javamail.JavaMailSender;
//import org.springframework.mail.javamail.MimeMessageHelper;
//import org.springframework.stereotype.Component;
//
//import java.io.UnsupportedEncodingException;
//import java.net.URLEncoder;
//import java.util.List;
//import java.util.Set;
//
///**
// * @Description: 邮箱发送信息
// * @author: jeecg-boot
// */
//@Slf4j
//@Component("emailSendMsgHandle")
//public class EmailSendMsgHandle implements ISendMsgHandle {
// static String emailFrom;
//
// public static void setEmailFrom(String emailFrom) {
// EmailSendMsgHandle.emailFrom = emailFrom;
// }
//
// @Autowired
// SysUserMapper sysUserMapper;
//
// @Autowired
// private RedisUtil redisUtil;
//
// /**
// * 真实姓名变量
// */
// private static final String realNameExp = "{REALNAME}";
//
//
// @Override
// public void sendMsg(String esReceiver, String esTitle, String esContent) {
// JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender");
// MimeMessage message = mailSender.createMimeMessage();
// MimeMessageHelper helper = null;
// //update-begin-authortaoyan date:20200811 for:配置类数据获取
// if (oConvertUtils.isEmpty(emailFrom)) {
// StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class);
// setEmailFrom(staticConfig.getEmailFrom());
// }
// //update-end-authortaoyan date:20200811 for:配置类数据获取
// try {
// helper = new MimeMessageHelper(message, true);
// // 设置发送方邮箱地址
// helper.setFrom(emailFrom);
// helper.setTo(esReceiver);
// helper.setSubject(esTitle);
// helper.setText(esContent, true);
// mailSender.send(message);
// } catch (MessagingException e) {
// e.printStackTrace();
// }
//
// }
//
// @Override
// public void sendMessage(MessageDTO messageDTO) {
// String[] arr = messageDTO.getToUser().split(",");
// LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<SysUser>().in(SysUser::getUsername, arr);
// List<SysUser> list = sysUserMapper.selectList(query);
// String content = messageDTO.getContent();
// String title = messageDTO.getTitle();
// for (SysUser user : list) {
// String email = user.getEmail();
// if (ObjectUtils.isEmpty(email)) {
// continue;
// }
// content = replaceContent(user, content);
// log.info("邮件内容:" + content);
// sendMsg(email, title, content);
// }
//
// //update-begin-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱
// Set<String> toEmailList = messageDTO.getToEmailList();
// if (toEmailList != null && toEmailList.size() > 0) {
// for (String email : toEmailList) {
// if (ObjectUtils.isEmpty(email)) {
// continue;
// }
// log.info("邮件内容:" + content);
// sendMsg(email, title, content);
// }
// }
// //update-end-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱
//
// //发送给抄送人
// sendMessageToCopyUser(messageDTO);
// }
//
// /**
// * 发送邮件给抄送人
// *
// * @param messageDTO
// */
// public void sendMessageToCopyUser(MessageDTO messageDTO) {
// String copyToUser = messageDTO.getCopyToUser();
// if (ObjectUtils.isNotEmpty(copyToUser)) {
// LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<SysUser>().in(SysUser::getUsername, copyToUser.split(","));
// List<SysUser> list = sysUserMapper.selectList(query);
// String content = messageDTO.getContent();
// String title = messageDTO.getTitle();
//
// for (SysUser user : list) {
// String email = user.getEmail();
// if (ObjectUtils.isEmpty(email)) {
// continue;
// }
// content = replaceContent(user, content);
// log.info("邮件内容:" + content);
//
// //update-begin-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱
// sendEmail(email, content, title);
// }
//
// Set<String> ccEmailList = messageDTO.getCcEmailList();
// if (ccEmailList != null && ccEmailList.size() > 0) {
// for (String email : ccEmailList) {
// if (ObjectUtils.isEmpty(email)) {
// continue;
// }
// log.info("邮件内容:" + content);
// sendEmail(email, content, title);
// }
// }
//
// }
// }
//
// /**
// * 发送邮件给抄送人调用
// *
// * @param email
// * @param content
// * @param title
// */
// private void sendEmail(String email, String content, String title) {
// JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender");
// MimeMessage message = mailSender.createMimeMessage();
// MimeMessageHelper helper = null;
// if (oConvertUtils.isEmpty(emailFrom)) {
// StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class);
// setEmailFrom(staticConfig.getEmailFrom());
// }
// try {
// helper = new MimeMessageHelper(message, true);
// // 设置发送方邮箱地址
// helper.setFrom(emailFrom);
// helper.setTo(email);
// //设置抄送人
// helper.setCc(email);
// helper.setSubject(title);
// helper.setText(content, true);
// mailSender.send(message);
// } catch (MessagingException e) {
// e.printStackTrace();
// }
// }
// //update-end-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱
//
//
// /**
// * 替换邮件内容变量
// *
// * @param user
// * @param content
// * @return
// */
// private String replaceContent(SysUser user, String content) {
// if (content.indexOf(realNameExp) > 0) {
// content = content.replace("$" + realNameExp, user.getRealname()).replace(realNameExp, user.getRealname());
// }
// if (content.indexOf(CommonConstant.LOGIN_TOKEN) > 0) {
// String token = getToken(user);
// try {
// content = content.replace(CommonConstant.LOGIN_TOKEN, URLEncoder.encode(token, "UTF-8"));
// } catch (UnsupportedEncodingException e) {
// log.error("邮件消息token编码失败", e.getMessage());
// }
// }
// return content;
// }
//
// /**
// * 获取token
// *
// * @param user
// * @return
// */
// private String getToken(SysUser user) {
// // 生成token
// String token = JwtUtil.sign(user.getUsername(), user.getPassword());
// redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
// // 设置超时时间 1个小时
// redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 1 / 1000);
// return token;
// }
//}

View File

@@ -1,37 +1,37 @@
package org.jeecg.modules.message.handle.impl;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.modules.message.handle.ISendMsgHandle;
import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Description: 发企业微信消息模板
* @author: jeecg-boot
*/
@Slf4j
@Component("qywxSendMsgHandle")
public class QywxSendMsgHandle implements ISendMsgHandle {
@Autowired
private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
@Override
public void sendMsg(String esReceiver, String esTitle, String esContent) {
log.info("发微信消息模板");
MessageDTO messageDTO = new MessageDTO();
messageDTO.setToUser(esReceiver);
messageDTO.setTitle(esTitle);
messageDTO.setContent(esContent);
messageDTO.setToAll(false);
sendMessage(messageDTO);
}
@Override
public void sendMessage(MessageDTO messageDTO) {
wechatEnterpriseService.sendMessage(messageDTO, true);
}
}
//package org.jeecg.modules.message.handle.impl;
//
//import lombok.extern.slf4j.Slf4j;
//import org.jeecg.common.api.dto.message.MessageDTO;
//import org.jeecg.modules.message.handle.ISendMsgHandle;
//import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
///**
// * @Description: 发企业微信消息模板
// * @author: jeecg-boot
// */
//@Slf4j
//@Component("qywxSendMsgHandle")
//public class QywxSendMsgHandle implements ISendMsgHandle {
//
// @Autowired
// private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
//
// @Override
// public void sendMsg(String esReceiver, String esTitle, String esContent) {
// log.info("发微信消息模板");
// MessageDTO messageDTO = new MessageDTO();
// messageDTO.setToUser(esReceiver);
// messageDTO.setTitle(esTitle);
// messageDTO.setContent(esContent);
// messageDTO.setToAll(false);
// sendMessage(messageDTO);
// }
//
// @Override
// public void sendMessage(MessageDTO messageDTO) {
// wechatEnterpriseService.sendMessage(messageDTO, true);
// }
//
//}

View File

@@ -1,69 +1,69 @@
package org.jeecg.modules.system.cache;
import jakarta.annotation.PostConstruct;
import me.zhyd.oauth.cache.AuthCacheConfig;
import me.zhyd.oauth.cache.AuthStateCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import java.util.concurrent.TimeUnit;
public class AuthStateRedisCache implements AuthStateCache {
@Autowired
private RedisTemplate<String, String> redisTemplate;
private ValueOperations<String, String> valueOperations;
@PostConstruct
public void init() {
valueOperations = redisTemplate.opsForValue();
}
/**
* 存入缓存默认3分钟
*
* @param key 缓存key
* @param value 缓存内容
*/
@Override
public void cache(String key, String value) {
valueOperations.set(key, value, AuthCacheConfig.timeout, TimeUnit.MILLISECONDS);
}
/**
* 存入缓存
*
* @param key 缓存key
* @param value 缓存内容
* @param timeout 指定缓存过期时间(毫秒)
*/
@Override
public void cache(String key, String value, long timeout) {
valueOperations.set(key, value, timeout, TimeUnit.MILLISECONDS);
}
/**
* 获取缓存内容
*
* @param key 缓存key
* @return 缓存内容
*/
@Override
public String get(String key) {
return valueOperations.get(key);
}
/**
* 是否存在key如果对应key的value值已过期也返回false
*
* @param key 缓存key
* @return true存在key并且value没过期falsekey不存在或者已过期
*/
@Override
public boolean containsKey(String key) {
return redisTemplate.hasKey(key);
}
}
//package org.jeecg.modules.system.cache;
//
//import jakarta.annotation.PostConstruct;
//import me.zhyd.oauth.cache.AuthCacheConfig;
//import me.zhyd.oauth.cache.AuthStateCache;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.core.ValueOperations;
//
//import java.util.concurrent.TimeUnit;
//
//
//public class AuthStateRedisCache implements AuthStateCache {
//
// @Autowired
// private RedisTemplate<String, String> redisTemplate;
//
// private ValueOperations<String, String> valueOperations;
//
// @PostConstruct
// public void init() {
// valueOperations = redisTemplate.opsForValue();
// }
//
// /**
// * 存入缓存默认3分钟
// *
// * @param key 缓存key
// * @param value 缓存内容
// */
// @Override
// public void cache(String key, String value) {
// valueOperations.set(key, value, AuthCacheConfig.timeout, TimeUnit.MILLISECONDS);
// }
//
// /**
// * 存入缓存
// *
// * @param key 缓存key
// * @param value 缓存内容
// * @param timeout 指定缓存过期时间(毫秒)
// */
// @Override
// public void cache(String key, String value, long timeout) {
// valueOperations.set(key, value, timeout, TimeUnit.MILLISECONDS);
// }
//
// /**
// * 获取缓存内容
// *
// * @param key 缓存key
// * @return 缓存内容
// */
// @Override
// public String get(String key) {
// return valueOperations.get(key);
// }
//
// /**
// * 是否存在key如果对应key的value值已过期也返回false
// *
// * @param key 缓存key
// * @return true存在key并且value没过期falsekey不存在或者已过期
// */
// @Override
// public boolean containsKey(String key) {
// return redisTemplate.hasKey(key);
// }
//}

View File

@@ -1,15 +1,15 @@
package org.jeecg.modules.system.config;
import me.zhyd.oauth.cache.AuthStateCache;
import org.jeecg.modules.system.cache.AuthStateRedisCache;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AuthStateConfiguration {
@Bean
public AuthStateCache authStateCache() {
return new AuthStateRedisCache();
}
}
//package org.jeecg.modules.system.config;
//
//import me.zhyd.oauth.cache.AuthStateCache;
//import org.jeecg.modules.system.cache.AuthStateRedisCache;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//@Configuration
//public class AuthStateConfiguration {
//
// @Bean
// public AuthStateCache authStateCache() {
// return new AuthStateRedisCache();
// }
//}

View File

@@ -2,7 +2,7 @@ package org.jeecg.modules.system.controller;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.exceptions.ClientException;
//import com.aliyuncs.exceptions.ClientException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import io.swagger.v3.oas.annotations.Operation;
@@ -294,101 +294,101 @@ public class LoginController {
@PostMapping(value = "/sms")
public Result<String> sms(@RequestBody JSONObject jsonObject, HttpServletRequest request) {
Result<String> result = new Result<String>();
String clientIp = IpUtils.getIpAddr(request);
String mobile = jsonObject.get("mobile").toString();
//手机号模式 登录模式: "2" 注册模式: "1"
String smsmode = jsonObject.get("smsmode").toString();
log.info("-------- IP:{}, 手机号:{},获取绑定验证码", clientIp, mobile);
if (oConvertUtils.isEmpty(mobile)) {
result.setMessage("手机号不允许为空!");
result.setSuccess(false);
return result;
}
//update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + mobile;
Object object = redisUtil.get(redisKey);
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
if (object != null) {
result.setMessage("验证码10分钟内仍然有效");
result.setSuccess(false);
return result;
}
//-------------------------------------------------------------------------------------
//增加 check防止恶意刷短信接口
if (!DySmsLimit.canSendSms(clientIp)) {
log.warn("--------[警告] IP地址:{}, 短信接口请求太多-------", clientIp);
result.setMessage("短信接口请求太多,请稍后再试!");
result.setCode(CommonConstant.PHONE_SMS_FAIL_CODE);
result.setSuccess(false);
return result;
}
//-------------------------------------------------------------------------------------
//随机数
String captcha = RandomUtil.randomNumbers(6);
JSONObject obj = new JSONObject();
obj.put("code", captcha);
try {
boolean b = false;
//注册模板
if (CommonConstant.SMS_TPL_TYPE_1.equals(smsmode)) {
SysUser sysUser = sysUserService.getUserByPhone(mobile);
if (sysUser != null) {
result.error500(" 手机号已经注册,请直接登录!");
baseCommonService.addLog("手机号已经注册,请直接登录!", CommonConstant.LOG_TYPE_1, null);
return result;
}
b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.REGISTER_TEMPLATE_CODE);
} else {
//登录模式,校验用户有效性
SysUser sysUser = sysUserService.getUserByPhone(mobile);
result = sysUserService.checkUserIsEffective(sysUser);
if (!result.isSuccess()) {
String message = result.getMessage();
String userNotExist = "该用户不存在,请注册";
if (userNotExist.equals(message)) {
result.error500("该用户不存在或未绑定手机号");
}
return result;
}
/**
* smsmode 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板
*/
if (CommonConstant.SMS_TPL_TYPE_0.equals(smsmode)) {
//登录模板
b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.LOGIN_TEMPLATE_CODE);
} else if (CommonConstant.SMS_TPL_TYPE_2.equals(smsmode)) {
//忘记密码模板
b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE);
}
}
if (b == false) {
result.setMessage("短信验证码发送失败,请稍后重试");
result.setSuccess(false);
return result;
}
//update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
//验证码10分钟内有效
redisUtil.set(redisKey, captcha, 600);
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
//update-begin--Author:scott Date:20190812 forissues#391
//result.setResult(captcha);
//update-end--Author:scott Date:20190812 forissues#391
result.setSuccess(true);
} catch (ClientException e) {
e.printStackTrace();
result.error500(" 短信接口未配置,请联系管理员!");
return result;
}
//String clientIp = IpUtils.getIpAddr(request);
//String mobile = jsonObject.get("mobile").toString();
////手机号模式 登录模式: "2" 注册模式: "1"
//String smsmode = jsonObject.get("smsmode").toString();
//log.info("-------- IP:{}, 手机号:{},获取绑定验证码", clientIp, mobile);
//
//if (oConvertUtils.isEmpty(mobile)) {
// result.setMessage("手机号不允许为空!");
// result.setSuccess(false);
// return result;
//}
//
////update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
//String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + mobile;
//Object object = redisUtil.get(redisKey);
////update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
//
//if (object != null) {
// result.setMessage("验证码10分钟内仍然有效");
// result.setSuccess(false);
// return result;
//}
//
////-------------------------------------------------------------------------------------
////增加 check防止恶意刷短信接口
//if (!DySmsLimit.canSendSms(clientIp)) {
// log.warn("--------[警告] IP地址:{}, 短信接口请求太多-------", clientIp);
// result.setMessage("短信接口请求太多,请稍后再试!");
// result.setCode(CommonConstant.PHONE_SMS_FAIL_CODE);
// result.setSuccess(false);
// return result;
//}
////-------------------------------------------------------------------------------------
//
////随机数
//String captcha = RandomUtil.randomNumbers(6);
//JSONObject obj = new JSONObject();
//obj.put("code", captcha);
//try {
// boolean b = false;
// //注册模板
// if (CommonConstant.SMS_TPL_TYPE_1.equals(smsmode)) {
// SysUser sysUser = sysUserService.getUserByPhone(mobile);
// if (sysUser != null) {
// result.error500(" 手机号已经注册,请直接登录!");
// baseCommonService.addLog("手机号已经注册,请直接登录!", CommonConstant.LOG_TYPE_1, null);
// return result;
// }
// b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.REGISTER_TEMPLATE_CODE);
// } else {
// //登录模式,校验用户有效性
// SysUser sysUser = sysUserService.getUserByPhone(mobile);
// result = sysUserService.checkUserIsEffective(sysUser);
// if (!result.isSuccess()) {
// String message = result.getMessage();
// String userNotExist = "该用户不存在,请注册";
// if (userNotExist.equals(message)) {
// result.error500("该用户不存在或未绑定手机号");
// }
// return result;
// }
//
// /**
// * smsmode 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板
// */
// if (CommonConstant.SMS_TPL_TYPE_0.equals(smsmode)) {
// //登录模板
// b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.LOGIN_TEMPLATE_CODE);
// } else if (CommonConstant.SMS_TPL_TYPE_2.equals(smsmode)) {
// //忘记密码模板
// b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE);
// }
// }
//
// if (b == false) {
// result.setMessage("短信验证码发送失败,请稍后重试");
// result.setSuccess(false);
// return result;
// }
//
// //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
// //验证码10分钟内有效
// redisUtil.set(redisKey, captcha, 600);
// //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
//
// //update-begin--Author:scott Date:20190812 forissues#391
// //result.setResult(captcha);
// //update-end--Author:scott Date:20190812 forissues#391
// result.setSuccess(true);
//
//} catch (ClientException e) {
// e.printStackTrace();
// result.error500(" 短信接口未配置,请联系管理员!");
// return result;
//}
return result;
}
@@ -759,46 +759,46 @@ public class LoginController {
@PostMapping(value = "/sendChangePwdSms")
public Result<String> sendSms(@RequestBody JSONObject jsonObject) {
Result<String> result = new Result<>();
String mobile = jsonObject.get("mobile").toString();
if (oConvertUtils.isEmpty(mobile)) {
result.setMessage("手机号不允许为空!");
result.setSuccess(false);
return result;
}
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String username = sysUser.getUsername();
LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
query.eq(SysUser::getUsername, username).eq(SysUser::getPhone, mobile);
SysUser user = sysUserService.getOne(query);
if (null == user) {
return Result.error("当前登录用户和绑定的手机号不匹配,无法修改密码!");
}
String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + mobile;
Object object = redisUtil.get(redisKey);
if (object != null) {
result.setMessage("验证码10分钟内仍然有效");
result.setSuccess(false);
return result;
}
//随机数
String captcha = RandomUtil.randomNumbers(6);
JSONObject obj = new JSONObject();
obj.put("code", captcha);
try {
boolean b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.CHANGE_PASSWORD_TEMPLATE_CODE);
if (!b) {
result.setMessage("短信验证码发送失败,请稍后重试");
result.setSuccess(false);
return result;
}
//验证码5分钟内有效
redisUtil.set(redisKey, captcha, 300);
result.setSuccess(true);
} catch (ClientException e) {
e.printStackTrace();
result.error500(" 短信接口未配置,请联系管理员!");
return result;
}
//String mobile = jsonObject.get("mobile").toString();
//if (oConvertUtils.isEmpty(mobile)) {
// result.setMessage("手机号不允许为空!");
// result.setSuccess(false);
// return result;
//}
//LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//String username = sysUser.getUsername();
//LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
//query.eq(SysUser::getUsername, username).eq(SysUser::getPhone, mobile);
//SysUser user = sysUserService.getOne(query);
//if (null == user) {
// return Result.error("当前登录用户和绑定的手机号不匹配,无法修改密码!");
//}
//String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + mobile;
//Object object = redisUtil.get(redisKey);
//if (object != null) {
// result.setMessage("验证码10分钟内仍然有效");
// result.setSuccess(false);
// return result;
//}
////随机数
//String captcha = RandomUtil.randomNumbers(6);
//JSONObject obj = new JSONObject();
//obj.put("code", captcha);
//try {
// boolean b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.CHANGE_PASSWORD_TEMPLATE_CODE);
// if (!b) {
// result.setMessage("短信验证码发送失败,请稍后重试");
// result.setSuccess(false);
// return result;
// }
// //验证码5分钟内有效
// redisUtil.set(redisKey, captcha, 300);
// result.setSuccess(true);
//} catch (ClientException e) {
// e.printStackTrace();
// result.error500(" 短信接口未配置,请联系管理员!");
// return result;
//}
return result;
}

View File

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jeecg.dingtalk.api.core.response.Response;
//import com.jeecg.dingtalk.api.core.response.Response;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@@ -29,8 +29,8 @@ import org.jeecg.modules.system.entity.SysAnnouncementSend;
import org.jeecg.modules.system.service.ISysAnnouncementSendService;
import org.jeecg.modules.system.service.ISysAnnouncementService;
import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
import org.jeecg.modules.system.service.impl.ThirdAppDingtalkServiceImpl;
import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
//import org.jeecg.modules.system.service.impl.ThirdAppDingtalkServiceImpl;
//import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
import org.jeecg.modules.system.util.XssUtils;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@@ -77,10 +77,10 @@ public class SysAnnouncementController {
private ISysAnnouncementSendService sysAnnouncementSendService;
@Resource
private WebSocket webSocket;
@Autowired
ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
@Autowired
ThirdAppDingtalkServiceImpl dingtalkService;
//@Autowired
//ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
//@Autowired
//ThirdAppDingtalkServiceImpl dingtalkService;
@Autowired
private SysBaseApiImpl sysBaseApi;
@Autowired
@@ -288,14 +288,14 @@ public class SysAnnouncementController {
}
try {
// 同步企业微信、钉钉的消息通知
Response<String> dtResponse = dingtalkService.sendActionCardMessage(sysAnnouncement, null, true);
wechatEnterpriseService.sendTextCardMessage(sysAnnouncement, true);
if (dtResponse != null && dtResponse.isSuccess()) {
String taskId = dtResponse.getResult();
sysAnnouncement.setDtTaskId(taskId);
sysAnnouncementService.updateById(sysAnnouncement);
}
//Response<String> dtResponse = dingtalkService.sendActionCardMessage(sysAnnouncement, null, true);
//wechatEnterpriseService.sendTextCardMessage(sysAnnouncement, true);
//
//if (dtResponse != null && dtResponse.isSuccess()) {
// String taskId = dtResponse.getResult();
// sysAnnouncement.setDtTaskId(taskId);
// sysAnnouncementService.updateById(sysAnnouncement);
//}
} catch (Exception e) {
log.error("同步发送第三方APP消息失败", e);
}
@@ -326,7 +326,7 @@ public class SysAnnouncementController {
result.success("该系统通知撤销成功");
if (oConvertUtils.isNotEmpty(sysAnnouncement.getDtTaskId())) {
try {
dingtalkService.recallMessage(sysAnnouncement.getDtTaskId());
//dingtalkService.recallMessage(sysAnnouncement.getDtTaskId());
} catch (Exception e) {
log.error("第三方APP撤回消息失败", e);
}

View File

@@ -41,9 +41,9 @@ import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.firewall.SqlInjection.IDictTableWhiteListHandler;
import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
import org.jeecg.modules.message.entity.SysMessageTemplate;
import org.jeecg.modules.message.handle.impl.DdSendMsgHandle;
import org.jeecg.modules.message.handle.impl.EmailSendMsgHandle;
import org.jeecg.modules.message.handle.impl.QywxSendMsgHandle;
//import org.jeecg.modules.message.handle.impl.DdSendMsgHandle;
//import org.jeecg.modules.message.handle.impl.EmailSendMsgHandle;
//import org.jeecg.modules.message.handle.impl.QywxSendMsgHandle;
import org.jeecg.modules.message.handle.impl.SystemSendMsgHandle;
import org.jeecg.modules.message.service.ISysMessageTemplateService;
import org.jeecg.modules.message.websocket.WebSocket;
@@ -115,10 +115,10 @@ public class SysBaseApiImpl implements ISysBaseAPI {
private SysPermissionMapper sysPermissionMapper;
@Autowired
private ISysPermissionDataRuleService sysPermissionDataRuleService;
@Autowired
private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
@Autowired
private ThirdAppDingtalkServiceImpl dingtalkService;
//@Autowired
//private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
//@Autowired
//private ThirdAppDingtalkServiceImpl dingtalkService;
@Autowired
ISysCategoryService sysCategoryService;
@Autowired
@@ -425,8 +425,8 @@ public class SysBaseApiImpl implements ISysBaseAPI {
message.getCategory());
try {
// 同步发送第三方APP消息
wechatEnterpriseService.sendMessage(message, true);
dingtalkService.sendMessage(message, true);
//wechatEnterpriseService.sendMessage(message, true);
//dingtalkService.sendMessage(message, true);
} catch (Exception e) {
log.error("同步发送第三方APP消息失败", e);
}
@@ -443,8 +443,8 @@ public class SysBaseApiImpl implements ISysBaseAPI {
message.getBusId());
try {
// 同步发送第三方APP消息
wechatEnterpriseService.sendMessage(message, true);
dingtalkService.sendMessage(message, true);
//wechatEnterpriseService.sendMessage(message, true);
//dingtalkService.sendMessage(message, true);
} catch (Exception e) {
log.error("同步发送第三方APP消息失败", e);
}
@@ -516,8 +516,8 @@ public class SysBaseApiImpl implements ISysBaseAPI {
}
try {
// 同步企业微信、钉钉的消息通知
dingtalkService.sendActionCardMessage(announcement, mobileOpenUrl, true);
wechatEnterpriseService.sendTextCardMessage(announcement, true);
//dingtalkService.sendActionCardMessage(announcement, mobileOpenUrl, true);
//wechatEnterpriseService.sendTextCardMessage(announcement, true);
} catch (Exception e) {
log.error("同步发送第三方APP消息失败", e);
}
@@ -601,9 +601,9 @@ public class SysBaseApiImpl implements ISysBaseAPI {
}
try {
// 钉钉的消息通知
dingtalkService.sendActionCardMessage(announcement, mobileOpenUrl, true);
//dingtalkService.sendActionCardMessage(announcement, mobileOpenUrl, true);
// 企业微信通知
wechatEnterpriseService.sendTextCardMessage(announcement, true);
//wechatEnterpriseService.sendTextCardMessage(announcement, true);
} catch (Exception e) {
log.error("同步发送第三方APP消息失败", e);
}
@@ -1388,8 +1388,8 @@ public class SysBaseApiImpl implements ISysBaseAPI {
*/
@Override
public void sendEmailMsg(String email, String title, String content) {
EmailSendMsgHandle emailHandle = new EmailSendMsgHandle();
emailHandle.sendMsg(email, title, content);
//EmailSendMsgHandle emailHandle = new EmailSendMsgHandle();
//emailHandle.sendMsg(email, title, content);
}
/**
@@ -1402,31 +1402,31 @@ public class SysBaseApiImpl implements ISysBaseAPI {
*/
@Override
public void sendHtmlTemplateEmail(String email, String title, EmailTemplateEnum emailTemplateEnum, JSONObject params) {
EmailSendMsgHandle emailHandle = new EmailSendMsgHandle();
String htmlText = "";
try {
//获取模板实例
Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
//设置模板文件的目录
String url = emailTemplateEnum.getUrl();
configuration.setClassForTemplateLoading(this.getClass(), url.substring(0, url.lastIndexOf("/")));
configuration.setDefaultEncoding("UTF-8");
//空值报错设置
configuration.setClassicCompatible(true);
configuration.setNewBuiltinClassResolver(TemplateClassResolver.SAFER_RESOLVER);
Template template = configuration.getTemplate(url.substring(url.lastIndexOf("/")));
//解析模板文件
htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(template, params);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
log.info("Email Html Text{}", htmlText);
emailHandle.sendMsg(email, title, htmlText);
//EmailSendMsgHandle emailHandle = new EmailSendMsgHandle();
//String htmlText = "";
//try {
// //获取模板实例
// Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
// //设置模板文件的目录
// String url = emailTemplateEnum.getUrl();
// configuration.setClassForTemplateLoading(this.getClass(), url.substring(0, url.lastIndexOf("/")));
// configuration.setDefaultEncoding("UTF-8");
// //空值报错设置
// configuration.setClassicCompatible(true);
// configuration.setNewBuiltinClassResolver(TemplateClassResolver.SAFER_RESOLVER);
// Template template = configuration.getTemplate(url.substring(url.lastIndexOf("/")));
// //解析模板文件
// htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(template, params);
//} catch (IOException e) {
// e.printStackTrace();
//} catch (TemplateException e) {
// e.printStackTrace();
//} catch (Exception e) {
// e.printStackTrace();
//}
//
//log.info("Email Html Text{}", htmlText);
//emailHandle.sendMsg(email, title, htmlText);
}
/**
@@ -1570,17 +1570,17 @@ public class SysBaseApiImpl implements ISysBaseAPI {
//update-end---author:chenrui ---date:20231221 for[issues/#5643]解决分布式下表字典跨库无法查询问题------------
//-------------------------------------流程节点发送模板消息-----------------------------------------------
@Autowired
private QywxSendMsgHandle qywxSendMsgHandle;
//@Autowired
//private QywxSendMsgHandle qywxSendMsgHandle;
@Autowired
private SystemSendMsgHandle systemSendMsgHandle;
@Autowired
private EmailSendMsgHandle emailSendMsgHandle;
//@Autowired
//private EmailSendMsgHandle emailSendMsgHandle;
@Autowired
private DdSendMsgHandle ddSendMsgHandle;
//@Autowired
//private DdSendMsgHandle ddSendMsgHandle;
@Override
public void sendTemplateMessage(MessageDTO message) {
@@ -1615,11 +1615,11 @@ public class SysBaseApiImpl implements ISysBaseAPI {
// 邮件消息要解析Markdown
message.setContent(HTMLUtils.parseMarkdown(message.getContent()));
}
emailSendMsgHandle.sendMessage(message);
//emailSendMsgHandle.sendMessage(message);
} else if (MessageTypeEnum.DD.getType().equals(messageType)) {
ddSendMsgHandle.sendMessage(message);
//ddSendMsgHandle.sendMessage(message);
} else if (MessageTypeEnum.QYWX.getType().equals(messageType)) {
qywxSendMsgHandle.sendMessage(message);
//qywxSendMsgHandle.sendMessage(message);
}
}

View File

@@ -2,10 +2,10 @@ package org.jeecg.modules.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jeecg.dingtalk.api.base.JdtBaseAPI;
import com.jeecg.dingtalk.api.core.response.Response;
import com.jeecg.dingtalk.api.core.vo.AccessToken;
import com.jeecg.dingtalk.api.user.JdtUserAPI;
//import com.jeecg.dingtalk.api.base.JdtBaseAPI;
//import com.jeecg.dingtalk.api.core.response.Response;
//import com.jeecg.dingtalk.api.core.vo.AccessToken;
//import com.jeecg.dingtalk.api.user.JdtUserAPI;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.constant.CommonConstant;
@@ -169,13 +169,13 @@ public class SysThirdAccountServiceImpl extends ServiceImpl<SysThirdAccountMappe
//update-begin---author:wangshuai ---date:20230306 for判断如果是钉钉的情况下需要将第三方的用户id查询出来发送模板的时候有用------------
//=============begin 判断如果是钉钉的情况下需要将第三方的用户id查询出来发送模板的时候有用==========
if (CommonConstant.DINGTALK.toLowerCase().equals(tlm.getSource())) {
AccessToken accessToken = JdtBaseAPI.getAccessToken(dingTalkClientId, dingTalkClientSecret);
Response<String> getUserIdRes = JdtUserAPI.getUseridByUnionid(tlm.getUuid(), accessToken.getAccessToken());
if (getUserIdRes.isSuccess()) {
user.setThirdUserId(getUserIdRes.getResult());
} else {
user.setThirdUserId(tlm.getUuid());
}
//AccessToken accessToken = JdtBaseAPI.getAccessToken(dingTalkClientId, dingTalkClientSecret);
//Response<String> getUserIdRes = JdtUserAPI.getUseridByUnionid(tlm.getUuid(), accessToken.getAccessToken());
//if (getUserIdRes.isSuccess()) {
// user.setThirdUserId(getUserIdRes.getResult());
//} else {
// user.setThirdUserId(tlm.getUuid());
//}
//=============end 判断如果是钉钉的情况下需要将第三方的用户id查询出来发送模板的时候有用==========
} else {
user.setThirdUserId(tlm.getUuid());

View File

@@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.exceptions.ClientException;
//import com.aliyuncs.exceptions.ClientException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -102,10 +102,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
private BaseCommonService baseCommonService;
@Autowired
private SysThirdAccountMapper sysThirdAccountMapper;
@Autowired
ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
@Autowired
ThirdAppDingtalkServiceImpl dingtalkService;
//@Autowired
//ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
//@Autowired
//ThirdAppDingtalkServiceImpl dingtalkService;
@Autowired
ISysRoleIndexService sysRoleIndexService;
@Autowired
@@ -710,8 +710,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
line += sysUserRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds));
//4.同步删除第三方App的用户
try {
dingtalkService.removeThirdAppUser(userIds);
wechatEnterpriseService.removeThirdAppUser(userIds);
//dingtalkService.removeThirdAppUser(userIds);
//wechatEnterpriseService.removeThirdAppUser(userIds);
} catch (Exception e) {
log.error("同步删除第三方App的用户失败", e);
}
@@ -2010,33 +2010,33 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
* @param phone
*/
private void sendPhoneSms(String phone, String clientIp) {
String redisKey = CommonConstant.CHANGE_PHONE_REDIS_KEY_PRE + phone;
Object object = redisUtil.get(redisKey);
if (object != null) {
throw new JeecgBootException("验证码10分钟内仍然有效");
}
//增加 check防止恶意刷短信接口
if (!DySmsLimit.canSendSms(clientIp)) {
log.warn("--------[警告] IP地址:{}, 短信接口请求太多-------", clientIp);
throw new JeecgBootException("短信接口请求太多,请稍后再试!", CommonConstant.PHONE_SMS_FAIL_CODE);
}
//随机数
String captcha = RandomUtil.randomNumbers(6);
JSONObject obj = new JSONObject();
obj.put("code", captcha);
try {
boolean sendSmsSuccess = DySmsHelper.sendSms(phone, obj, DySmsEnum.LOGIN_TEMPLATE_CODE);
if (!sendSmsSuccess) {
throw new JeecgBootException("短信验证码发送失败,请稍后重试!");
}
//验证码10分钟内有效
redisUtil.set(redisKey, captcha, 600);
} catch (ClientException e) {
log.error(e.getMessage(), e);
throw new JeecgBootException("短信接口未配置,请联系管理员!");
}
//String redisKey = CommonConstant.CHANGE_PHONE_REDIS_KEY_PRE + phone;
//Object object = redisUtil.get(redisKey);
//
//if (object != null) {
// throw new JeecgBootException("验证码10分钟内仍然有效");
//}
//
////增加 check防止恶意刷短信接口
//if (!DySmsLimit.canSendSms(clientIp)) {
// log.warn("--------[警告] IP地址:{}, 短信接口请求太多-------", clientIp);
// throw new JeecgBootException("短信接口请求太多,请稍后再试!", CommonConstant.PHONE_SMS_FAIL_CODE);
//}
//
////随机数
//String captcha = RandomUtil.randomNumbers(6);
//JSONObject obj = new JSONObject();
//obj.put("code", captcha);
//try {
// boolean sendSmsSuccess = DySmsHelper.sendSms(phone, obj, DySmsEnum.LOGIN_TEMPLATE_CODE);
// if (!sendSmsSuccess) {
// throw new JeecgBootException("短信验证码发送失败,请稍后重试!");
// }
// //验证码10分钟内有效
// redisUtil.set(redisKey, captcha, 600);
//} catch (ClientException e) {
// log.error(e.getMessage(), e);
// throw new JeecgBootException("短信接口未配置,请联系管理员!");
//}
}
}

View File

@@ -1,89 +1,89 @@
package org.jeecg.modules.system.vo.thirdapp;
import com.jeecg.dingtalk.api.department.vo.Department;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* 钉钉树结构的部门
*
* @author sunjianlei
*/
public class JdtDepartmentTreeVo extends Department {
private List<JdtDepartmentTreeVo> children;
public List<JdtDepartmentTreeVo> getChildren() {
return children;
}
public JdtDepartmentTreeVo setChildren(List<JdtDepartmentTreeVo> children) {
this.children = children;
return this;
}
public JdtDepartmentTreeVo(Department department) {
BeanUtils.copyProperties(department, this);
}
/**
* 是否有子项
*/
public boolean hasChildren() {
return children != null && children.size() > 0;
}
@Override
public String toString() {
return "JwDepartmentTree{" +
"children=" + children +
"} " + super.toString();
}
/**
* 静态辅助方法将list转为tree结构
*/
public static List<JdtDepartmentTreeVo> listToTree(List<Department> allDepartment) {
// 先找出所有的父级
List<JdtDepartmentTreeVo> treeList = getByParentId(1, allDepartment);
Optional<Department> departmentOptional = allDepartment.stream().filter(item -> item.getParent_id() == null).findAny();
Department department = new Department();
//判断是否找到数据
if (departmentOptional.isPresent()) {
department = departmentOptional.get();
}
getChildrenRecursion(treeList, allDepartment);
//update-begin---author:wangshuai---date:2024-04-10---for:【issues/6017】钉钉同步部门时没有最顶层的部门名同步用户时用户没有部门信息---
JdtDepartmentTreeVo treeVo = new JdtDepartmentTreeVo(department);
treeVo.setChildren(treeList);
List<JdtDepartmentTreeVo> list = new ArrayList<>();
list.add(treeVo);
return list;
//update-end---author:wangshuai---date:2024-04-10---for:【issues/6017】钉钉同步部门时没有最顶层的部门名同步用户时用户没有部门信息---
}
private static List<JdtDepartmentTreeVo> getByParentId(Integer parentId, List<Department> allDepartment) {
List<JdtDepartmentTreeVo> list = new ArrayList<>();
for (Department department : allDepartment) {
if (parentId.equals(department.getParent_id())) {
list.add(new JdtDepartmentTreeVo(department));
}
}
return list;
}
private static void getChildrenRecursion(List<JdtDepartmentTreeVo> treeList, List<Department> allDepartment) {
for (JdtDepartmentTreeVo departmentTree : treeList) {
// 递归寻找子级
List<JdtDepartmentTreeVo> children = getByParentId(departmentTree.getDept_id(), allDepartment);
if (children.size() > 0) {
departmentTree.setChildren(children);
getChildrenRecursion(children, allDepartment);
}
}
}
}
//package org.jeecg.modules.system.vo.thirdapp;
//
//import com.jeecg.dingtalk.api.department.vo.Department;
//import org.springframework.beans.BeanUtils;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Optional;
//
///**
// * 钉钉树结构的部门
// *
// * @author sunjianlei
// */
//public class JdtDepartmentTreeVo extends Department {
//
// private List<JdtDepartmentTreeVo> children;
//
// public List<JdtDepartmentTreeVo> getChildren() {
// return children;
// }
//
// public JdtDepartmentTreeVo setChildren(List<JdtDepartmentTreeVo> children) {
// this.children = children;
// return this;
// }
//
// public JdtDepartmentTreeVo(Department department) {
// BeanUtils.copyProperties(department, this);
// }
//
// /**
// * 是否有子项
// */
// public boolean hasChildren() {
// return children != null && children.size() > 0;
// }
//
// @Override
// public String toString() {
// return "JwDepartmentTree{" +
// "children=" + children +
// "} " + super.toString();
// }
//
// /**
// * 静态辅助方法将list转为tree结构
// */
// public static List<JdtDepartmentTreeVo> listToTree(List<Department> allDepartment) {
// // 先找出所有的父级
// List<JdtDepartmentTreeVo> treeList = getByParentId(1, allDepartment);
// Optional<Department> departmentOptional = allDepartment.stream().filter(item -> item.getParent_id() == null).findAny();
// Department department = new Department();
// //判断是否找到数据
// if (departmentOptional.isPresent()) {
// department = departmentOptional.get();
// }
// getChildrenRecursion(treeList, allDepartment);
// //update-begin---author:wangshuai---date:2024-04-10---for:【issues/6017】钉钉同步部门时没有最顶层的部门名同步用户时用户没有部门信息---
// JdtDepartmentTreeVo treeVo = new JdtDepartmentTreeVo(department);
// treeVo.setChildren(treeList);
// List<JdtDepartmentTreeVo> list = new ArrayList<>();
// list.add(treeVo);
// return list;
// //update-end---author:wangshuai---date:2024-04-10---for:【issues/6017】钉钉同步部门时没有最顶层的部门名同步用户时用户没有部门信息---
// }
//
// private static List<JdtDepartmentTreeVo> getByParentId(Integer parentId, List<Department> allDepartment) {
// List<JdtDepartmentTreeVo> list = new ArrayList<>();
// for (Department department : allDepartment) {
// if (parentId.equals(department.getParent_id())) {
// list.add(new JdtDepartmentTreeVo(department));
// }
// }
// return list;
// }
//
// private static void getChildrenRecursion(List<JdtDepartmentTreeVo> treeList, List<Department> allDepartment) {
// for (JdtDepartmentTreeVo departmentTree : treeList) {
// // 递归寻找子级
// List<JdtDepartmentTreeVo> children = getByParentId(departmentTree.getDept_id(), allDepartment);
// if (children.size() > 0) {
// departmentTree.setChildren(children);
// getChildrenRecursion(children, allDepartment);
// }
// }
// }
//
//}

View File

@@ -1,89 +1,89 @@
package org.jeecg.modules.system.vo.thirdapp;
import com.jeecg.qywx.api.department.vo.Department;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* 企业微信树结构的部门
*
* @author sunjianlei
*/
public class JwDepartmentTreeVo extends Department {
private List<JwDepartmentTreeVo> children;
public List<JwDepartmentTreeVo> getChildren() {
return children;
}
public JwDepartmentTreeVo setChildren(List<JwDepartmentTreeVo> children) {
this.children = children;
return this;
}
public JwDepartmentTreeVo(Department department) {
BeanUtils.copyProperties(department, this);
}
/**
* 是否有子项
*/
public boolean hasChildren() {
return children != null && children.size() > 0;
}
@Override
public String toString() {
return "JwDepartmentTree{" +
"children=" + children +
"} " + super.toString();
}
/**
* 静态辅助方法将list转为tree结构
*/
public static List<JwDepartmentTreeVo> listToTree(List<Department> allDepartment) {
// 先找出所有的父级
List<JwDepartmentTreeVo> treeList = getByParentId("1", allDepartment);
Optional<Department> departmentOptional = allDepartment.stream().filter(item -> "0".equals(item.getParentid())).findAny();
Department department = new Department();
//判断是否找到数据
if (departmentOptional.isPresent()) {
department = departmentOptional.get();
}
getChildrenRecursion(treeList, allDepartment);
//update-begin---author:wangshuai---date:2024-04-10---for:【issues/6017】企业微信同步部门时没有最顶层的部门名同步用户时用户没有部门信息---
JwDepartmentTreeVo treeVo = new JwDepartmentTreeVo(department);
treeVo.setChildren(treeList);
List<JwDepartmentTreeVo> list = new ArrayList<>();
list.add(treeVo);
return list;
//update-begin---author:wangshuai---date:2024-04-10---for:【issues/6017】企业微信部门时没有最顶层的部门名同步用户时用户没有部门信息---
}
private static List<JwDepartmentTreeVo> getByParentId(String parentId, List<Department> allDepartment) {
List<JwDepartmentTreeVo> list = new ArrayList<>();
for (Department department : allDepartment) {
if (parentId.equals(department.getParentid())) {
list.add(new JwDepartmentTreeVo(department));
}
}
return list;
}
private static void getChildrenRecursion(List<JwDepartmentTreeVo> treeList, List<Department> allDepartment) {
for (JwDepartmentTreeVo departmentTree : treeList) {
// 递归寻找子级
List<JwDepartmentTreeVo> children = getByParentId(departmentTree.getId(), allDepartment);
if (children.size() > 0) {
departmentTree.setChildren(children);
getChildrenRecursion(children, allDepartment);
}
}
}
}
//package org.jeecg.modules.system.vo.thirdapp;
//
//import com.jeecg.qywx.api.department.vo.Department;
//import org.springframework.beans.BeanUtils;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Optional;
//
///**
// * 企业微信树结构的部门
// *
// * @author sunjianlei
// */
//public class JwDepartmentTreeVo extends Department {
//
// private List<JwDepartmentTreeVo> children;
//
// public List<JwDepartmentTreeVo> getChildren() {
// return children;
// }
//
// public JwDepartmentTreeVo setChildren(List<JwDepartmentTreeVo> children) {
// this.children = children;
// return this;
// }
//
// public JwDepartmentTreeVo(Department department) {
// BeanUtils.copyProperties(department, this);
// }
//
// /**
// * 是否有子项
// */
// public boolean hasChildren() {
// return children != null && children.size() > 0;
// }
//
// @Override
// public String toString() {
// return "JwDepartmentTree{" +
// "children=" + children +
// "} " + super.toString();
// }
//
// /**
// * 静态辅助方法将list转为tree结构
// */
// public static List<JwDepartmentTreeVo> listToTree(List<Department> allDepartment) {
// // 先找出所有的父级
// List<JwDepartmentTreeVo> treeList = getByParentId("1", allDepartment);
// Optional<Department> departmentOptional = allDepartment.stream().filter(item -> "0".equals(item.getParentid())).findAny();
// Department department = new Department();
// //判断是否找到数据
// if (departmentOptional.isPresent()) {
// department = departmentOptional.get();
// }
// getChildrenRecursion(treeList, allDepartment);
// //update-begin---author:wangshuai---date:2024-04-10---for:【issues/6017】企业微信同步部门时没有最顶层的部门名同步用户时用户没有部门信息---
// JwDepartmentTreeVo treeVo = new JwDepartmentTreeVo(department);
// treeVo.setChildren(treeList);
// List<JwDepartmentTreeVo> list = new ArrayList<>();
// list.add(treeVo);
// return list;
// //update-begin---author:wangshuai---date:2024-04-10---for:【issues/6017】企业微信部门时没有最顶层的部门名同步用户时用户没有部门信息---
// }
//
// private static List<JwDepartmentTreeVo> getByParentId(String parentId, List<Department> allDepartment) {
// List<JwDepartmentTreeVo> list = new ArrayList<>();
// for (Department department : allDepartment) {
// if (parentId.equals(department.getParentid())) {
// list.add(new JwDepartmentTreeVo(department));
// }
// }
// return list;
// }
//
// private static void getChildrenRecursion(List<JwDepartmentTreeVo> treeList, List<Department> allDepartment) {
// for (JwDepartmentTreeVo departmentTree : treeList) {
// // 递归寻找子级
// List<JwDepartmentTreeVo> children = getByParentId(departmentTree.getId(), allDepartment);
// if (children.size() > 0) {
// departmentTree.setChildren(children);
// getChildrenRecursion(children, allDepartment);
// }
// }
// }
//
//}