wwl 3 anni fa
parent
commit
2c7437e1f8
18 ha cambiato i file con 372 aggiunte e 26 eliminazioni
  1. 9 0
      twzd-common/src/main/java/com/miaxis/common/constant/Constants.java
  2. 1 1
      twzd-service/src/main/java/com/miaxis/feign/dto/WxQrTicket.java
  3. 3 3
      twzd-service/src/main/java/com/miaxis/feign/service/IWxSendService.java
  4. 61 0
      twzd-service/src/main/java/com/miaxis/file/domain/FileInfo.java
  5. 16 0
      twzd-service/src/main/java/com/miaxis/file/mapper/FileInfoMapper.java
  6. 15 0
      twzd-service/src/main/java/com/miaxis/file/service/IFileInfoService.java
  7. 23 0
      twzd-service/src/main/java/com/miaxis/file/service/impl/FileInfoServiceImpl.java
  8. 39 0
      twzd-service/src/main/java/com/miaxis/spread/domain/WxSpreadRelation.java
  9. 13 0
      twzd-service/src/main/java/com/miaxis/spread/mapper/WxSpreadRelationMapper.java
  10. 13 0
      twzd-service/src/main/java/com/miaxis/spread/service/IWxSpreadRelationService.java
  11. 22 0
      twzd-service/src/main/java/com/miaxis/spread/service/impl/WxSpreadRelationServiceImpl.java
  12. 47 0
      twzd-service/src/main/java/com/miaxis/wx/domain/WxTicket.java
  13. 13 0
      twzd-service/src/main/java/com/miaxis/wx/mapper/WxTicketMapper.java
  14. 2 3
      twzd-service/src/main/java/com/miaxis/wx/service/IWxMessageEvenService.java
  15. 13 0
      twzd-service/src/main/java/com/miaxis/wx/service/IWxTicketService.java
  16. 2 0
      twzd-service/src/main/java/com/miaxis/wx/service/impl/WxGzhServiceImpl.java
  17. 58 19
      twzd-service/src/main/java/com/miaxis/wx/service/impl/WxMessageEvenServiceImpl.java
  18. 22 0
      twzd-service/src/main/java/com/miaxis/wx/service/impl/WxTicketServiceImpl.java

+ 9 - 0
twzd-common/src/main/java/com/miaxis/common/constant/Constants.java

@@ -78,6 +78,15 @@ public class Constants
      */
     public static final String GZH_MESSAGE_TOKEN = "gzh:message:token:";
 
+    /**
+     * 公众号推广码ticket
+     */
+    public static final String GZH_TICKET_KEY = "gzh:ticket:";
+    /**
+     * 公众号推广码素材信息
+     */
+    public static final String GZH_MATERIAL_KEY = "gzh:material:";
+
 
     /**
      * 登录用户 redis key

+ 1 - 1
twzd-service/src/main/java/com/miaxis/feign/dto/WxTicket.java → twzd-service/src/main/java/com/miaxis/feign/dto/WxQrTicket.java

@@ -8,7 +8,7 @@ import lombok.Data;
  * @date 2021/10/20 15:08
  */
 @Data
-public class WxTicket {
+public class WxQrTicket {
 
     private Integer expire_seconds;  //该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为60秒。
     private String action_name;  //二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值

+ 3 - 3
twzd-service/src/main/java/com/miaxis/feign/service/IWxSendService.java

@@ -2,7 +2,7 @@ package com.miaxis.feign.service;
 
 import com.alibaba.fastjson.JSONObject;
 import com.miaxis.common.config.FeignConfig;
-import com.miaxis.feign.dto.WxTicket;
+import com.miaxis.feign.dto.WxQrTicket;
 import feign.Headers;
 
 import feign.Param;
@@ -39,11 +39,11 @@ public interface IWxSendService {
      * 生成带参数二维码接口
      *      -文档链接:https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html
      * @param accessToken
-     * @param wxTicket:二维码参数
+     * @param wxQrTicket:二维码参数
      * @return
      */
     @PostMapping(value = "/qrcode/create")
-    String generateTicket(@RequestParam("access_token")String accessToken, WxTicket wxTicket);
+    String generateTicket(@RequestParam("access_token")String accessToken, WxQrTicket wxQrTicket);
 
 
     /**

+ 61 - 0
twzd-service/src/main/java/com/miaxis/file/domain/FileInfo.java

@@ -0,0 +1,61 @@
+package com.miaxis.file.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.miaxis.common.annotation.Excel;
+import com.miaxis.common.core.domain.BaseBusinessEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 文件对象 file_info
+ *
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/28 14:30
+ */
+@Data
+@TableName("file_info")
+@ApiModel(value = "FileInfo", description = "文件对象 file_info")
+public class FileInfo extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 自增id */
+    @TableId(value = "file_id")
+    @ApiModelProperty(value = "自增id")
+    private Long fileId;
+
+    /** 顺序 */
+    @Excel(name = "顺序")
+    @TableField("seq")
+    @ApiModelProperty(value = "顺序")
+    private Long seq;
+
+    /** 文件业务类型 */
+    @Excel(name = "文件业务类型")
+    @TableField("file_type")
+    @ApiModelProperty(value = "文件业务类型")
+    private String fileType;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    @TableField("remark")
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    /** 文件url(访问地址) */
+    @Excel(name = "文件url(访问地址)")
+    @TableField("file_url")
+    @ApiModelProperty(value = "文件url(访问地址)")
+    private String fileUrl;
+
+    /** 文件路径 */
+    @Excel(name = "文件路径")
+    @TableField("file_path")
+    @ApiModelProperty(value = "文件路径")
+    private String filePath;
+
+
+}

+ 16 - 0
twzd-service/src/main/java/com/miaxis/file/mapper/FileInfoMapper.java

@@ -0,0 +1,16 @@
+package com.miaxis.file.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.miaxis.file.domain.FileInfo;
+
+
+/**
+ * 文件Mapper接口
+ *
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/28 14:36
+ */
+public interface FileInfoMapper extends BaseMapper<FileInfo> {
+
+}

+ 15 - 0
twzd-service/src/main/java/com/miaxis/file/service/IFileInfoService.java

@@ -0,0 +1,15 @@
+package com.miaxis.file.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.miaxis.file.domain.FileInfo;
+
+/**
+ * 文件Service接口
+ *
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/28 14:33
+ */
+public interface IFileInfoService extends IService<FileInfo>{
+
+}

+ 23 - 0
twzd-service/src/main/java/com/miaxis/file/service/impl/FileInfoServiceImpl.java

@@ -0,0 +1,23 @@
+package com.miaxis.file.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.miaxis.file.domain.FileInfo;
+import com.miaxis.file.mapper.FileInfoMapper;
+import com.miaxis.file.service.IFileInfoService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 文件Service业务层处理
+ *
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/28 14:35
+ */
+@Service
+@RequiredArgsConstructor
+public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> implements IFileInfoService {
+
+    private final  FileInfoMapper fileInfoMapper;
+
+}

+ 39 - 0
twzd-service/src/main/java/com/miaxis/spread/domain/WxSpreadRelation.java

@@ -0,0 +1,39 @@
+package com.miaxis.spread.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.miaxis.common.core.domain.BaseBusinessEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * wx推广关系对象 wx_spread_relation
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/29 9:39
+ */
+@Data
+@TableName("wx_spread_relation")
+@ApiModel(value = "WxSpreadRelation", description = "wx推广关系对象 wx_spread_relation")
+public class WxSpreadRelation extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    @TableId(value = "id")
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @TableField("openid")
+    @ApiModelProperty(value = "用户唯一标识")
+    private String openid;
+
+    @TableField("parent_openid")
+    @ApiModelProperty(value = "用户唯一标识(父级)")
+    private String parentOpenid;
+
+    @TableField("status")
+    @ApiModelProperty(value = "状态  0:有效(默认)、1:失效 (伪删除)")
+    private String status;
+}

+ 13 - 0
twzd-service/src/main/java/com/miaxis/spread/mapper/WxSpreadRelationMapper.java

@@ -0,0 +1,13 @@
+package com.miaxis.spread.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.miaxis.spread.domain.WxSpreadRelation;
+
+/**
+ * wx推广关系Mapper接口
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/29 9:41
+ */
+public interface WxSpreadRelationMapper extends BaseMapper<WxSpreadRelation> {
+}

+ 13 - 0
twzd-service/src/main/java/com/miaxis/spread/service/IWxSpreadRelationService.java

@@ -0,0 +1,13 @@
+package com.miaxis.spread.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.miaxis.spread.domain.WxSpreadRelation;
+
+/**
+ * wx推广关系Service接口
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/29 9:42
+ */
+public interface IWxSpreadRelationService extends IService<WxSpreadRelation> {
+}

+ 22 - 0
twzd-service/src/main/java/com/miaxis/spread/service/impl/WxSpreadRelationServiceImpl.java

@@ -0,0 +1,22 @@
+package com.miaxis.spread.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.miaxis.spread.domain.WxSpreadRelation;
+import com.miaxis.spread.mapper.WxSpreadRelationMapper;
+import com.miaxis.spread.service.IWxSpreadRelationService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * wx推广关系Service业务层处理
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/29 9:42
+ */
+@Service
+@AllArgsConstructor
+public class WxSpreadRelationServiceImpl extends ServiceImpl<WxSpreadRelationMapper, WxSpreadRelation> implements IWxSpreadRelationService {
+
+    private final WxSpreadRelationMapper wxSpreadRelationMapper;
+
+}

+ 47 - 0
twzd-service/src/main/java/com/miaxis/wx/domain/WxTicket.java

@@ -0,0 +1,47 @@
+package com.miaxis.wx.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.miaxis.common.core.domain.BaseBusinessEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 微信推广二维码对象 wx_ticket
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/28 16:22
+ */
+@Data
+@TableName("wx_ticket")
+@ApiModel(value = "WxQrTicket", description = "微信推广二维码对象 wx_ticket")
+public class WxTicket extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    @TableId(value = "id")
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @TableField("openid")
+    @ApiModelProperty(value = "用户唯一标识(微信)")
+    private String openid;
+
+    @TableField("ticket")
+    @ApiModelProperty(value = "获取的二维码ticket")
+    private String ticket;
+
+    @TableField("ticket_file_id")
+    @ApiModelProperty(value = "永久二维码图片id(关联file_info文件表)")
+    private Long ticketFileId;
+
+    @TableField("media_id")
+    @ApiModelProperty(value = "微信永久素材media_id(可根据接口获取图片、视频、语音等)")
+    private String mediaId;
+
+    @TableField("status")
+    @ApiModelProperty(value = "状态  0:有效(默认)、1:失效 (伪删除)")
+    private String status;
+}

+ 13 - 0
twzd-service/src/main/java/com/miaxis/wx/mapper/WxTicketMapper.java

@@ -0,0 +1,13 @@
+package com.miaxis.wx.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.miaxis.wx.domain.WxTicket;
+
+/**
+ * 微信推广二维码Mapper接口
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/28 16:31
+ */
+public interface WxTicketMapper extends BaseMapper<WxTicket> {
+}

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

@@ -14,11 +14,10 @@ public interface IWxMessageEvenService {
     /**
      * 扫码关注事件
      * @param fromUserName 发送方帐号(一个OpenID)
-     * @param toUserName 开发者微信号
-     * @param Ticket 二维码的ticket
+     * @param ticket 二维码的ticket
      * @return
      */
-    String scanSubscribeEvent(String fromUserName,String toUserName,String Ticket);
+    String scanSubscribeEvent(String fromUserName,String ticket);
 
     /**
      * click获取分销二维码事件

+ 13 - 0
twzd-service/src/main/java/com/miaxis/wx/service/IWxTicketService.java

@@ -0,0 +1,13 @@
+package com.miaxis.wx.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.miaxis.wx.domain.WxTicket;
+
+/**
+ * 微信推广二维码Service接口
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/28 16:24
+ */
+public interface IWxTicketService extends IService<WxTicket> {
+}

+ 2 - 0
twzd-service/src/main/java/com/miaxis/wx/service/impl/WxGzhServiceImpl.java

@@ -184,6 +184,8 @@ public class WxGzhServiceImpl implements IWxGzhService {
                         log.info("3.1.2..");
                         //根据Ticket  推送绑定信息到上级用户
                         //从缓存中获取Ticket用户信息
+                        String subscribeEvent = wxMessageEvenService.scanSubscribeEvent(fromUserName, jsonObjectData.getStr("Ticket"));
+                        return MessageUtil.initText(fromUserName,toUserName,subscribeEvent);
 
                     }else {
                         return MessageUtil.initText(fromUserName, toUserName, "关注事件");

+ 58 - 19
twzd-service/src/main/java/com/miaxis/wx/service/impl/WxMessageEvenServiceImpl.java

@@ -5,12 +5,15 @@ import cn.hutool.core.io.FileUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.miaxis.common.constant.Constants;
 import com.miaxis.common.utils.http.HttpUtils;
-import com.miaxis.common.utils.wx.MessageUtil;
-import com.miaxis.feign.dto.WxTicket;
-import com.miaxis.feign.service.IWxMpService;
+import com.miaxis.feign.dto.WxQrTicket;
 import com.miaxis.feign.service.IWxSendService;
+import com.miaxis.spread.domain.WxSpreadRelation;
+import com.miaxis.spread.service.IWxSpreadRelationService;
 import com.miaxis.wx.service.IWxMessageEvenService;
+import com.miaxis.wx.service.IWxTicketService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -19,6 +22,8 @@ import org.springframework.stereotype.Service;
 
 import java.awt.*;
 import java.io.File;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @author wwl
@@ -32,32 +37,56 @@ public class WxMessageEvenServiceImpl implements IWxMessageEvenService {
 
     private final RedisTemplate redisTemplate;
 
-    private final IWxMpService wxMpService;
-
     private final IWxSendService wxSendService;
 
+    private final IWxTicketService wxTicketService;
+
+    private final IWxSpreadRelationService wxSpreadRelationService;
+
     @Value("${file.ticketPath}")
     private String ticketPath;
 
     @Value("${wxgzh.materialUrl}")
     private String materialUrl;
 
+    @Value("${cos.bucketName}")
+    private String bucketName;
+
+    @Value("${cos.path}")
+    private String path;
+
+    @Value("${cos.preffix}")
+    private String preffix;
+
 
     /**
      * 扫码关注事件
      * @param fromUserName 发送方帐号(一个OpenID)
-     * @param toUserName 开发者微信号
-     * @param Ticket 二维码的ticket
+     * @param ticket 二维码的ticket
      * @return
      */
     @Override
-    public String scanSubscribeEvent(String fromUserName,String toUserName, String Ticket) {
-        return null;
+    public String scanSubscribeEvent(String fromUserName, String ticket) {
+
+        String message = "";
+        //判断是否存在父级推广关系
+        List<WxSpreadRelation> spreadRelations = wxSpreadRelationService.list(new QueryWrapper<WxSpreadRelation>().eq("openid", fromUserName));
+        if (spreadRelations.isEmpty()){
+            String openid = (String) redisTemplate.opsForValue().get(Constants.GZH_TICKET_KEY + ticket);
+            //保存推广关系表
+            WxSpreadRelation wxSpreadRelation = new WxSpreadRelation();
+            wxSpreadRelation.setOpenid(fromUserName);
+            wxSpreadRelation.setParentOpenid(openid);
+            message = "已成功绑定推广关系!";
+        }else {
+            message = "已存在推广关系!";
+        }
+        return message;
     }
 
 
     /**
-     * click获取分销二维码事件
+     * click获取推广二维码事件
      * @param fromUserName 发送方帐号(一个OpenID)
      * @param token 凭证
      * @return
@@ -65,18 +94,24 @@ public class WxMessageEvenServiceImpl implements IWxMessageEvenService {
     @Override
     public String gainTicketEvent(String fromUserName,String token) {
 
-        //生成带参数二维码ticket
-        WxTicket wxTicket = new WxTicket();
-        wxTicket.setExpire_seconds(2592000);//30天
-        wxTicket.setAction_name("QR_SCENE");
+        // 根据fromUserName查询缓存 判断用户推广码是否过期
+        if (redisTemplate.hasKey(Constants.GZH_MATERIAL_KEY + fromUserName)){
+            String mediaId = (String) redisTemplate.opsForValue().get(Constants.GZH_MATERIAL_KEY + fromUserName);
+            return mediaId;
+        }
+
+        //生成带参数二维码ticket(永久)
+        WxQrTicket wxQrTicket = new WxQrTicket();
+        wxQrTicket.setExpire_seconds(259200);//3天
+        wxQrTicket.setAction_name("QR_SCENE");//临时
         JSONObject jsonObject1 = new JSONObject();
         JSONObject jsonObject2 = new JSONObject();
         jsonObject1.put("scene_id","123");
         jsonObject2.put("scene",jsonObject1);
-        wxTicket.setAction_info(jsonObject2);
-        String wxTicketResult = wxSendService.generateTicket(token,wxTicket);
+        wxQrTicket.setAction_info(jsonObject2);
+        String wxTicketResult = wxSendService.generateTicket(token, wxQrTicket);
         JSONObject jsonStr = JSONObject.parseObject(wxTicketResult);
-        log.info("---------ticket-------" + wxTicketResult);
+        log.info("---------ticket-------" + jsonStr);
 
         //根据ticket生成二维码图片存储
         File ticketFile = QrCodeUtil.generate(
@@ -114,7 +149,11 @@ public class WxMessageEvenServiceImpl implements IWxMessageEvenService {
             JSONObject resultJSON = JSONObject.parseObject(result);
             log.info("------result:" + resultJSON);
 
-            //上传完成删除服务器文件
+            //缓存用户推广码相关信息
+            redisTemplate.opsForValue().set(Constants.GZH_TICKET_KEY+jsonStr.getString("ticket"),fromUserName,259200, TimeUnit.SECONDS);
+            redisTemplate.opsForValue().set(Constants.GZH_MATERIAL_KEY+fromUserName,resultJSON.getString("media_id"),259200, TimeUnit.SECONDS);
+
+            //删除服务器文件
             File imgFile = new File(ticketPath + fromUserName+"_img.jpg");
             if (ticketFile.exists() && imgFile.exists() && textFile.exists()) {
                 if (ticketFile.delete()) {
@@ -136,7 +175,7 @@ public class WxMessageEvenServiceImpl implements IWxMessageEvenService {
 
             return resultJSON.getString("media_id");
         } catch (Exception e) {
-            log.info("-----异常------click获取分销二维码事件");
+            log.info("-----异常------click获取推广二维码事件");
         }
         return null;
     }

+ 22 - 0
twzd-service/src/main/java/com/miaxis/wx/service/impl/WxTicketServiceImpl.java

@@ -0,0 +1,22 @@
+package com.miaxis.wx.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.miaxis.wx.domain.WxTicket;
+import com.miaxis.wx.mapper.WxTicketMapper;
+import com.miaxis.wx.service.IWxTicketService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 微信推广二维码Service业务层处理
+ * @author wwl
+ * @version 1.0
+ * @date 2021/10/28 16:30
+ */
+@Service
+@RequiredArgsConstructor
+public class WxTicketServiceImpl extends ServiceImpl<WxTicketMapper, WxTicket> implements IWxTicketService {
+
+    private final WxTicketMapper wxTicketMapper;
+
+}