Kaynağa Gözat

Merge remote-tracking branch 'origin/saas' into saas

yanite 3 yıl önce
ebeveyn
işleme
fc8cc0c7c6

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -93,6 +93,8 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
 
     List<SimpleUserDto> getUsersSimpleInfo(@Param("userIds") List<Integer> userIds);
 
+    SimpleUserDto getSimpleUser(@Param("userId") Integer userId);
+
     /**
      * @param organId:   分部编号
      * @param subjectId: 声部编号列表

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SimpleUserDto.java

@@ -36,6 +36,16 @@ public class SimpleUserDto {
 
     private Integer positionId;
 
+    private Integer tenantId;
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
     public Integer getPositionId() {
         return positionId;
     }

+ 91 - 0
mec-biz/src/main/java/com/ym/mec/biz/event/SendMessageChangeEvent.java

@@ -0,0 +1,91 @@
+package com.ym.mec.biz.event;
+
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import org.springframework.context.ApplicationEvent;
+
+import java.util.Map;
+
+public class SendMessageChangeEvent extends ApplicationEvent {
+
+    //消息模板
+    private MessageTypeEnum msgTemplate;
+
+    //极光推送目标客户端
+    private String pushType;
+
+    //跳转地址
+    private String url;
+
+    //参数
+    private Object[] args;
+
+    //发送模式(SMS,PUSH,EMAIL)
+    private MessageSenderPluginContext.MessageSender messageSender;
+
+    //目标用户
+    private Map<Integer, String> receivers;
+
+    public SendMessageChangeEvent(Object source, MessageSenderPluginContext.MessageSender messageSender,
+                                  MessageTypeEnum msgTemplate,
+                                  Map<Integer, String> receivers,
+                                  String url,
+                                  String pushType,
+                                  Object... args) {
+        super(source);
+        this.msgTemplate = msgTemplate;
+        this.pushType = pushType;
+        this.url = url;
+        this.args = args;
+        this.messageSender = messageSender;
+        this.receivers = receivers;
+    }
+
+    public MessageTypeEnum getMsgTemplate() {
+        return msgTemplate;
+    }
+
+    public void setMsgTemplate(MessageTypeEnum msgTemplate) {
+        this.msgTemplate = msgTemplate;
+    }
+
+    public String getPushType() {
+        return pushType;
+    }
+
+    public void setPushType(String pushType) {
+        this.pushType = pushType;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public Object[] getArgs() {
+        return args;
+    }
+
+    public void setArgs(Object[] args) {
+        this.args = args;
+    }
+
+    public MessageSenderPluginContext.MessageSender getMessageSender() {
+        return messageSender;
+    }
+
+    public void setMessageSender(MessageSenderPluginContext.MessageSender messageSender) {
+        this.messageSender = messageSender;
+    }
+
+    public Map<Integer, String> getReceivers() {
+        return receivers;
+    }
+
+    public void setReceivers(Map<Integer, String> receivers) {
+        this.receivers = receivers;
+    }
+}

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/event/listener/SendMessageListener.java

@@ -0,0 +1,41 @@
+package com.ym.mec.biz.event.listener;
+
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.event.SendMessageChangeEvent;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import org.springframework.context.ApplicationListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Map;
+
+//发送短信,邮件,推送(暂时没用到)
+@Component
+public class SendMessageListener implements ApplicationListener<SendMessageChangeEvent> {
+
+    @Resource
+    private SysMessageService sysMessageService;
+    @Resource
+    private TeacherDao teacherDao;
+
+    @Async
+    @Override
+    public void onApplicationEvent(SendMessageChangeEvent event) {
+        Map<Integer, String> receivers = event.getReceivers();
+        if(receivers.size() > 0){
+            Integer userId = receivers.keySet().iterator().next();
+            SimpleUserDto simpleUserDto = teacherDao.getSimpleUser(userId);
+            TenantContextHolder.setTenantId(simpleUserDto.getTenantId());
+            sysMessageService.batchSendMessage(event.getMessageSender()
+                    , event.getMsgTemplate(),
+                    event.getReceivers(), null, 0,
+                    event.getUrl(), event.getPushType(),
+                    Arrays.stream(event.getArgs()).toArray(Object[]::new));
+            TenantContextHolder.clearTenantId();
+        }
+    }
+}

+ 11 - 3
mec-biz/src/main/java/com/ym/mec/biz/event/listener/SendSeoMessageListener.java

@@ -1,9 +1,11 @@
 package com.ym.mec.biz.event.listener;
 
-import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.event.SendSeoMessageChangeEvent;
 import com.ym.mec.biz.service.SysEmployeePositionService;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import org.springframework.context.ApplicationListener;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
@@ -12,6 +14,7 @@ import javax.annotation.Resource;
 import java.util.Arrays;
 import java.util.Set;
 
+//发送站内消息
 @Component
 public class SendSeoMessageListener implements ApplicationListener<SendSeoMessageChangeEvent> {
 
@@ -19,20 +22,25 @@ public class SendSeoMessageListener implements ApplicationListener<SendSeoMessag
     private SysMessageService sysMessageService;
     @Resource
     private SysEmployeePositionService employeePositionService;
+    @Resource
+    private OrganizationDao organizationDao;
 
     @Async
     @Override
     public void onApplicationEvent(SendSeoMessageChangeEvent event) {
+        Organization organization = organizationDao.get(event.getOrganId());
+        TenantContextHolder.setTenantId(organization.getTenantId());
         //获取当前分部,指定角色的用户列表
-        Set<Integer> targetUserIdList = employeePositionService.queryUserIdByRoleId(event.getRoleArr(), event.getOrganId());
+        Set<Integer> targetUserIdList = employeePositionService.queryUserIdByRoleId(event.getRoleArr(), organization.getId());
         if(event.getTargetId() != null){
             targetUserIdList.add(event.getTargetId());
         }
         if(targetUserIdList.size() > 0){
             sysMessageService.batchSeoMessage(targetUserIdList,
                     event.getMsgTemplate(),
-                    JSONObject.toJSONString(event.getMemo()),
+                    event.getMemo(),
                     Arrays.stream(event.getArgs()).toArray(Object[]::new));
         }
+        TenantContextHolder.clearTenantId();
     }
 }

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/event/source/SendMessageSource.java

@@ -0,0 +1,25 @@
+package com.ym.mec.biz.event.source;
+
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.event.SendMessageChangeEvent;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+@Component
+public class SendMessageSource {
+    @Resource
+    private ApplicationContext applicationContext;
+
+    public void batchSendMessage(MessageSenderPluginContext.MessageSender messageSender,
+                                 MessageTypeEnum msgTemplate,
+                                 Map<Integer, String> receivers,
+                                 String url,
+                                 String pushType,
+                                 Object... args){
+        applicationContext.publishEvent(new SendMessageChangeEvent(this,messageSender,msgTemplate,receivers,url,pushType,args));
+    }
+}

+ 11 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -5,8 +5,10 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysMessageDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.WaitSendMessageDao;
 import com.ym.mec.biz.dal.dto.Mapper;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.dto.SysMessageDto;
 import com.ym.mec.biz.dal.entity.SysEmail;
 import com.ym.mec.biz.dal.entity.SysMessage;
@@ -28,6 +30,7 @@ import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
@@ -57,35 +60,26 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Autowired
 	private SysMessageDao sysMessageDao;
-
 	@Autowired
 	private SysMessageConfigService sysMessageConfigService;
-
 	@Autowired
 	private MessageSenderPluginContext messageSenderPluginContext;
-
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
-
-
+	@Autowired
+	private TeacherDao teacherDao;
 	@Autowired
 	private WaitSendMessageDao waitSendMessageDao;
-
 	@Autowired
 	private SysConfigDao sysConfigDao;
-
 	@Autowired
 	private ImFeignService imFeignService;
-
 	@Autowired
 	private RedisCache<String, Object> redisCache;
-
 	@Autowired
 	private SysEmailServiceImpl sysEmailService;
-
 	// 验证码有效期
 	public static final int CODE_EXPIRE = 60 * 5;
-
 	// 发送验证码的间隔时间
 	public static final int CODE_INTERVAL_TIME = 60;
 
@@ -310,8 +304,12 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum type, Map<Integer, String> receivers, Date triggerTime, Integer readStatus,
 			String url,String jpushType, Object... args) {
 		if (receivers == null || receivers.size() == 0) {
-			throw new BizException("接收地址不能为空");
+			LOGGER.error("接收地址不能为空");
+			return;
 		}
+		SimpleUserDto simpleUserDto = teacherDao.getSimpleUser(receivers.keySet().iterator().next());
+		TenantContextHolder.setTenantId(simpleUserDto.getTenantId());
+
 		// email data from database load, 使用接收者 tenantId, 假设发送者和接收者为同一机构
 		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
 			Integer userId = receivers.keySet().stream().findFirst().orElse(-1);
@@ -381,6 +379,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		LOGGER.info("batch 添加消息");
 		addMessage(receivers, messageConfig.getDescription(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), triggerTime, mode, status, errorMsg, readStatus,
 				url, messageConfig.getGroup(),jpushType);
+		TenantContextHolder.clearTenantId();
 	}
 
 

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/SysEmployeePositionMapper.xml

@@ -110,7 +110,7 @@
 		LEFT JOIN sys_position sp ON sp.id_ = sep.role_id_
 		LEFT JOIN employee e ON e.user_id_ = sep.user_id_
 		WHERE sep.tenant_id_ = #{tenantId} AND FIND_IN_SET(#{organId},e.organ_id_list_) AND sp.role_code_ IN
-		<foreach collection="roleArr" item="role" open="(" close=")">
+		<foreach collection="roleArr" item="role" open="(" close=")" separator=",">
 			#{role}
 		</foreach>
 	</select>

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -1424,4 +1424,14 @@
         <include refid="queryMemberStudentDataCondition"></include>
         <include refid="global.limit"></include>
     </select>
+    <select id="getSimpleUser" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
+        SELECT
+            su.id_ userId,
+            su.username_ nickName,
+            su.real_name_ userName,
+            su.gender_ gender,
+            su.phone_ phone,
+            su.tenant_id_ tenantId
+        FROM sys_user su WHERE su.id_ = #{userId}
+    </select>
 </mapper>