Compare commits

...

11 Commits

  1. 31
      research-admin/src/main/java/com/research/web/controller/client/SendMessage.java
  2. 2
      research-admin/src/main/java/com/research/web/controller/client/project/GroupController.java
  3. 79
      research-common/src/main/java/com/research/common/constant/WeiXinConstants.java
  4. 2
      research-common/src/main/java/com/research/common/core/domain/JsonResponse.java
  5. 26
      research-common/src/main/java/com/research/common/utils/ExternalServiceUtil.java
  6. 95
      research-common/src/main/java/com/research/common/utils/SendGzhMessageTemplate.java
  7. 94
      research-common/src/main/java/com/research/common/utils/SendGzhMessageUtil.java
  8. 67
      research-common/src/main/java/com/research/common/utils/SendMessageUtil.java
  9. 36
      research-common/src/main/java/com/research/common/wechat/WxConstant.java
  10. 7
      research-framework/src/main/java/com/research/framework/web/service/SysLoginService.java
  11. 12
      research-framework/src/main/java/com/research/framework/web/service/UserDetailsServiceImpl.java
  12. 6
      research-framework/src/main/java/com/research/framework/web/service/WebTmsLoginService.java
  13. 8
      research-generator/src/main/resources/mbg.xml
  14. 2
      research-system/src/main/java/com/research/system/domain/dto/GroupDto.java
  15. 4
      research-system/src/main/java/com/research/system/mapper/SysUserMapper.java
  16. 4
      research-system/src/main/java/com/research/system/service/ISysUserService.java
  17. 2
      research-system/src/main/java/com/research/system/service/KtsGroupService.java
  18. 135
      research-system/src/main/java/com/research/system/service/impl/KtsGroupServiceImpl.java
  19. 31
      research-system/src/main/java/com/research/system/service/impl/MeetingServiceImpl.java
  20. 164
      research-system/src/main/java/com/research/system/service/impl/MemberAduitServiceImpl.java
  21. 4
      research-system/src/main/java/com/research/system/service/impl/SysUserServiceImpl.java
  22. 23
      research-system/src/main/java/com/research/system/service/impl/TaskServiceImpl.java
  23. 16
      research-system/src/main/java/com/research/system/service/impl/TmsLoginServiceImpl.java
  24. 2
      research-system/src/main/resources/mapper/system/SysUserMapper.xml

31
research-admin/src/main/java/com/research/web/controller/client/SendMessage.java

@ -1,9 +1,14 @@
package com.research.web.controller.client;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.research.common.annotation.Anonymous;
import com.research.common.constant.WeiXinConstants;
import com.research.common.utils.SendGzhMessageUtil;
import com.research.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@ -13,6 +18,9 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
@ -31,10 +39,25 @@ public class SendMessage {
@ApiOperation(value = "通知测试")
@GetMapping("/sendWxMessage")
public String sendWxMessage() {
String gzhUrl = String.format("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%1$s", getAccessToken());
// HttpRequest.post(wxMessageUrl).body(JSON.toJSONString(sendMiniMessage)).execute().body();
return HttpRequest.post(gzhUrl).body("{\"data\":{\"amount6\":{\"value\":\"400.00\"},\"character_string1\":{\"value\":\"2054046697255997440\"},\"thing3\":{\"value\":\"孙健\"},\"thing5\":{\"value\":\"小动物X光机\"},\"time2\":{\"value\":\"2026-05-12 11:51:09\"}},\"miniprogram\":{\"appid\":\"wx243c7267534c1f24\",\"pagepath\":\"/pages/gly/comList/detail?orderSn=2054046697255997440\"},\"page\":\"/pages/gly/comList/detail?orderSn=2054046697255997440\",\"template_id\":\"f2Iqy0Zf4JbbMtqjS2-AJ8hkir6zgyFIB0RTCUmCizo\",\"touser\":\"oQQ5_2CkWVyR9x_44IM3dqnjxEr8\",\"url\":\"/pages/gly/comList/detail?orderSn=2054046697255997440\"}")
.timeout(5000).execute().body();
//给审核人发送公众号通知
try {
//根据接收者的userId获取对应的公众号openId
String openId = "oQQ5_2CkWVyR9x_44IM3dqnjxEr8";
if(ObjectUtil.isNotNull(openId)){
//发送公众号通知。需要信息:用户名称、联系电话、申请时间、申请岗位
SendGzhMessageUtil.sendGzhMessage(
WeiXinConstants.GzhMessageType.USER_AUDIT,
openId,
Arrays.asList("名称",
"手机号",
DateUtil.format(new Date(), "yyyy-MM-dd"),
"单位负责人")
);
}
}catch (Exception e){
log.error("发送公众号通知失败", e);
}
return "success";
}
public static String getAccessToken() {

2
research-admin/src/main/java/com/research/web/controller/client/project/GroupController.java

@ -125,7 +125,7 @@ public class GroupController {
@PostMapping("/member/add")
// @DataSource(DataSourceType.MASTER)
public JsonResponse<Integer> addMember(@RequestBody @Validated GroupDto.AddMember dto) throws Exception {
KtsKtGroupMember ktsKtGroupMember = ktsGroupService.addMember(dto);
ktsGroupService.addMember(dto);
return JsonResponse.ok();
}

79
research-common/src/main/java/com/research/common/constant/WeiXinConstants.java

@ -0,0 +1,79 @@
package com.research.common.constant;
/**
* @author zy
* @date 2026/5/14 15:08
*/
public class WeiXinConstants {
/*** 获取公众号的accessToken */
public static final String GZH_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/stable_token";
/*** 公众号通过模板发送订阅消息 */
public static final String GZH_MESSAGE_TEMPLATE_SEND = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%1$s";
/*** grant_type */
public static final String GRANT_TYPE = "client_credential";
/*** 科研共享小程序 */
public static final String KY_MINI_APPID = "wx591b1c8fd6de7ed8";
public static final String KY_MINI_SECRET = "83027b0e34443b2f60a13f23451d37ca";
/*** 二院公众号 */
public static final String GZH_APPID = "wxd3376bd21c4d12cb";
public static final String GZH_SECRET = "f7b2bf60a9da8691bc148d70ad4ebdb4";
/**
* 公众号消息模板--账号注册申请审批通知 u0uwbQt2xzeO0LrMqBreHqxhVjrRIAyOfbR-9KcYcqI
* 用户名称 {{thing10.DATA}}
* 联系电话 {{phone_number4.DATA}}
* 申请时间 {{time5.DATA}}
* 申请岗位 {{thing2.DATA}}
*/
public static final String GZH_MSG_TEMPLATE_USER_AUDIT = "u0uwbQt2xzeO0LrMqBreHqxhVjrRIAyOfbR-9KcYcqI";
/**
* 公众号消息模板--系统流程审批提醒(任务审核提醒) vFPU14em5Lmr56E3p6TubNGOxrK3vku1PMbTyepPbRM
* 审批类型 {{const7.DATA}} 枚举值
* 发起人 {{thing4.DATA}}
* 申请时间 {{time12.DATA}}
* 审批状态 {{const13.DATA}} 枚举值
*/
public static final String GZH_MSG_TEMPLATE_SYS_AUDIT = "vFPU14em5Lmr56E3p6TubNGOxrK3vku1PMbTyepPbRM";
/**
* 公众号消息模板--线上会议预约成功通知 Lww6lrcCUpu4oykKKT07eRlbouZIzJd7Q7pGJaiiTRM
* 会议名称 {{thing6.DATA}}
* 会议码 {{character_string11.DATA}}
* 会议地点 {{thing7.DATA}}
* 参会时间 {{time4.DATA}}
*/
public static final String GZH_MSG_TEMPLATE_MEETING_AUDIT = "Lww6lrcCUpu4oykKKT07eRlbouZIzJd7Q7pGJaiiTRM";
/*** 小程序-任务页面地址,从公众号内跳转进入 */
public static final String MINI_PAGE_TASK = "pages/task/index";
/*** 小程序默认首页 */
public static final String MINI_PAGE_INDEX = "pages/index/index";
/**
* 小程序消息模板枚举
*/
public enum GzhMessageType {
USER_AUDIT(1, "账号注册申请审批通知", GZH_MSG_TEMPLATE_USER_AUDIT, null),
SYS_AUDIT(2, "任务审核提醒", GZH_MSG_TEMPLATE_SYS_AUDIT, MINI_PAGE_TASK),
MEETING_AUDIT(3, "会议预约成功通知", GZH_MSG_TEMPLATE_MEETING_AUDIT, null),
;
public final int value;
public final String phase;
public final String key;
public final String miniPage;
GzhMessageType(int value, String thePhase, String key, String miniPage) {
this.value = value;
this.phase = thePhase;
this.key = key;
this.miniPage = miniPage;
}
}
}

2
research-common/src/main/java/com/research/common/core/domain/JsonResponse.java

@ -57,7 +57,7 @@ public class JsonResponse<T> {
jsonResponse.data = null;
return jsonResponse;
}*/
public <T> JsonResponse<T> fail(int code, String msg) {
public static <T> JsonResponse<T> fail(int code, String msg) {
JsonResponse<T> jsonResponse = new JsonResponse<>();
jsonResponse.code = code;
jsonResponse.msg = msg;

26
research-common/src/main/java/com/research/common/wechat/ExternalService.java → research-common/src/main/java/com/research/common/utils/ExternalServiceUtil.java

@ -1,16 +1,10 @@
package com.research.common.wechat;
package com.research.common.utils;
import cn.hutool.core.map.MapBuilder;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.research.common.exception.ServiceException;
import com.research.common.exception.base.BaseException;
import com.research.common.wechat.bean.MiniProgramUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@ -26,7 +20,7 @@ import java.util.Map;
*/
@Service
@Slf4j
public class ExternalService {
public class ExternalServiceUtil {
private static String miniAppId;
private static String miniSecret;
@ -40,42 +34,42 @@ public class ExternalService {
@Value("${mail.sender:}")
public void setSender(String sender) {
ExternalService.sender = sender;
ExternalServiceUtil.sender = sender;
}
@Value("${mail.host:}")
public void setHost(String host) {
ExternalService.host = host;
ExternalServiceUtil.host = host;
}
@Value("${mail.port:465}")
public void setPort(Integer port) {
ExternalService.port = port;
ExternalServiceUtil.port = port;
}
@Value("${mail.username:}")
public void setUsername(String username) {
ExternalService.username = username;
ExternalServiceUtil.username = username;
}
@Value("${mail.password:}")
public void setPassword(String password) {
ExternalService.password = password;
ExternalServiceUtil.password = password;
}
@Value("${wxmp.appId:}")
public void setMiniAppId(String miniAppId) {
ExternalService.miniAppId = miniAppId;
ExternalServiceUtil.miniAppId = miniAppId;
}
@Value("${wxmp.secret:}")
public void setMiniSecret(String miniSecret) {
ExternalService.miniSecret = miniSecret;
ExternalServiceUtil.miniSecret = miniSecret;
}
@Value("${externalUrl:}")
public void setExternalUrl(String externalUrl) {
ExternalService.externalUrl = externalUrl;
ExternalServiceUtil.externalUrl = externalUrl;
}
private static final Integer EXTERNAL_HTTP_TIMEOUT = 5000;

95
research-common/src/main/java/com/research/common/utils/SendGzhMessageTemplate.java

@ -0,0 +1,95 @@
package com.research.common.utils;
import cn.hutool.core.collection.CollectionUtil;
import lombok.Data;
import java.util.List;
/**
* @author
*/
@Data
public class SendGzhMessageTemplate {
@Data
public static class SubscribeEntity<T> {
private String touser;
private String template_id;
private String page;
private MiniProgramEntity miniprogram;
private T data;
}
@Data
public static class MiniProgramEntity {
private String appid;
private String pagepath;
public MiniProgramEntity(String appid, String pagepath) {
this.appid = appid;
this.pagepath = pagepath;
}
public MiniProgramEntity() {
}
}
@Data
private static class CommonEntity {
private String value;
}
@Data
public static class UserAuditData {
public UserAuditData(List<String> params) {
if (CollectionUtil.isNotEmpty(params) && params.size() >= 2) {
thing7 = new CommonEntity();
character_string8 = new CommonEntity();
time5 = new CommonEntity();
thing9 = new CommonEntity();
thing7.setValue(params.get(0));
character_string8.setValue(params.get(1));
time5.setValue(params.get(2));
thing9.setValue(params.get(3));
}
}
//用户名称
private CommonEntity thing7;
//联系电话
private CommonEntity character_string8;
//申请时间
private CommonEntity time5;
//申请岗位
private CommonEntity thing9;
}
@Data
public static class MeetingNoticeData {
public MeetingNoticeData(List<String> params) {
if (CollectionUtil.isNotEmpty(params) && params.size() >= 4) {
thing6 = new CommonEntity();
character_string11 = new CommonEntity();
thing7 = new CommonEntity();
time4 = new CommonEntity();
thing6.setValue(params.get(0));
character_string11.setValue(params.get(1));
thing7.setValue(params.get(2));
time4.setValue(params.get(3));
}
}
//会议名称
private CommonEntity thing6;
//会议码
private CommonEntity character_string11;
//会议地点
private CommonEntity thing7;
//参会时间
private CommonEntity time4;
}
}

94
research-common/src/main/java/com/research/common/utils/SendGzhMessageUtil.java

@ -0,0 +1,94 @@
package com.research.common.utils;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.research.common.constant.WeiXinConstants;
import com.research.common.wechat.WxConstant;
import com.research.common.wechat.bean.MiniMessageTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @Author zzc
* @Package com.research.common.utils
* @Date 2026/5/14 13:58
* @description:
*/
@Slf4j
public class SendGzhMessageUtil {
/**
* 发送公众号消息
* @param messageType 消息类型
* @param toUser 接受者的openId
* @param params 参数
*/
public static void sendGzhMessage(WeiXinConstants.GzhMessageType messageType, String toUser, List<String> params) {
log.info("ExternalServiceUtil-SendWxMessage:{},{},{}", messageType.phase, toUser, params);
//初始化参数
Object o = GetMessageTypeClass(messageType, toUser, params);
//获取请求路径,拼接accessToken
String gzhUrl = String.format(WeiXinConstants.GZH_MESSAGE_TEMPLATE_SEND, getAccessToken());
//请求
String body = HttpRequest.post(gzhUrl).body(JSON.toJSONString(o))
.timeout(5000).execute().body();
log.info("审核消息发送结果:{}", body);
}
public static String getAccessToken() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("appid", WeiXinConstants.GZH_APPID);
jsonObject.put("secret", WeiXinConstants.GZH_SECRET);
jsonObject.put("grant_type", WeiXinConstants.GRANT_TYPE);
String body = HttpRequest.post(WeiXinConstants.GZH_ACCESS_TOKEN_URL)
.body(jsonObject.toJSONString())
.execute().body();
log.info("getAccessToken: {}", body);
return JSONObject.parseObject(body).getString("access_token");
}
public static Object GetMessageTypeClass(WeiXinConstants.GzhMessageType messageType, String toUser, List<String> params) {
switch (messageType) {
case USER_AUDIT: {
SendGzhMessageTemplate.SubscribeEntity<SendGzhMessageTemplate.UserAuditData> auditData = new SendGzhMessageTemplate.SubscribeEntity<>();
auditData.setTouser(toUser);
auditData.setTemplate_id(messageType.key);
auditData.setPage(messageType.miniPage);
auditData.setData(new SendGzhMessageTemplate.UserAuditData(params));
// 只有 miniPage 不为空时才设置
if (messageType.miniPage != null) {
auditData.setMiniprogram(new SendGzhMessageTemplate.MiniProgramEntity(
WeiXinConstants.KY_MINI_APPID, messageType.miniPage));
}
return auditData;
}
case MEETING_AUDIT:{
SendGzhMessageTemplate.SubscribeEntity<SendGzhMessageTemplate.MeetingNoticeData> meetingNotice = new SendGzhMessageTemplate.SubscribeEntity<>();
meetingNotice.setTouser(toUser);
meetingNotice.setTemplate_id(messageType.key);
meetingNotice.setPage(messageType.miniPage);
meetingNotice.setData(new SendGzhMessageTemplate.MeetingNoticeData(params));
// 只有 miniPage 不为空时才设置
if (messageType.miniPage != null) {
meetingNotice.setMiniprogram(new SendGzhMessageTemplate.MiniProgramEntity(
WeiXinConstants.KY_MINI_APPID, messageType.miniPage));
}
return meetingNotice;
}
default: {
break;
}
}
return null;
}
}

67
research-common/src/main/java/com/research/common/utils/SendMessageUtil.java

@ -1,67 +0,0 @@
package com.research.common.utils;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.research.common.wechat.WxConstant;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import java.util.List;
/**
* @Author zzc
* @Package com.research.common.utils
* @Date 2026/5/14 13:58
* @description:
*/
@Slf4j
public class SendMessageUtil {
@Async
public void sendWxMessage(WxConstant.MiniMessageType messageType, String indexPage, String openId, List<String> params) {
log.info("ExternalService-SendWxMessage:{},{},{},{}", messageType, indexPage, openId, params);
String gzhUrl = String.format(WxConstant.MESSAGE_TEMPLATE_SEND, getAccessToken());
Object o = GetMessageTypeClass(messageType, openId, indexPage, params);
String body = HttpRequest.post(gzhUrl).body(JSON.toJSONString(o))
.timeout(5000).execute().body();
log.info("审核消息发送结果:{}", body);
}
public Object GetMessageTypeClass(WxConstant.MiniMessageType messageType, String toUser, String page, List<String> params) {
switch (messageType) {
case UserAudit: {
// SubscribeEntity<AuditData> auditData = new SubscribeEntity<>();
// auditData.setTouser(toUser);
// auditData.setTemplate_id(WxConstant.MINI_MSG_AUDIT);
// auditData.setPage(page);
// auditData.setData(new MiniMessageTemplate.AuditData(params));
// return auditData;
}
default: {
break;
}
}
return null;
}
public static String getAccessToken() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("appid", "wxd3376bd21c4d12cb");
jsonObject.put("secret", "f7b2bf60a9da8691bc148d70ad4ebdb4");
jsonObject.put("grant_type", "client_credential");
String body = HttpRequest.post("https://api.weixin.qq.com/cgi-bin/stable_token")
.body(jsonObject.toJSONString())
.execute().body();
log.info("getAccessToken: {}", body);
return JSONObject.parseObject(body).getString("access_token");
}
}

36
research-common/src/main/java/com/research/common/wechat/WxConstant.java

@ -63,43 +63,7 @@ public class WxConstant {
/*** 机器人消息类型--markdown */
public static final String MARKDOWN = "markdown";
/*** 小程序appId */
public static final Map<String, String> APP_ID = new HashMap<>();
static {
//默认小程序
APP_ID.put("anyring", "wx356e01c7eb01d55d");
//tall3小程序
APP_ID.put("tall", "wxf72a76c2ea24a472");
//赛跑小程序
APP_ID.put("SP", "wx2ebb5cf926fe1ddb");
//数钱小程序
APP_ID.put("SQ", "wx55fa235267ca11e6");
//拔河小程序
APP_ID.put("BH", "wxd06d18fe7c75b498");
//健康码小程序
APP_ID.put("health", "wx2f9ef33e08053bbf");
//企业微信
APP_ID.put("enterprise", "wx808fa75921bd8f22");
}
/*** 小程序secret */
public static final Map<String, String> SECRET = new HashMap<>();
static {
//默认小程序
SECRET.put("anyring", "353033db85d4b5a35f05d1c0176a0cc6");
//tall3小程序
SECRET.put("tall", "5aa3fc421a149ec1e59a4a4f472e1223");
//赛跑小程序
SECRET.put("SP", "38e4425b8e3647015b439c6d38172b49");
//数钱小程序
SECRET.put("SQ", "d75a5a7538ff9c72f781738850817081");
//拔河小程序
SECRET.put("BH", "202ad7f3d95b0532948c667c468c9a56");
//健康码小程序
SECRET.put("health", "af90801c26bc177681b2c39a603605b9");
//企业微信
SECRET.put("enterprise", "8d2e95462bfeab363ee84776bc807859");
}
/**
* 小程序订阅消息类型

7
research-framework/src/main/java/com/research/framework/web/service/SysLoginService.java

@ -3,8 +3,7 @@ package com.research.framework.web.service;
import javax.annotation.Resource;
import cn.hutool.core.util.StrUtil;
import com.research.common.utils.SecurityUtils;
import com.research.common.wechat.ExternalService;
import com.research.common.utils.ExternalServiceUtil;
import com.research.common.wechat.bean.MiniProgramUser;
import com.research.framework.security.token.WxmpAuthenticationToken;
import com.research.system.domain.WxUser;
@ -62,7 +61,7 @@ public class SysLoginService
@Resource
private SessionService sessionService;
@Resource
private ExternalService externalService;
private ExternalServiceUtil externalServiceUtil;
/**
* 登录验证
*
@ -119,7 +118,7 @@ public class SysLoginService
if(StrUtil.isNotEmpty(wxCode)){
try {
//通过code获取openId
MiniProgramUser wxmpUser = externalService.sendWxmpLoginRequest(wxCode);
MiniProgramUser wxmpUser = externalServiceUtil.sendWxmpLoginRequest(wxCode);
if (StringUtils.isNotNull(wxmpUser)) {
//处理openId
userService.disposeUserByOpenId(wxmpUser.getOpenid(),loginUser.getUserId(), wxmpUser.getUnionid());

12
research-framework/src/main/java/com/research/framework/web/service/UserDetailsServiceImpl.java

@ -1,20 +1,15 @@
package com.research.framework.web.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.research.common.core.domain.entity.SysRole;
import com.research.common.exception.base.BaseException;
import com.research.common.wechat.ExternalService;
import com.research.common.utils.ExternalServiceUtil;
import com.research.common.wechat.bean.MiniProgramUser;
import com.research.framework.datasource.DataSourceManager;
import com.research.framework.datasource.DynamicDataSourceContextHolder;
import com.research.system.domain.po.PrjProjInfo;
import com.research.system.domain.po.PrjProjInfoExample;
import com.research.system.domain.vo.TmsLoginUserVo;
import com.research.system.mapper.SysRoleMapper;
import com.research.system.persist.mapper.PrjProjInfoMapper;
import com.research.system.service.ISysRoleService;
import com.research.system.service.TmsLoginService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -32,7 +27,6 @@ import com.research.common.utils.StringUtils;
import com.research.system.service.ISysUserService;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Set;
@ -55,7 +49,7 @@ public class UserDetailsServiceImpl implements UserDetailsService
@Autowired
private SysPermissionService permissionService;
@Resource
private ExternalService externalService;
private ExternalServiceUtil externalServiceUtil;
@Resource
private TmsLoginService dmsLoginService;
@Resource
@ -186,7 +180,7 @@ public class UserDetailsServiceImpl implements UserDetailsService
public UserDetails loadUserByWxmpOpenId(String wxmpCode) throws UsernameNotFoundException {
//通过code获取openId
MiniProgramUser wxmpUser = externalService.sendWxmpLoginRequest(wxmpCode);
MiniProgramUser wxmpUser = externalServiceUtil.sendWxmpLoginRequest(wxmpCode);
if (StringUtils.isNull(wxmpUser)) {
throw new ServiceException("通过code获取openId失败");
}

6
research-framework/src/main/java/com/research/framework/web/service/WebTmsLoginService.java

@ -12,10 +12,10 @@ import com.research.common.exception.ServiceException;
import com.research.common.exception.base.BaseException;
import com.research.common.exception.user.*;
import com.research.common.utils.DateUtils;
import com.research.common.utils.ExternalServiceUtil;
import com.research.common.utils.MessageUtils;
import com.research.common.utils.StringUtils;
import com.research.common.utils.ip.IpUtils;
import com.research.common.wechat.ExternalService;
import com.research.common.wechat.bean.MiniProgramUser;
import com.research.framework.manager.AsyncManager;
import com.research.framework.manager.factory.AsyncFactory;
@ -59,7 +59,7 @@ public class WebTmsLoginService
private ISysConfigService configService;
@Resource
private ExternalService externalService;
private ExternalServiceUtil externalServiceUtil;
/**
* 登录验证
@ -331,7 +331,7 @@ public class WebTmsLoginService
if(StrUtil.isNotEmpty(wxCode)){
try {
//通过code获取openId
MiniProgramUser wxmpUser = externalService.sendWxmpLoginRequest(wxCode);
MiniProgramUser wxmpUser = externalServiceUtil.sendWxmpLoginRequest(wxCode);
if (StringUtils.isNotNull(wxmpUser)) {
//处理openId
userService.disposeUserByOpenId(wxmpUser.getOpenid(),loginUser.getUserId(), wxmpUser.getUnionid());

8
research-generator/src/main/resources/mbg.xml

@ -69,12 +69,12 @@
<!-- <table tableName="fud_fund_record" domainObjectName="FudFundRecord" enableDeleteByExample="false"/>-->
<!-- <table tableName="kts_kt_group" domainObjectName="KtsKtGroup" enableDeleteByExample="false"/>-->
<!-- <table tableName="kts_kt_group_member" domainObjectName="KtsKtGroupMember" enableDeleteByExample="false"/>-->
<!-- <table tableName="met_meeting_participant" domainObjectName="MetMeetingParticipant" enableDeleteByExample="false"/>-->
<!-- <table tableName="met_meeting_record" domainObjectName="MetMeetingRecord" enableDeleteByExample="false"/>-->
<table tableName="met_meeting_participant" domainObjectName="MetMeetingParticipant" enableDeleteByExample="false"/>
<table tableName="met_meeting_record" domainObjectName="MetMeetingRecord" enableDeleteByExample="false"/>
<!-- <table tableName="prj_proj_document" domainObjectName="PrjProjDocument" enableDeleteByExample="false"/>-->
<!-- <table tableName="prj_proj_info" domainObjectName="PrjProjInfo" enableDeleteByExample="false"/>-->
<!-- <table tableName="prj_proj_org" domainObjectName="PrjProjOrg" enableDeleteByExample="false"/>-->
<table tableName="kts_kt_group_member_aduit" domainObjectName="KtsKtGroupMemberAduit" enableDeleteByExample="false"/>
<!-- <table tableName="kts_kt_group_member_aduit" domainObjectName="KtsKtGroupMemberAduit" enableDeleteByExample="false"/>-->
<!-- <table tableName="srv_message" domainObjectName="SrvMessage" enableDeleteByExample="false"/>-->
<!-- <table tableName="shs_ckwx_category" domainObjectName="ShsCkwxCategory" enableDeleteByExample="false"/>-->
<!-- <table tableName="shs_ckwx_info" domainObjectName="ShsCkwxInfo" enableDeleteByExample="false"/>-->
@ -99,7 +99,7 @@
<!-- <table tableName="kt_research_content" domainObjectName="KtResearchContent" enableDeleteByExample="false"/>-->
<!-- <table tableName="kt_expected_outcomes" domainObjectName="KtExpectedOutcomes" enableDeleteByExample="false"/>-->
<!-- <table tableName="kt_config" domainObjectName="KtConfig" enableDeleteByExample="false"/>-->
<table tableName="tas_task" domainObjectName="TasTask" enableDeleteByExample="false"/>
<!-- <table tableName="tas_task" domainObjectName="TasTask" enableDeleteByExample="false"/>-->
<!-- <table tableName="tas_task_member" domainObjectName="TasTaskMember" enableDeleteByExample="false"/>-->
<!-- <table tableName="tas_deliverable" domainObjectName="TasDeliverable" enableDeleteByExample="false"/>-->
<!-- <table tableName="com_file" domainObjectName="ComFile" enableDeleteByExample="false"/>-->

2
research-system/src/main/java/com/research/system/domain/dto/GroupDto.java

@ -106,7 +106,7 @@ public class GroupDto {
private List<Long> roleIdList;
private Long ktGroupId;
private List<Long> ktGroupId;
private String parentMemberId;

4
research-system/src/main/java/com/research/system/mapper/SysUserMapper.java

@ -139,8 +139,8 @@ public interface SysUserMapper
/**
* 通过UnionId获取公众号OpenId
* @param unionId
* @param userId
* @return
*/
String getGzhOpenIdByUnionId(String unionId);
String getGzhOpenIdByUnionId(Long userId);
}

4
research-system/src/main/java/com/research/system/service/ISysUserService.java

@ -216,9 +216,9 @@ public interface ISysUserService
UserVo.MyselfVo getMyself();
/**
* 通过UnionId获取公众号OpenId
* 通过用户ID获取公众号OpenId
* @param unionId
* @return
*/
String getGzhOpenIdByUnionId(String unionId);
String getGzhOpenIdByUnionId(Long userId);
}

2
research-system/src/main/java/com/research/system/service/KtsGroupService.java

@ -37,7 +37,7 @@ public interface KtsGroupService {
List<GroupVO.MemberResult> childList(GroupDto.MemberQuery query);
KtsKtGroupMember addMember(GroupDto.AddMember dto);
void addMember(GroupDto.AddMember dto);
void delMember(CommonDto.DelDto dto);

135
research-system/src/main/java/com/research/system/service/impl/KtsGroupServiceImpl.java

@ -352,7 +352,7 @@ public class KtsGroupServiceImpl implements KtsGroupService {
}
@Override
public KtsKtGroupMember addMember(GroupDto.AddMember dto) {
public void addMember(GroupDto.AddMember dto) {
LoginUser loginUser = SecurityUtils.getLoginUser();
//检查添加的成员是否是当前用户所属的合作单位
Long projOrgId = ObjectUtil.isNull(dto.getProjOrgId()) ? dto.getOrgId() : dto.getProjOrgId();
@ -361,72 +361,73 @@ public class KtsGroupServiceImpl implements KtsGroupService {
}else if(!projOrgId.equals(loginUser.getUser().getOrgId())){
throw new BaseException("您无法在其他合作单位下添加或修改课题组成员");
}
//添加课题组成员
KtsKtGroupMember ktsKtGroupMember = BeanUtil.copyProperties(dto, KtsKtGroupMember.class);
ktsKtGroupMember.setEnrollTime(dto.getEnrollmentTime());
ktsKtGroupMember.setEnrollTime(dto.getEnrollmentTime());
if(dto.getType().contains("1")){
ktsKtGroupMember.setType("1");
}else {
ktsKtGroupMember.setType("2");
}
//id不为空则修改
if(ObjectUtil.isNotNull(dto.getId())){
//根据手机号查询课题组成员
KtsKtGroupMemberExample ktsKtGroupMemberExample = new KtsKtGroupMemberExample();
ktsKtGroupMemberExample.createCriteria()
.andMemberPhoneEqualTo(dto.getMemberPhone())
.andKtGroupIdEqualTo(dto.getKtGroupId())
.andIdNotEqualTo(dto.getId())
.andDelFlagEqualTo((byte) 0);
if(ktsKtGroupMemberMapper.countByExample(ktsKtGroupMemberExample) > 0){
throw new BaseException("该手机号已存在");
}
//根据手机号查询用户
SysUser sysUser = sysUserService.selectUserByPhone(dto.getMemberPhone());
if (sysUser != null && "0".equals(sysUser.getDelFlag())) {
//如果用户已存在,直接关联该用户
ktsKtGroupMember.setUserId(sysUser.getUserId());
}
ktsKtGroupMemberMapper.updateByPrimaryKeySelective(ktsKtGroupMember);
}else {
//检查课题组id,没有且课题组名称不为空,则创建课题组信息
if (dto.getKtGroupId() == null && StrUtil.isNotEmpty(dto.getKtGroupName())) {
GroupDto.Add add = new GroupDto.Add();
add.setKtGroupName(dto.getKtGroupName());
add.setProjId(dto.getProjId());
add.setProjOrgId(projOrgId);
add.setIntro(dto.getKtGroupIntro());
add.setName(dto.getMemberName());
add.setPhone(dto.getMemberPhone());
add.setParentKtId(dto.getParentKtId());
KtsKtGroup add1 = add(add);
ktsKtGroupMember.setKtGroupId(add1.getId());
for (Long ktGroupId : dto.getKtGroupId()) {
//添加课题组成员
KtsKtGroupMember ktsKtGroupMember = BeanUtil.copyProperties(dto, KtsKtGroupMember.class);
ktsKtGroupMember.setEnrollTime(dto.getEnrollmentTime());
ktsKtGroupMember.setEnrollTime(dto.getEnrollmentTime());
if (dto.getType().contains("1")) {
ktsKtGroupMember.setType("1");
} else {
ktsKtGroupMember.setType("2");
}
//id不为空则修改
if (ObjectUtil.isNotNull(dto.getId())) {
//根据手机号查询课题组成员
KtsKtGroupMemberExample ktsKtGroupMemberExample = new KtsKtGroupMemberExample();
ktsKtGroupMemberExample.createCriteria()
.andMemberPhoneEqualTo(dto.getMemberPhone())
.andKtGroupIdEqualTo(ktGroupId)
.andIdNotEqualTo(dto.getId())
.andDelFlagEqualTo((byte) 0);
if (ktsKtGroupMemberMapper.countByExample(ktsKtGroupMemberExample) > 0) {
throw new BaseException("该手机号已存在");
}
//根据手机号查询用户
SysUser sysUser = sysUserService.selectUserByPhone(dto.getMemberPhone());
if (sysUser != null && "0".equals(sysUser.getDelFlag())) {
//如果用户已存在,直接关联该用户
ktsKtGroupMember.setUserId(sysUser.getUserId());
}
ktsKtGroupMemberMapper.updateByPrimaryKeySelective(ktsKtGroupMember);
} else {
//检查课题组id,没有且课题组名称不为空,则创建课题组信息
if (dto.getKtGroupId() == null && StrUtil.isNotEmpty(dto.getKtGroupName())) {
GroupDto.Add add = new GroupDto.Add();
add.setKtGroupName(dto.getKtGroupName());
add.setProjId(dto.getProjId());
add.setProjOrgId(projOrgId);
add.setIntro(dto.getKtGroupIntro());
add.setName(dto.getMemberName());
add.setPhone(dto.getMemberPhone());
add.setParentKtId(dto.getParentKtId());
KtsKtGroup add1 = add(add);
ktsKtGroupMember.setKtGroupId(add1.getId());
}
//根据手机号查询课题组成员
KtsKtGroupMemberExample ktsKtGroupMemberExample = new KtsKtGroupMemberExample();
ktsKtGroupMemberExample.createCriteria().andMemberPhoneEqualTo(ktsKtGroupMember.getMemberPhone()).andKtGroupIdEqualTo(ktsKtGroupMember.getKtGroupId()).andDelFlagEqualTo((byte) 0);
List<KtsKtGroupMember> ktsKtGroupMembers = ktsKtGroupMemberMapper.selectByExample(ktsKtGroupMemberExample);
if (CollUtil.isNotEmpty(ktsKtGroupMembers)) {
throw new BaseException("该手机号已存在");
}
//根据手机号查询用户
SysUser sysUser = sysUserService.selectUserByPhone(ktsKtGroupMember.getMemberPhone());
if (sysUser != null && "0".equals(sysUser.getDelFlag())) {
//如果用户已存在,直接关联该用户
ktsKtGroupMember.setUserId(sysUser.getUserId());
//根据手机号查询课题组成员
KtsKtGroupMemberExample ktsKtGroupMemberExample = new KtsKtGroupMemberExample();
ktsKtGroupMemberExample.createCriteria().andMemberPhoneEqualTo(ktsKtGroupMember.getMemberPhone()).andKtGroupIdEqualTo(ktsKtGroupMember.getKtGroupId()).andDelFlagEqualTo((byte) 0);
List<KtsKtGroupMember> ktsKtGroupMembers = ktsKtGroupMemberMapper.selectByExample(ktsKtGroupMemberExample);
if (CollUtil.isNotEmpty(ktsKtGroupMembers)) {
throw new BaseException("该手机号已存在");
}
//根据手机号查询用户
SysUser sysUser = sysUserService.selectUserByPhone(ktsKtGroupMember.getMemberPhone());
if (sysUser != null && "0".equals(sysUser.getDelFlag())) {
//如果用户已存在,直接关联该用户
ktsKtGroupMember.setUserId(sysUser.getUserId());
}
ktsKtGroupMember.setId(IdUtil.getSnowflakeNextId());
ktsKtGroupMember.setCreateBy(SecurityUtils.getUsername());
ktsKtGroupMember.setMemberStatus((byte) 0);
ktsKtGroupMember.setAuditStatus((byte) 0);
ktsKtGroupMember.setCreateTime(new Date());
ktsKtGroupMember.setProjOrgId(dto.getProjOrgId());
ktsKtGroupMember.setDelFlag((byte) 0);
ktsKtGroupMemberMapper.insertSelective(ktsKtGroupMember);
}
ktsKtGroupMember.setId(IdUtil.getSnowflakeNextId());
ktsKtGroupMember.setCreateBy(SecurityUtils.getUsername());
ktsKtGroupMember.setMemberStatus((byte) 0);
ktsKtGroupMember.setAuditStatus((byte) 0);
ktsKtGroupMember.setCreateTime(new Date());
ktsKtGroupMember.setProjOrgId(dto.getProjOrgId());
ktsKtGroupMember.setDelFlag((byte) 0);
ktsKtGroupMemberMapper.insertSelective(ktsKtGroupMember);
}
return ktsKtGroupMember;
// //是否传了课题组ID,没传且课题组名称不为空,则添加课题组
@ -713,15 +714,17 @@ public class KtsGroupServiceImpl implements KtsGroupService {
continue;
}
if (memberResult.getTitle().contains("1") || memberResult.getTitle().contains("5") || memberResult.getTitle().contains("8") || memberResult.getTitle().contains("12")
|| memberResult.getTitle().contains("2") || memberResult.getTitle().contains("6") || memberResult.getTitle().contains("9") || memberResult.getTitle().contains("13")) {
|| memberResult.getTitle().contains("2") || memberResult.getTitle().contains("6") || memberResult.getTitle().contains("9") || memberResult.getTitle().contains("13")
|| memberResult.getTitle().contains("20") || memberResult.getTitle().contains("21")) {
title.setGj(title.getGj() + 1);
continue;
}
if (memberResult.getTitle().contains("3") || memberResult.getTitle().contains("10") || memberResult.getTitle().contains("14")) {
if (memberResult.getTitle().contains("3") || memberResult.getTitle().contains("10") || memberResult.getTitle().contains("14") || memberResult.getTitle().contains("19")) {
title.setZj(title.getZj() + 1);
continue;
}
if (memberResult.getTitle().contains("4") || memberResult.getTitle().contains("7") || memberResult.getTitle().contains("11") || memberResult.getTitle().contains("15") || memberResult.getTitle().contains("16")) {
if (memberResult.getTitle().contains("4") || memberResult.getTitle().contains("7") || memberResult.getTitle().contains("11") || memberResult.getTitle().contains("15")
|| memberResult.getTitle().contains("16") || memberResult.getTitle().contains("18")) {
title.setCj(title.getCj() + 1);
continue;
}

31
research-system/src/main/java/com/research/system/service/impl/MeetingServiceImpl.java

@ -2,9 +2,14 @@ package com.research.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.research.common.constant.WeiXinConstants;
import com.research.common.core.domain.entity.SysUser;
import com.research.common.exception.base.BaseException;
import com.research.common.utils.SecurityUtils;
import com.research.common.utils.SendGzhMessageUtil;
import com.research.common.utils.StringUtils;
import com.research.system.domain.dto.CommonDto;
import com.research.system.domain.dto.MeetingDto;
import com.research.system.domain.po.*;
@ -13,6 +18,7 @@ import com.research.system.persist.dao.MeetingDao;
import com.research.system.persist.mapper.MetMeetingParticipantMapper;
import com.research.system.persist.mapper.MetMeetingRecordMapper;
import com.research.system.service.ClientPrjProjInfoService;
import com.research.system.service.ISysUserService;
import com.research.system.service.MeetingService;
import org.springframework.stereotype.Service;
@ -37,6 +43,8 @@ public class MeetingServiceImpl implements MeetingService {
private ClientPrjProjInfoService clientPrjProjInfoService;
@Resource
private MeetingDao meetingDao;
@Resource
private ISysUserService sysUserService;
@Override
public List<MeetingVo.Result> queryList(MeetingDto.Query query) {
@ -91,6 +99,29 @@ public class MeetingServiceImpl implements MeetingService {
}
}
}
//发送通知
/**
* 公众号消息模板--线上会议预约成功通知 Lww6lrcCUpu4oykKKT07eRlbouZIzJd7Q7pGJaiiTRM
* 会议名称 {{thing6.DATA}}
* 会议码 {{character_string11.DATA}}
* 会议地点 {{thing7.DATA}}
* 参会时间 {{time4.DATA}}
*/
if (CollUtil.isNotEmpty(dto.getMetMeetingParticipantList())) {
for (Long aLong : dto.getMetMeetingParticipantList()) {
//通过userId查询公众号openId
String gzhOpenIdByUnionId = sysUserService.getGzhOpenIdByUnionId(aLong);
if (StringUtils.isEmpty(gzhOpenIdByUnionId)) {
continue;
}
SendGzhMessageUtil.sendGzhMessage(
WeiXinConstants.GzhMessageType.MEETING_AUDIT,
gzhOpenIdByUnionId,
CollUtil.newArrayList(metMeetingRecord.getMeetingTitle(), metMeetingRecord.getMeetingNumber(), "请登录科研共享平台查看详细地址。", DateUtil.format(metMeetingRecord.getMeetingBeginTime(), "yyyy-MM-dd HH:mm"))
);
}
}
}
@Override

164
research-system/src/main/java/com/research/system/service/impl/MemberAduitServiceImpl.java

@ -2,20 +2,17 @@ package com.research.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapBuilder;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON;
import com.research.common.constant.UserConstants;
import com.research.common.constant.WeiXinConstants;
import com.research.common.core.domain.entity.SysUser;
import com.research.common.exception.base.BaseException;
import com.research.common.utils.SecurityUtils;
import com.research.common.wechat.ExternalService;
import com.research.common.utils.ExternalServiceUtil;
import com.research.common.utils.SendGzhMessageUtil;
import com.research.system.domain.dto.MemberAduitDto;
import com.research.system.domain.po.*;
import com.research.system.domain.vo.MemberAduitVo;
@ -26,7 +23,6 @@ import com.research.system.persist.mapper.KtsKtGroupMemberMapper;
import com.research.system.persist.mapper.SrvMessageMapper;
import com.research.system.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@ -54,11 +50,9 @@ public class MemberAduitServiceImpl implements MemberAduitService {
@Resource
private KtsKtGroupMapper ktsKtGroupMapper;
@Resource
private ExternalService externalService;
private ExternalServiceUtil externalServiceUtil;
@Resource
private KtsKtGroupMemberMapper ktsKtGroupMemberMapper;
@Value(value = "${research.smsUrl}")
private String smsUrl;
@Override
public void register(MemberAduitDto.Register dto) {
@ -76,13 +70,7 @@ public class MemberAduitServiceImpl implements MemberAduitService {
throw new RuntimeException("账号已存在,请登录");
}
}
// //验证微信小程序是否已经提交注册
// KtsKtGroupMemberAduitExample wxAduitExample = new KtsKtGroupMemberAduitExample();
// wxAduitExample.createCriteria().andOpenIdEqualTo(dto.getOpenId()).andStatusEqualTo((byte) 0).andDelFlagEqualTo((byte) 0);
// if (ktsKtGroupMemberAduitMapper.countByExample(wxAduitExample) > 0) {
// //提示已申请
// throw new RuntimeException("此微信已提交注册,正在审核中,请耐心等待");
// }
//新加审核记录
KtsKtGroupMemberAduit ktsKtGroupMemberAduit = BeanUtil.copyProperties(dto, KtsKtGroupMemberAduit.class);
ktsKtGroupMemberAduit.setId(IdUtil.getSnowflakeNextId());
@ -90,7 +78,6 @@ public class MemberAduitServiceImpl implements MemberAduitService {
ktsKtGroupMemberAduit.setStatus((byte) 0);
//密码如果是空,给个默认密码
if (StrUtil.isEmpty(dto.getPassword())) {
// ktsKtGroupMemberAduit.setPassword(RandomUtil.randomString(10));
ktsKtGroupMemberAduit.setPassword("yxky_123#");
}
//根据提交的类型判断,判断审核类型
@ -122,42 +109,28 @@ public class MemberAduitServiceImpl implements MemberAduitService {
srvMessage.setStatus((byte) 0);
srvMessage.setReceiver(reviewerList.stream().map(String::valueOf).collect(Collectors.joining(",")));
srvMessageMapper.insertSelective(srvMessage);
//给审核人发送公众号通知
try {
//根据接收者的userId获取对应的公众号openId
reviewerList.forEach(userId -> {
String openId = sysUserService.getGzhOpenIdByUnionId(userId);
if(ObjectUtil.isNotNull(openId)){
//发送公众号通知。需要信息:用户名称、联系电话、申请时间、申请岗位
SendGzhMessageUtil.sendGzhMessage(
WeiXinConstants.GzhMessageType.USER_AUDIT,
openId,
Arrays.asList(dto.getMemberName(),
dto.getMemberPhone(),
DateUtil.format(new Date(), "yyyy-MM-dd"),
dto.getType().equals("1") ? "单位负责人" : "参与人员")
);
}
});
}catch (Exception e){
log.error("发送公众号通知失败", e);
}
}
// List<Long> reviewerList = new ArrayList<>();
// //2.查询该合作单位负责人角色的人 发送审核消息
// if (dto.getKtGroupId() != null || dto.getParentKtId() != null) {
// //101 合作单位负责人
// //102 项目负责人
// reviewerList = memberAduitDao.queryMemberIdList(dto.getProjOrgId(), 101L);
// }
// KtsKtGroupMemberAduit ktsKtGroupMemberAduit = BeanUtil.copyProperties(dto, KtsKtGroupMemberAduit.class);
// ktsKtGroupMemberAduit.setId(IdUtil.getSnowflakeNextId());
// ktsKtGroupMemberAduit.setStatus((byte) 0);
// if (CollUtil.isEmpty(dto.getRoleIdList())) {
// if (dto.getType().contains("0")) {
// ktsKtGroupMemberAduit.setRoleIdList("100");
// }else {
// ktsKtGroupMemberAduit.setRoleIdList("2");
// }
// }else {
// ktsKtGroupMemberAduit.setRoleIdList(dto.getRoleIdList().stream().map(String::valueOf).collect(Collectors.joining(",")));
// }
// ktsKtGroupMemberAduit.setReviewer(reviewerList.stream().map(String::valueOf).collect(Collectors.joining(",")));
// ktsKtGroupMemberAduitMapper.insertSelective(ktsKtGroupMemberAduit);
// if (CollUtil.isNotEmpty(reviewerList)) {
// //添加消息
// SrvMessage srvMessage = new SrvMessage();
// srvMessage.setId(IdUtil.getSnowflakeNextId());
// srvMessage.setContent("成员申请审核");
// srvMessage.setBusinessId(ktsKtGroupMemberAduit.getId());
// srvMessage.setStatus((byte) 0);
// srvMessage.setReceiver(reviewerList.stream().map(String::valueOf).collect(Collectors.joining(",")));
// srvMessageMapper.insertSelective(srvMessage);
// }
//3. 审核完成之后, 由项目负责人审核 项目负责人审核完之后,审核通过。
}
@Override
@ -217,6 +190,26 @@ public class MemberAduitServiceImpl implements MemberAduitService {
srvMessage.setStatus((byte) 0);
srvMessage.setReceiver(reviewerList.stream().map(String::valueOf).collect(Collectors.joining(",")));
srvMessageMapper.insertSelective(srvMessage);
//给审核人发送公众号通知
try {
//根据接收者的userId获取对应的公众号openId
reviewerList.forEach(userId -> {
String openId = sysUserService.getGzhOpenIdByUnionId(userId);
if(ObjectUtil.isNotNull(openId)){
//发送公众号通知。需要信息:用户名称、联系电话、申请时间、申请岗位
SendGzhMessageUtil.sendGzhMessage(
WeiXinConstants.GzhMessageType.USER_AUDIT,
openId,
Arrays.asList(ktsKtGroupMemberAduit.getMemberName(),
ktsKtGroupMemberAduit.getMemberPhone(),
DateUtil.format(new Date(), "yyyy-MM-dd"),
ktsKtGroupMemberAduit.getType().equals("1") ? "单位负责人" : "参与人员")
);
}
});
}catch (Exception e){
log.error("发送公众号通知失败", e);
}
}
}
}
@ -270,50 +263,6 @@ public class MemberAduitServiceImpl implements MemberAduitService {
ktsKtGroupMemberAduit.setReviewedPersion(SecurityUtils.getUserId());
ktsKtGroupMemberAduitMapper.updateByPrimaryKeySelective(ktsKtGroupMemberAduit);
// //通过的话判断当前审核级别, step = 0 ,需要查询项目负责人,添加项目负责人审核,发送通知
// Byte step = ktsKtGroupMemberAduit.getStep();
// //山西医科大学只审核一次
// if (step == 0 && ktsKtGroupMemberAduit.getProjOrgId() != 1L) {
// ktsKtGroupMemberAduit.setId(IdUtil.getSnowflakeNextId());
// ktsKtGroupMemberAduit.setStep((byte) 1);
// List<Long> list = memberAduitDao.queryMemberIdList(null, 102L);
// if (CollUtil.isEmpty(list)) {
// throw new BaseException("未查询到项目负责人信息");
// }
// ktsKtGroupMemberAduit.setReviewedPersion(null);
// ktsKtGroupMemberAduit.setReviewedTime(null);
// ktsKtGroupMemberAduit.setStatus((byte) 0);
// ktsKtGroupMemberAduit.setReviewer(list.stream().map(String::valueOf).collect(Collectors.joining(",")));
// ktsKtGroupMemberAduitMapper.insertSelective(ktsKtGroupMemberAduit);
// //添加消息
// SrvMessage srvMessage = new SrvMessage();
// srvMessage.setId(IdUtil.getSnowflakeNextId());
// srvMessage.setContent("成员申请审核");
// srvMessage.setBusinessId(ktsKtGroupMemberAduit.getId());
// srvMessage.setStatus((byte) 0);
// srvMessage.setReceiver(list.stream().map(String::valueOf).collect(Collectors.joining(",")));
// srvMessageMapper.insertSelective(srvMessage);
//
// } else {
// //审核成功, 添加成员
// GroupDto.AddMember addMember = new GroupDto.AddMember();
// if (StrUtil.isNotEmpty(ktsKtGroupMemberAduit.getRoleIdList())) {
// String[] split = ktsKtGroupMemberAduit.getRoleIdList().split(",");
// addMember.setRoleIdList(Arrays.stream(split).map(Long::parseLong).collect(Collectors.toList()));
// }
// BeanUtil.copyProperties(ktsKtGroupMemberAduit, addMember);
// addMember.setId(null);
// ktsGroupService.addMember(addMember);
//
//// //添加主库租户用户
//// TmsTenantUser tmsTenantUser = new TmsTenantUser();
//// tmsTenantUser.setCreateBy(SecurityUtils.getUsername());
//// tmsTenantUser.setCreateTime(new Date());
//// tmsTenantUser.setDelFlag((byte) 0);
//// tmsTenantUser.setPhonenumber(ktsKtGroupMemberAduit.getMemberPhone());
//// tmsTenantUser.setUserName(ktsKtGroupMemberAduit.getUsername());
//// tmsTenantUserService.insert(tmsTenantUser);
// }
}
private void saveKtGroupMember(Long userId, KtsKtGroupMemberAduit ktsKtGroupMemberAduit) {
@ -383,31 +332,12 @@ public class MemberAduitServiceImpl implements MemberAduitService {
//添加成功发送邮件,调用发送邮件的接口
try {
externalService.sendMail(ktsKtGroupMemberAduit.getMemberEmail(),
externalServiceUtil.sendMail(ktsKtGroupMemberAduit.getMemberEmail(),
"账号审核通过通知",
"您在“科研共享平台”注册的账号已审核通过,初始密码为:" + ktsKtGroupMemberAduit.getPassword() + "。请尽快登录并修改密码。");
// Map<String, Object> body = new HashMap<>();
// body.put("to", ktsKtGroupMemberAduit.getMemberEmail());
// body.put("subject", "账号审核通过通知");
// body.put("text", "您在“科研共享平台”注册的账号已审核通过,初始密码为:" + ktsKtGroupMemberAduit.getPassword() + "。请尽快登录并修改密码。");
// String jsonBody = JSONUtil.toJsonStr(body);
// String url = "http://127.0.0.1:7363/external/sendSimpleMail";
// HttpUtil.post(url, jsonBody);
}catch (Exception e){
log.error("发送邮件失败:{}", e.getMessage());
}
// //发送短信
// try {
// String body = HttpRequest.post(smsUrl).body(JSON.toJSONString(
// MapBuilder.create(new HashMap<String, Object>(3))
// .put("to", sysUser.getPhonenumber())
// .put("text", "您在“科研共享平台”注册的账号已审核通过,初始密码为:" + ktsKtGroupMemberAduit.getPassword() + "。请尽快登录并修改密码。")
// .build())
// ).timeout(5000).execute().body();
// System.out.println(body);
// }catch (Exception e){
// log.error("发送短信失败:{}", e.getMessage());
// }
return sysUser.getUserId();
}

4
research-system/src/main/java/com/research/system/service/impl/SysUserServiceImpl.java

@ -595,8 +595,8 @@ public class SysUserServiceImpl implements ISysUserService
}
@Override
public String getGzhOpenIdByUnionId(String unionId) {
return userMapper.getGzhOpenIdByUnionId(unionId);
public String getGzhOpenIdByUnionId(Long userId) {
return userMapper.getGzhOpenIdByUnionId(userId);
}
}

23
research-system/src/main/java/com/research/system/service/impl/TaskServiceImpl.java

@ -7,11 +7,13 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import com.research.common.constant.WeiXinConstants;
import com.research.common.core.domain.entity.SysRole;
import com.research.common.core.domain.model.LoginUser;
import com.research.common.exception.ServiceException;
import com.research.common.exception.base.BaseException;
import com.research.common.utils.SecurityUtils;
import com.research.common.utils.SendGzhMessageUtil;
import com.research.system.domain.dto.TaskDto;
import com.research.system.domain.po.*;
import com.research.system.domain.vo.ClientPrjProjInfoVo;
@ -572,6 +574,27 @@ public class TaskServiceImpl implements ITaskService {
updateMember.setUpdateTime(new Date());
taskMemberMapper.updateByPrimaryKeySelective(updateMember);
}
// try {
// //根据接收者的userId获取对应的公众号openId
// reviewerList.forEach(userId -> {
// String openId = sysUserService.getGzhOpenIdByUnionId(tasTaskMember.get);
// if(ObjectUtil.isNotNull(openId)){
// //发送公众号通知。需要信息:用户名称、联系电话、申请时间、申请岗位
// SendGzhMessageUtil.sendGzhMessage(
// WeiXinConstants.GzhMessageType.USER_AUDIT,
// openId,
// Arrays.asList(ktsKtGroupMemberAduit.getMemberName(),
// ktsKtGroupMemberAduit.getMemberPhone(),
// DateUtil.format(new Date(), "yyyy-MM-dd"),
// ktsKtGroupMemberAduit.getType().equals("1") ? "单位负责人" : "参与人员")
// );
// }
// });
// }catch (Exception e){
// log.error("发送公众号通知失败", e);
// }
}
@Override

16
research-system/src/main/java/com/research/system/service/impl/TmsLoginServiceImpl.java

@ -1,32 +1,24 @@
package com.research.system.service.impl;
import cn.hutool.core.map.MapBuilder;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson2.JSON;
import com.research.common.constant.CacheConstants;
import com.research.common.core.domain.PhoneCode;
import com.research.common.core.domain.entity.SysUser;
import com.research.common.core.redis.RedisCache;
import com.research.common.exception.base.BaseException;
import com.research.common.wechat.ExternalService;
import com.research.system.domain.dto.TmsTenantUserDto;
import com.research.common.utils.ExternalServiceUtil;
import com.research.system.domain.po.TmsTenant;
import com.research.system.domain.po.TmsTenantExample;
import com.research.system.domain.vo.SmsVo;
import com.research.system.domain.vo.TmsLoginUserVo;
import com.research.system.mapper.SysUserMapper;
import com.research.system.persist.dao.TmsUserDao;
import com.research.system.persist.mapper.TmsTenantMapper;
import com.research.system.persist.mapper.TmsTenantUserMapper;
import com.research.system.service.TmsLoginService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
@ -45,7 +37,7 @@ public class TmsLoginServiceImpl implements TmsLoginService {
@Resource
private TmsTenantMapper tmsTenantMapper;
@Resource
private ExternalService externalService;
private ExternalServiceUtil externalServiceUtil;
@Resource
private RedisCache redisCache;
@Value(value = "${research.smsCodeSendIntervalInSeconds}")
@ -125,8 +117,8 @@ public class TmsLoginServiceImpl implements TmsLoginService {
phoneCode.setCode(RandomUtil.randomString("0123456789", 4));
//3.发送验证码
log.info("ExternalService-SendSms:{},{},{}",phone,phoneCode.getCode(),smsCodeExpireInSeconds);
Object object = externalService.sendSmsCode(phone, phoneCode.getCode(), smsCodeExpireInSeconds);
log.info("ExternalServiceUtil-SendSms:{},{},{}",phone,phoneCode.getCode(),smsCodeExpireInSeconds);
Object object = externalServiceUtil.sendSmsCode(phone, phoneCode.getCode(), smsCodeExpireInSeconds);
if(ObjectUtil.isNull(object)){
throw new BaseException("短信验证码发送失败");
}

2
research-system/src/main/resources/mapper/system/SysUserMapper.xml

@ -252,7 +252,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update>
<select id="getGzhOpenIdByUnionId" resultType="java.lang.String">
select open_id from srsp_new.ums_gzh_info where union_id = #{unionId} and del_status = '0'
select open_id from srsp_new.ums_gzh_info where union_id = (select union_id from sys_user where user_id = #{userId} and del_flag = '0') and del_status = '0'
</select>
</mapper>
Loading…
Cancel
Save