guq 6 роки тому
батько
коміт
78bd0c641e

+ 46 - 0
applications/wechat/wechat-auth/src/main/java/com/usoftchina/smartschool/wechat/auth/context/TransfersContextHodler.java

@@ -0,0 +1,46 @@
+package com.usoftchina.smartschool.wechat.auth.context;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author: guq
+ * @create: 2019-01-11 17:53
+ **/
+public class TransfersContextHodler {
+
+    private static final String SCHOOLID = "school_id";
+
+    private static final ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal<>();
+
+    public static void set(String key, Object value) {
+        Map<String, Object> map = threadLocal.get();
+        if (map == null) {
+            map = new HashMap<>(1);
+            threadLocal.set(map);
+        }
+        map.put(key, value);
+    }
+
+    public static Object get(String key) {
+        Map<String, Object> map = threadLocal.get();
+        if (map == null) {
+            return null;
+        }
+        return map.get(key);
+    }
+
+    public static void setSchoolId(Long schoolid) {
+        set(SCHOOLID, schoolid);
+    }
+
+    public static Long getSchoolId() {
+        Object value = get(SCHOOLID);
+        return getLongValue(value);
+    }
+
+     public static long getLongValue(Object obj) {
+        return (null == obj || obj.toString().isEmpty()) ? -1L : Long.valueOf(obj.toString());
+    }
+}

+ 2 - 1
applications/wechat/wechat-auth/src/main/java/com/usoftchina/smartschool/wechat/auth/interceptor/OpenApiAuthInterceptor.java

@@ -7,6 +7,7 @@ import com.usoftchina.smartschool.school.dto.SysSchoolDTO;
 import com.usoftchina.smartschool.utils.http.HmacUtils;
 import com.usoftchina.smartschool.wechat.auth.annotation.IgnoreOpenApiAuth;
 import com.usoftchina.smartschool.wechat.auth.configuration.OpenApiConfig;
+import com.usoftchina.smartschool.wechat.auth.context.TransfersContextHodler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -67,8 +68,8 @@ public class OpenApiAuthInterceptor extends HandlerInterceptorAdapter{
                 //获取密钥
                 Result<SysSchoolDTO> result = schoolApi.find(schoolName);
                 if (result.isSuccess() && null != result.getData()) {
+                    TransfersContextHodler.setSchoolId(result.getData().getSchool_id());
                     String localSign = null;
-                    //TransfersContextHodler.setB2bCompanyId(companyResult.getData().getId());
                     localSign = result.getData().getSchool_accesssecret() == null ? HmacUtils.encode(urlMessage) :
                                 HmacUtils.encode(urlMessage, result.getData().getSchool_accesssecret());
                     //if (servletPath.indexOf("") > -1) {

+ 28 - 0
applications/wechat/wechat-dto/src/main/java/com/usoftchina/smartschool/wechat/dto/MessageInfoDTO.java

@@ -25,6 +25,11 @@ public class MessageInfoDTO implements Serializable{
      */
     private String touser;
 
+    /**
+     * UserType
+     */
+    private int userType;
+
     /**
      * 微信模板id
      */
@@ -48,6 +53,21 @@ public class MessageInfoDTO implements Serializable{
 
     private String url;
 
+    /**
+     * 推送类型
+     */
+    public static class UserType {
+        public static final int OPENID = 0;
+        /**
+         * 老师
+         */
+        public static final int TEACHER = 1;
+        /**
+         * 家长
+         */
+        public static final int PARENT = 2;
+    }
+
     public String getAppId() {
         return appId;
     }
@@ -159,4 +179,12 @@ public class MessageInfoDTO implements Serializable{
     public void setKeyword6(String keyword6) {
         this.keyword6 = keyword6;
     }
+
+    public int getUserType() {
+        return userType;
+    }
+
+    public void setUserType(int userType) {
+        this.userType = userType;
+    }
 }

+ 6 - 0
applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/mapper/BrokerMessageLogMapper.java

@@ -3,6 +3,8 @@ package com.usoftchina.smartschool.wechat.mapper;
 
 import com.usoftchina.smartschool.wechat.po.BrokerMessagelog;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
 
 /**
  * @author: guq
@@ -31,4 +33,8 @@ public interface BrokerMessageLogMapper {
     int updateMessageLogandAddRetry(BrokerMessagelog record);
 
     void updateSuccess(String msgId);
+
+    String SelectTeacherOpenId(@Param("name") String name, @Param("schoolId") Long schoolId);
+
+    String SelectParentOpenId(@Param("name") String name, @Param("schoolId") Long schoolId);
 }

+ 2 - 0
applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/po/MessageInfo.java

@@ -30,6 +30,8 @@ public class MessageInfo implements Serializable {
      */
     private String touser;
 
+    private int userType;
+
     /**
      * 微信模板id
      */

+ 15 - 0
applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/service/ReceiveService.java

@@ -3,6 +3,8 @@ package com.usoftchina.smartschool.wechat.service;
 import com.rabbitmq.client.Channel;
 
 import com.usoftchina.smartschool.base.Result;
+import com.usoftchina.smartschool.wechat.auth.context.TransfersContextHodler;
+import com.usoftchina.smartschool.wechat.dto.MessageInfoDTO;
 import com.usoftchina.smartschool.wechat.mapper.BrokerMessageLogMapper;
 import com.usoftchina.smartschool.wechat.po.MessageInfo;
 import com.usoftchina.smartschool.wechat.po.MessagePackage;
@@ -60,6 +62,8 @@ public class ReceiveService {
         int count = 0;
         for (MessageInfo msg : data) {
             if (!msg.getSend()) {
+                //处理openid,如果不存在openid,则直接忽略
+                getOpenId(msg);
                 result = wxPushService.wechatPush(msg);
                 if (result.isSuccess()) {
                     msg.setSend(true);
@@ -92,4 +96,15 @@ public class ReceiveService {
         //重新返回队列 重新消费
         //channel.basicNack(deliveryTag,false,true);
     }
+
+    private void getOpenId(MessageInfo msg) {
+        String openId = msg.getTouser();
+        Long school = TransfersContextHodler.getSchoolId();
+        if (msg.getUserType() == MessageInfoDTO.UserType.PARENT) {
+           openId = brokerMessageLogMapper.SelectParentOpenId(msg.getTouser(), school);
+        }else if(msg.getUserType() == MessageInfoDTO.UserType.TEACHER) {
+           openId = brokerMessageLogMapper.SelectTeacherOpenId(msg.getTouser(), school);
+        }
+        msg.setTouser(openId);
+    }
 }

+ 11 - 0
applications/wechat/wechat-server/src/main/resources/mapper/BrokermessagelogMapper.xml

@@ -125,4 +125,15 @@
   <update id="updateSuccess" parameterType="string">
     update BrokerMessagelog set status='投递成功',reason='' where msgid = #{msgId}
   </update>
+
+  <select id="SelectTeacherOpenId" resultType="string">
+    select openid from sys_teacher where teacher_name=#{name} and school_id=#{schoolId}  and
+    ifnull(openid,'') != ''  limit 0,1
+  </select>
+
+
+  <select id="SelectParentOpenId" resultType="string">
+    select openid from sys_parents where  parents_name=#{name} and school_id=#{schoolId}
+    and   ifnull(openid,'')  != ''  limit 0,1
+  </select>
 </mapper>