Althars123 il y a 3 ans
Parent
commit
2be02c6ad9

+ 9 - 3
twzd-service/src/main/java/com/miaxis/wx/domain/WxForeverCode.java

@@ -44,7 +44,13 @@ public class WxForeverCode extends BaseBusinessEntity{
     @Excel(name = "微信昵称")
     @TableField("nick_name")
     @ApiModelProperty(value = "微信昵称")
-    private Long nickName;
+    private String nickName;
+
+    /** 微信昵称 */
+    @Excel(name = "素材id")
+    @TableField("media_id")
+    @ApiModelProperty(value = "素材id")
+    private String mediaId;
 
     /** 状态  1:有效(默认) 0:失效  */
     @Excel(name = "状态  1:有效(默认) 0:失效 ")
@@ -73,11 +79,11 @@ public class WxForeverCode extends BaseBusinessEntity{
     public String getCode(){
         return code;
     }
-    public void setNickName(Long nickName){
+    public void setNickName(String nickName){
         this.nickName = nickName;
     }
 
-    public Long getNickName(){
+    public String getNickName(){
         return nickName;
     }
     public void setStatus(Integer status){

+ 3 - 3
twzd-service/src/main/java/com/miaxis/wx/service/IWxMessageEvenService.java

@@ -14,20 +14,20 @@ public interface IWxMessageEvenService {
     /**
      * 扫码关注事件
      * @param fromUserName 发送方帐号(一个OpenID)
-     * @param openid 推荐人openid
      * @param token 凭证
      * @param userName 微信名称
      * @return
      */
-    String scanSubscribeEvent(String fromUserName,String openid,String token,String userName);
+    String scanSubscribeEvent(String fromUserName,String eventKey,String token,String userName);
 
     /**
      * click获取分销二维码事件
      * @param fromUserName 发送方帐号(一个OpenID)
      * @param token 凭证
+     * @param isForever 是否是永久二维码
      * @return
      */
-    String gainTicketEvent(String fromUserName,String token);
+    String gainTicketEvent(String fromUserName, String token, boolean isForever);
 
 
 }

+ 29 - 5
twzd-service/src/main/java/com/miaxis/wx/service/impl/WxGzhServiceImpl.java

@@ -2,13 +2,16 @@ package com.miaxis.wx.service.impl;
 
 import cn.hutool.json.XML;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.domain.entity.UserInfo;
 import com.miaxis.common.utils.StringUtils;
 import com.miaxis.common.utils.wx.MessageUtil;
 import com.miaxis.feign.service.IWxSendService;
 import com.miaxis.system.service.ISysUserService;
+import com.miaxis.wx.domain.WxForeverCode;
 import com.miaxis.wx.mapper.WxMenuMapper;
+import com.miaxis.wx.service.IWxForeverCodeService;
 import com.miaxis.wx.service.IWxGzhService;
 import com.miaxis.wx.service.IWxMessageEvenService;
 import com.qcloud.cos.COSClient;
@@ -45,6 +48,8 @@ public class WxGzhServiceImpl implements IWxGzhService {
 
     private final IWxMessageEvenService wxMessageEvenService;
 
+    private final IWxForeverCodeService wxForeverCodeService;
+
     @Value("${app.appid}")
     private String appid;
 
@@ -104,12 +109,27 @@ public class WxGzhServiceImpl implements IWxGzhService {
             String fromUserName = jsonObjectData.getStr("FromUserName");
             // 区分消息类型
             String msgType = jsonObjectData.getStr("MsgType");
+            //获取用户信息
+            String userInfoResult = wxSendService.userInfo(this.getGzhToken(), fromUserName, "zh_CN");
+            JSONObject jsonObj = JSONObject.parseObject(userInfoResult);
 
             // 普通消息
             if (MessageUtil.MESSAGE_TEXT.equals(msgType)) { // 文本消息
                 log.info("2.1...");
                 String content = jsonObjectData.getStr("Content");
-                if (content.startsWith("你好")){
+                WxForeverCode wxForeverCode = wxForeverCodeService.getOne(new QueryWrapper<WxForeverCode>().eq("code", content).eq("openid",null));
+                //若该口令为未使用的口令
+                if (wxForeverCode != null){
+                    log.info("2.1.1:口令有效,生成永久二维码");
+                    String mediaId = wxMessageEvenService.gainTicketEvent(fromUserName, this.getGzhToken(),true);
+                    //更新口令数据对象
+                    wxForeverCode.setOpenid(jsonObj.getString("openid"));
+                    wxForeverCode.setNickName(jsonObj.getString("nickname"));
+                    wxForeverCode.setMediaId(mediaId);
+                    wxForeverCodeService.updateById(wxForeverCode);
+                    return MessageUtil.initImage(fromUserName,toUserName,mediaId);
+                }
+                else if (content.startsWith("你好")){
                     return MessageUtil.initText(fromUserName, toUserName, "你好啊");
                 }else if (content.startsWith("傻逼")){
                     return MessageUtil.initText(fromUserName, toUserName, "你才是煞笔");
@@ -127,9 +147,7 @@ public class WxGzhServiceImpl implements IWxGzhService {
                 if (MessageUtil.MESSAGE_SUBSCRIBE.equals(event)) { // 关注事件 或 扫描二维码关注事件
                     log.info("3.1...");
 
-                    //获取用户信息
-                    String userInfoResult = wxSendService.userInfo(this.getGzhToken(), fromUserName, "zh_CN");
-                    JSONObject jsonObj = JSONObject.parseObject(userInfoResult);
+
                     UserInfo user = userService.getStudentByOpenId(fromUserName);
                     UserInfo userInfo = new UserInfo();
                     if (user == null){
@@ -165,7 +183,13 @@ public class WxGzhServiceImpl implements IWxGzhService {
                     log.info("3.3.....click:" + jsonObjectData.get("EventKey"));
                     //判断事件KEY值,与自定义菜单接口中KEY值对应
                     if ("generateTicket".equals(jsonObjectData.get("EventKey"))){ //获取分销二维码
-                        String mediaId = wxMessageEvenService.gainTicketEvent(fromUserName, this.getGzhToken());
+                        //先判定之前是否存在永久码,若存在,则返回相应的素材id
+                        WxForeverCode wxForeverCode = wxForeverCodeService.getOne(new QueryWrapper<WxForeverCode>().eq("openid",fromUserName));
+                        if (wxForeverCode!=null){
+                            log.info("3.4:直接返回永久码图片");
+                            return wxForeverCode.getMediaId();
+                        }
+                        String mediaId = wxMessageEvenService.gainTicketEvent(fromUserName, this.getGzhToken(), false);
                         return MessageUtil.initImage(fromUserName,toUserName,mediaId);
                     }
 

+ 26 - 7
twzd-service/src/main/java/com/miaxis/wx/service/impl/WxMessageEvenServiceImpl.java

@@ -69,20 +69,19 @@ public class WxMessageEvenServiceImpl implements IWxMessageEvenService {
     /**
      * 扫码关注事件
      * @param fromUserName 发送方帐号(一个OpenID)
-     * @param openid 推荐人openid
+     * @param eventKey
      * @param token 凭证
      * @param userName 微信名称
      * @return
      */
     @Override
-    public String scanSubscribeEvent(String fromUserName, String openid,String token,String userName) {
+    public String scanSubscribeEvent(String fromUserName, String eventKey,String token,String userName) {
 
         String message = "";
         //判断是否存在父、子级推广关系
         List<WxSpreadRelation> spreadRelations = wxSpreadRelationService.list(new QueryWrapper<WxSpreadRelation>().eq("openid", fromUserName));
         List<WxSpreadRelation> spreads = wxSpreadRelationService.list(new QueryWrapper<WxSpreadRelation>().eq("parent_openid", fromUserName));
-        //String openid = (String) redisTemplate.opsForValue().get(Constants.GZH_TICKET_KEY + ticket);
-
+        String openid = eventKey.split("_")[1];
         if (spreadRelations.isEmpty() && spreads.isEmpty()){
             //保存推广关系表
             WxSpreadRelation wxSpreadRelation = new WxSpreadRelation();
@@ -110,7 +109,7 @@ public class WxMessageEvenServiceImpl implements IWxMessageEvenService {
      * @return
      */
     @Override
-    public String gainTicketEvent(String fromUserName,String token) {
+    public String gainTicketEvent(String fromUserName, String token, boolean isForever) {
 
         //发送客服信息
         messageCustomSend(fromUserName,token);
@@ -122,7 +121,13 @@ public class WxMessageEvenServiceImpl implements IWxMessageEvenService {
 //        }
 
         //生成带参数临时二维码ticket
-        WxQrTicket wxQrTicket = createShortTimeTicket(fromUserName);
+        WxQrTicket wxQrTicket = null ;
+        if (isForever){
+            wxQrTicket = createForeverTicket(fromUserName);
+        }else{
+            wxQrTicket = createShortTimeTicket(fromUserName);
+        }
+
         String wxTicketResult = wxSendService.generateTicket(token, wxQrTicket);
         JSONObject jsonStr = JSONObject.parseObject(wxTicketResult);
         log.info("---------ticket-------" + jsonStr);
@@ -161,12 +166,15 @@ public class WxMessageEvenServiceImpl implements IWxMessageEvenService {
         DateTime date = DateUtil.date();
         Date newDate = DateUtil.offsetDay(date, 30);
         String dateStr = DateUtil.format(newDate, "yyyy-MM-dd");
+        if (isForever){
+            dateStr = "永久";
+        }
         log.info(dateStr);
 
         ImgUtil.pressText(
                 FileUtil.file(ticketPath+fromUserName+"_text1.jpg"),
                 FileUtil.file(ticketPath+fromUserName+"_text2.jpg"),
-                "二维码有效期:"+dateStr, Color.black, //文字
+                "二维码有效期:"+dateStr, Color.black, //文字
                 new Font("黑体", Font.BOLD, 28), //字体
                 0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                 -80, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
@@ -220,6 +228,17 @@ public class WxMessageEvenServiceImpl implements IWxMessageEvenService {
         return null;
     }
 
+    private WxQrTicket createForeverTicket(String fromUserName) {
+        WxQrTicket wxQrTicket = new WxQrTicket();
+        wxQrTicket.setAction_name("QR_LIMIT_STR_SCENE");//临时字符串参数
+        JSONObject jsonObject1 = new JSONObject();
+        JSONObject jsonObject2 = new JSONObject();
+        jsonObject1.put("scene_str",fromUserName);
+        jsonObject2.put("scene",jsonObject1);
+        wxQrTicket.setAction_info(jsonObject2);
+        return wxQrTicket;
+    }
+
     private WxQrTicket createShortTimeTicket(String fromUserName) {
         WxQrTicket wxQrTicket = new WxQrTicket();
         wxQrTicket.setExpire_seconds(expireTime);