Browse Source

Merge branch '20250815-wyp-weComThirdParty' of Server/growth-manager into master

wangyunpeng 1 week ago
parent
commit
5005a3274c
66 changed files with 7517 additions and 12 deletions
  1. 274 0
      api-module/src/main/java/com/tzld/piaoquan/api/component/WeComThirdPartyApiClient.java
  2. 44 0
      api-module/src/main/java/com/tzld/piaoquan/api/controller/GetRoomUserListResponse.java
  3. 75 0
      api-module/src/main/java/com/tzld/piaoquan/api/controller/WeComThirdPartyController.java
  4. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/controller/contentplatform/ContentPlatformCooperateAccountController.java
  5. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/controller/contentplatform/ContentPlatformDatastatController.java
  6. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/controller/contentplatform/ContentPlatformPlanController.java
  7. 2 1
      api-module/src/main/java/com/tzld/piaoquan/api/dao/generator/MybatisGeneratorMain.java
  8. 17 0
      api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/contentplatform/ext/ContentPlatformPlanMapperExt.java
  9. 30 0
      api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ThirdPartWeComCorpMapper.java
  10. 36 0
      api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ThirdPartWeComMsgMapper.java
  11. 30 0
      api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ThirdPartWeComRoomMapper.java
  12. 30 0
      api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ThirdPartWeComStaffMapper.java
  13. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/job/contentplatform/ContentPlatformDatastatJob.java
  14. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/job/contentplatform/ContentPlatformGzhAccountJob.java
  15. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/job/contentplatform/ContentPlatformVideoJob.java
  16. 59 0
      api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComAccountJob.java
  17. 179 0
      api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComSendMsgJob.java
  18. 98 0
      api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComUserDetailJob.java
  19. 12 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/AddRoomAdminsRequest.java
  20. 11 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/CdnUploadImgLinkRequest.java
  21. 13 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/CdnUploadImgLinkResponse.java
  22. 10 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/CheckCodeRequest.java
  23. 10 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/CommonResponse.java
  24. 12 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/CreateRoomWxRequest.java
  25. 49 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/ExternalContactsResponse.java
  26. 28 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetChatroomMembersRequest.java
  27. 25 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetChatroomMembersResponse.java
  28. 10 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetExternalContactsRequest.java
  29. 10 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetInnerContactsRequest.java
  30. 50 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetInnerContactsResponse.java
  31. 11 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetRoomUserListRequest.java
  32. 15 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/InitRequest.java
  33. 9 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/InitResponse.java
  34. 12 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/InvitationToRoomRequest.java
  35. 50 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/LoginInfo.java
  36. 11 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/QrCodeResponse.java
  37. 10 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SecondaryValidationResponse.java
  38. 29 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SendAppMsgRequest.java
  39. 39 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SendAppMsgResponse.java
  40. 19 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SendTextMsgRequest.java
  41. 9 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SetCallbackUrlRequest.java
  42. 10 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SetChatroomInviteRequest.java
  43. 10 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SetRoomManagementRequest.java
  44. 10 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/TransferChatroomOwnerRequest.java
  45. 12 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/UuidRequest.java
  46. 92 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComCorp.java
  47. 642 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComCorpExample.java
  48. 224 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComMsg.java
  49. 1402 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComMsgExample.java
  50. 125 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComRoom.java
  51. 842 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComRoomExample.java
  52. 125 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComStaff.java
  53. 852 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComStaffExample.java
  54. 39 0
      api-module/src/main/java/com/tzld/piaoquan/api/service/WeComThirdPartyService.java
  55. 303 0
      api-module/src/main/java/com/tzld/piaoquan/api/service/impl/WeComThirdPartyServiceImpl.java
  56. 2 0
      api-module/src/main/resources/application-dev.properties
  57. 30 0
      api-module/src/main/resources/mapper/contentplatform/ext/ContentPlatformPlanMapperExt.xml
  58. 248 0
      api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComCorpMapper.xml
  59. 506 0
      api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComMsgMapper.xml
  60. 294 0
      api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComRoomMapper.xml
  61. 294 0
      api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComStaffMapper.xml
  62. 59 0
      api-module/src/main/resources/mybatis-api-wecomThirdpart-generator-config.xml
  63. 1 1
      api-module/src/test/java/com/tzld/piaoquan/api/ContentPlatformTest.java
  64. 38 0
      api-module/src/test/java/com/tzld/piaoquan/api/WeComThirdPartTest.java
  65. 19 0
      common-module/src/main/java/com/tzld/piaoquan/growth/common/utils/LarkRobotUtil.java
  66. 4 4
      common-module/src/main/java/com/tzld/piaoquan/growth/common/utils/RedisUtils.java

+ 274 - 0
api-module/src/main/java/com/tzld/piaoquan/api/component/WeComThirdPartyApiClient.java

@@ -0,0 +1,274 @@
+package com.tzld.piaoquan.api.component;
+
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.*;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+@Slf4j
+@Component
+public class WeComThirdPartyApiClient {
+
+    private static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
+    private final OkHttpClient client = new OkHttpClient();
+
+    @Value("${wecom.thirdpart.baseUrl:http://47.96.102.58:8083}")
+    private String baseUrl;
+
+    /**
+     * 初始化
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String init(InitRequest request) {
+        return postRequest("/wxwork/init", request);
+    }
+
+    /**
+     * 设置回调地址
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String setCallbackUrl(SetCallbackUrlRequest request) {
+        return postRequest("/wxwork/SetCallbackUrl", request);
+    }
+
+    /**
+     * 获取登录二维码
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String getQrCode(UuidRequest request) {
+        return postRequest("/wxwork/getQrCode", request);
+    }
+
+    /**
+     * 设置验证码
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String checkCode(CheckCodeRequest request) {
+        return postRequest("/wxwork/CheckCode", request);
+    }
+
+    /**
+     * 获取二次验证二维码接口
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String secondaryValidation(UuidRequest request) {
+        return postRequest("/wxwork/SecondaryValidation", request);
+    }
+
+    /**
+     * 获取当前登录详情
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String getRunClientByUuid(UuidRequest request) {
+        return postRequest("/wxwork/GetRunClientByUuid", request);
+    }
+
+    /**
+     * 获取内部联系人列表
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String getInnerContacts(GetInnerContactsRequest request) {
+        return postRequest("/wxwork/GetInnerContacts", request);
+    }
+
+    /**
+     * 获取外部联系人列表
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String getExternalContacts(GetExternalContactsRequest request) {
+        return postRequest("/wxwork/GetExternalContacts", request);
+    }
+
+    /**
+     * 自动登录
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String automaticLogin(UuidRequest request) {
+        return postRequest("/wxwork/automaticLogin", request);
+    }
+
+    /**
+     * 创建群
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String createRoomWx(CreateRoomWxRequest request) {
+        return postRequest("/wxwork/CreateRoomWx", request);
+    }
+
+    /**
+     * 添加群管理员
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String addRoomAdmins(AddRoomAdminsRequest request) {
+        return postRequest("/wxwork/AddRoomAdmins", request);
+    }
+
+    /**
+     * 群邀请确认
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String setChatroomInvite(SetChatroomInviteRequest request) {
+        return postRequest("/wxwork/SetChatroomInvite", request);
+    }
+
+    /**
+     * 禁止群内添加和禁止修改群名
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String setRoomManagement(SetRoomManagementRequest request) {
+        return postRequest("/wxwork/setRoomManagement", request);
+    }
+
+    /**
+     * 直接邀请进群
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String invitationToRoom(InvitationToRoomRequest request) {
+        return postRequest("/wxwork/InvitationToRoom", request);
+    }
+
+    /**
+     * 发送消息
+     *
+     * @param request 请求体
+     * {
+     *     "uuid":"1753cdff-0501-42fe-bb5a-2a4b9629f7fb",
+     *     "kf_id":0,   //用来客服消息回复,正常发送忽略这个字段。
+     *     "send_userid":7881302555913738,
+     *     "isRoom":false,
+     *     "content":"ddddddd"
+     * }
+     * @return 响应结果
+     */
+    public String sendTextMsg(SendTextMsgRequest request) {
+        return postRequest("/wxwork/SendTextMsg", request);
+    }
+
+    /**
+     * 发送消息
+     *
+     * @param request 请求体
+     * {
+     *     "uuid":"543ed7f3-6ec1-4b1a-9e47-db8339a140f7",
+     *     "send_userid":7881302555913738,
+     *     "desc":"内容",
+     *     "appName":"小程序名称头像右边的",
+     *     "title":"小程序标题头像下边的",
+     *     "weappIconUrl":"https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png",//小程序头像
+     *     "pagepath":"pages/train/index/index.html",//小程序跳转地址
+     *     "username":"gh_c4a2a98a7366@app", //账号原始id
+     *     "appid":"wx45dff5234240ad90",//小程序appid
+     *     "cdnkey":"30680201020461305f750bed0b3c7d089fa7d55720d6cf0201010201000400", //小程序封面图 cdn上传获取
+     *     "md5":"d9c8750bed0b3c7d089fa7d55720d6cf",//封面图md5
+     *     "aeskey":"34323235376238666264636630663166",//封面图 返回的aeskey
+     *     "fileSize":15444,//封面图大小
+     *     "isRoom":false
+     * }
+     * @return 响应结果
+     */
+    public String sendAppMsg(SendAppMsgRequest request) {
+        return postRequest("/wxwork/SendAppMsg", request);
+    }
+
+    /**
+     * 转让群主
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String transferChatroomOwner(TransferChatroomOwnerRequest request) {
+        return postRequest("/wxwork/TransferChatroomOwner", request);
+    }
+
+    /**
+     * 退出登录
+     *
+     * @param request 请求体
+     * @return 响应结果
+     */
+    public String loginOut(UuidRequest request) {
+        return postRequest("/wxwork/LoginOut", request);
+    }
+
+    /**
+     * 获取客户群列表
+     * @param request
+     * @return
+     */
+    public String getChatroomMembers(GetChatroomMembersRequest request) {
+        return postRequest("/wxwork/GetChatroomMembers", request);
+    }
+
+    /**
+     * 获取群成员列表
+     * @param request
+     * @return
+     */
+    public String getRoomUserList(GetRoomUserListRequest request) {
+        return postRequest("/wxwork/GetRoomUserList", request);
+    }
+
+    /**
+     * CDN上传网络图片
+     * @param request
+     * @return
+     */
+    public String cdnUploadImgLink(CdnUploadImgLinkRequest request) {
+        return postRequest("/wxwork/CdnUploadImgLink", request);
+    }
+
+    private String postRequest(String path, Object requestBody) {
+        String url = baseUrl + path;
+        String json = JSONObject.toJSONString(requestBody);
+        RequestBody body = RequestBody.create(JSON, json);
+        Request request = new Request.Builder()
+                .url(url)
+                .post(body)
+                .build();
+        try (Response response = client.newCall(request).execute()) {
+            if (response.isSuccessful() && response.body() != null) {
+                String responseStr = response.body().string();
+                log.info("企微三方平台 请求成功, url: {}, body: {}, response: {}", url, json, responseStr);
+                return responseStr;
+            } else {
+                log.error("企微三方平台 请求失败, url: {}, body: {}, response: {}", url, json, response);
+                throw new IOException("Unexpected code " + response);
+            }
+        } catch (IOException e) {
+            log.error("请求失败", e);
+        }
+        return null;
+    }
+}

+ 44 - 0
api-module/src/main/java/com/tzld/piaoquan/api/controller/GetRoomUserListResponse.java

@@ -0,0 +1,44 @@
+package com.tzld.piaoquan.api.controller;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class GetRoomUserListResponse {
+    private Long room_id;
+    private Long create_user_id;
+    private Integer total;
+    private Long notice_sendervid;
+    private List<Long> anti_spam_rules;
+    private Long create_time;
+    private String notice_content;
+    private String nickname;
+    private Integer flag;
+    private Integer new_flag;
+    private List<Member> member_list;
+    private Long notice_time;
+    private List<Object> managers;
+
+    @Data
+    public static class Member {
+        private String unionid;
+        private Long create_time;
+        private Integer sex;
+        private String mobile;
+        private String acctid;
+        private Integer join_scene;
+        private String avatar;
+        private String english_name;
+        private String realname;
+        private String room_notes;
+        private Long jointime;
+        private String nickname;
+        private String room_nickname;
+        private String position;
+        private Long uin;
+        private Long invite_user_id;
+        private Long corp_id;
+
+    }
+}

+ 75 - 0
api-module/src/main/java/com/tzld/piaoquan/api/controller/WeComThirdPartyController.java

@@ -0,0 +1,75 @@
+package com.tzld.piaoquan.api.controller;
+
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.*;
+import com.tzld.piaoquan.api.service.WeComThirdPartyService;
+import com.tzld.piaoquan.growth.common.common.base.CommonResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/wecom/thirdpart")
+public class WeComThirdPartyController {
+
+    @Autowired
+    private WeComThirdPartyService service;
+
+    @PostMapping("/init")
+    public CommonResponse<InitResponse> init() {
+        return CommonResponse.success(service.init());
+    }
+
+    @PostMapping("/setCallbackUrl")
+    public CommonResponse<Void> setCallbackUrl(@RequestBody SetCallbackUrlRequest request) {
+        service.setCallbackUrl(request);
+        return CommonResponse.success();
+    }
+
+    @PostMapping("/getQrCode")
+    public CommonResponse<QrCodeResponse> getQrCode(@RequestBody UuidRequest request) {
+        return CommonResponse.success(service.getQrCode(request));
+    }
+
+    @PostMapping("/setCheckCode")
+    public CommonResponse<Void> setCheckCode(@RequestBody CheckCodeRequest request) {
+        service.setCheckCode(request);
+        return CommonResponse.success();
+    }
+
+    @PostMapping("/secondaryValidation")
+    public CommonResponse<String> secondaryValidation(@RequestBody UuidRequest request) {
+        return CommonResponse.success(service.secondaryValidation(request));
+    }
+
+    @PostMapping("/getRunClientByUuid")
+    public CommonResponse<LoginInfo> getRunClientByUuid(@RequestBody UuidRequest request) {
+        return CommonResponse.success(service.getRunClientByUuid(request));
+    }
+
+    @PostMapping("/getInnerContacts")
+    public CommonResponse<List<GetInnerContactsResponse.ContactItem>> getInnerContacts(@RequestBody GetInnerContactsRequest request) {
+        return CommonResponse.success(service.getInnerContacts(request));
+    }
+
+    @PostMapping("/getExternalContacts")
+    public CommonResponse<List<ExternalContactsResponse.ContactItem>> getExternalContacts(@RequestBody GetExternalContactsRequest request) {
+        return CommonResponse.success(service.getExternalContacts(request));
+    }
+
+    @PostMapping("/getChatroomMembers")
+    public CommonResponse<List<GetChatroomMembersResponse.RoomInfo>> getChatroomMembers(@RequestBody GetChatroomMembersRequest request) {
+        return CommonResponse.success(service.getChatroomMembers(request));
+    }
+
+    @PostMapping("/getRoomUserList")
+    public CommonResponse<List<GetRoomUserListResponse.Member>> getRoomUserList(@RequestBody GetRoomUserListRequest request) {
+        return CommonResponse.success(service.getRoomUserList(request));
+    }
+
+}

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/controller/contentplatform/ContentPlatformCooperateAccountController.java

@@ -1,7 +1,7 @@
 package com.tzld.piaoquan.api.controller.contentplatform;
 
 import com.tzld.piaoquan.api.annotation.JwtIgnore;
-import com.tzld.piaoquan.api.job.ContentPlatformGzhAccountJob;
+import com.tzld.piaoquan.api.job.contentplatform.ContentPlatformGzhAccountJob;
 import com.tzld.piaoquan.api.model.param.IdParam;
 import com.tzld.piaoquan.api.model.param.contentplatform.CooperateAccountListParam;
 import com.tzld.piaoquan.api.model.param.contentplatform.CooperateAccountSaveParam;

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/controller/contentplatform/ContentPlatformDatastatController.java

@@ -1,7 +1,7 @@
 package com.tzld.piaoquan.api.controller.contentplatform;
 
 import com.tzld.piaoquan.api.annotation.JwtIgnore;
-import com.tzld.piaoquan.api.job.ContentPlatformDatastatJob;
+import com.tzld.piaoquan.api.job.contentplatform.ContentPlatformDatastatJob;
 import com.tzld.piaoquan.api.model.param.contentplatform.GzhDatastatListParam;
 import com.tzld.piaoquan.api.model.param.contentplatform.QwDatastatListParam;
 import com.tzld.piaoquan.api.model.vo.contentplatform.GzhDatastatItemVO;

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/controller/contentplatform/ContentPlatformPlanController.java

@@ -1,7 +1,7 @@
 package com.tzld.piaoquan.api.controller.contentplatform;
 
 import com.tzld.piaoquan.api.annotation.JwtIgnore;
-import com.tzld.piaoquan.api.job.ContentPlatformVideoJob;
+import com.tzld.piaoquan.api.job.contentplatform.ContentPlatformVideoJob;
 import com.tzld.piaoquan.api.model.param.IdParam;
 import com.tzld.piaoquan.api.model.param.contentplatform.*;
 import com.tzld.piaoquan.api.model.vo.contentplatform.GzhPlanItemVO;

+ 2 - 1
api-module/src/main/java/com/tzld/piaoquan/api/dao/generator/MybatisGeneratorMain.java

@@ -20,9 +20,10 @@ public class MybatisGeneratorMain {
             throws SQLException, IOException, InterruptedException, InvalidConfigurationException, XMLParserException {
         List<String> warnings = new ArrayList<>();
 
-        File configFile = new File(MybatisGeneratorMain.class.getResource("/mybatis-generator-config.xml").getFile());
+//        File configFile = new File(MybatisGeneratorMain.class.getResource("/mybatis-generator-config.xml").getFile());
 //        File configFile = new File(MybatisGeneratorMain.class.getResource("/mybatis-api-generator-config.xml").getFile());
 //        File configFile = new File(MybatisGeneratorMain.class.getResource("/mybatis-api-contentPlatform-generator-config.xml").getFile());
+        File configFile = new File(MybatisGeneratorMain.class.getResource("/mybatis-api-wecomThirdpart-generator-config.xml").getFile());
         ConfigurationParser cp = new ConfigurationParser(warnings);
         Configuration config = cp.parseConfiguration(configFile);
         DefaultShellCallback callback = new DefaultShellCallback(true);

+ 17 - 0
api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/contentplatform/ext/ContentPlatformPlanMapperExt.java

@@ -45,6 +45,23 @@ public interface ContentPlatformPlanMapperExt {
                                             @Param("pageSize") Integer pageSize,
                                             @Param("sort") String sort);
 
+    List<ContentPlatformVideo> getVideoMinScoreList(@Param("dt") String dt,
+                                                    @Param("minScore") Double minScore,
+                                                    @Param("excludeVideoIds") List<Long> excludeVideoIds,
+                                                    @Param("offset") int offset,
+                                                    @Param("pageSize") Integer pageSize,
+                                                    @Param("sort") String sort);
+
+    List<ContentPlatformVideo> getVideoMinDatastatScoreList(@Param("dt") String dt,
+                                                            @Param("datastatDt") String datastatDt,
+                                                            @Param("type") String type,
+                                                            @Param("channel") String channel,
+                                                            @Param("minScore") Double minScore,
+                                                            @Param("excludeVideoIds") List<Long> excludeVideoIds,
+                                                            @Param("offset") int offset,
+                                                            @Param("pageSize") Integer pageSize,
+                                                            @Param("sort") String sort);
+
     void batchInsertContentPlatformVideo(@Param("records") List<ContentPlatformVideo> saveList);
 
     void batchInsertContentPlatformVideoAgg(@Param("records") List<ContentPlatformVideoAgg> saveList);

+ 30 - 0
api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ThirdPartWeComCorpMapper.java

@@ -0,0 +1,30 @@
+package com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart;
+
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComCorp;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComCorpExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface ThirdPartWeComCorpMapper {
+    long countByExample(ThirdPartWeComCorpExample example);
+
+    int deleteByExample(ThirdPartWeComCorpExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(ThirdPartWeComCorp record);
+
+    int insertSelective(ThirdPartWeComCorp record);
+
+    List<ThirdPartWeComCorp> selectByExample(ThirdPartWeComCorpExample example);
+
+    ThirdPartWeComCorp selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("record") ThirdPartWeComCorp record, @Param("example") ThirdPartWeComCorpExample example);
+
+    int updateByExample(@Param("record") ThirdPartWeComCorp record, @Param("example") ThirdPartWeComCorpExample example);
+
+    int updateByPrimaryKeySelective(ThirdPartWeComCorp record);
+
+    int updateByPrimaryKey(ThirdPartWeComCorp record);
+}

+ 36 - 0
api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ThirdPartWeComMsgMapper.java

@@ -0,0 +1,36 @@
+package com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart;
+
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsg;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsgExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface ThirdPartWeComMsgMapper {
+    long countByExample(ThirdPartWeComMsgExample example);
+
+    int deleteByExample(ThirdPartWeComMsgExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(ThirdPartWeComMsg record);
+
+    int insertSelective(ThirdPartWeComMsg record);
+
+    List<ThirdPartWeComMsg> selectByExampleWithBLOBs(ThirdPartWeComMsgExample example);
+
+    List<ThirdPartWeComMsg> selectByExample(ThirdPartWeComMsgExample example);
+
+    ThirdPartWeComMsg selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("record") ThirdPartWeComMsg record, @Param("example") ThirdPartWeComMsgExample example);
+
+    int updateByExampleWithBLOBs(@Param("record") ThirdPartWeComMsg record, @Param("example") ThirdPartWeComMsgExample example);
+
+    int updateByExample(@Param("record") ThirdPartWeComMsg record, @Param("example") ThirdPartWeComMsgExample example);
+
+    int updateByPrimaryKeySelective(ThirdPartWeComMsg record);
+
+    int updateByPrimaryKeyWithBLOBs(ThirdPartWeComMsg record);
+
+    int updateByPrimaryKey(ThirdPartWeComMsg record);
+}

+ 30 - 0
api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ThirdPartWeComRoomMapper.java

@@ -0,0 +1,30 @@
+package com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart;
+
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface ThirdPartWeComRoomMapper {
+    long countByExample(ThirdPartWeComRoomExample example);
+
+    int deleteByExample(ThirdPartWeComRoomExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(ThirdPartWeComRoom record);
+
+    int insertSelective(ThirdPartWeComRoom record);
+
+    List<ThirdPartWeComRoom> selectByExample(ThirdPartWeComRoomExample example);
+
+    ThirdPartWeComRoom selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("record") ThirdPartWeComRoom record, @Param("example") ThirdPartWeComRoomExample example);
+
+    int updateByExample(@Param("record") ThirdPartWeComRoom record, @Param("example") ThirdPartWeComRoomExample example);
+
+    int updateByPrimaryKeySelective(ThirdPartWeComRoom record);
+
+    int updateByPrimaryKey(ThirdPartWeComRoom record);
+}

+ 30 - 0
api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ThirdPartWeComStaffMapper.java

@@ -0,0 +1,30 @@
+package com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart;
+
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface ThirdPartWeComStaffMapper {
+    long countByExample(ThirdPartWeComStaffExample example);
+
+    int deleteByExample(ThirdPartWeComStaffExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(ThirdPartWeComStaff record);
+
+    int insertSelective(ThirdPartWeComStaff record);
+
+    List<ThirdPartWeComStaff> selectByExample(ThirdPartWeComStaffExample example);
+
+    ThirdPartWeComStaff selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("record") ThirdPartWeComStaff record, @Param("example") ThirdPartWeComStaffExample example);
+
+    int updateByExample(@Param("record") ThirdPartWeComStaff record, @Param("example") ThirdPartWeComStaffExample example);
+
+    int updateByPrimaryKeySelective(ThirdPartWeComStaff record);
+
+    int updateByPrimaryKey(ThirdPartWeComStaff record);
+}

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/job/ContentPlatformDatastatJob.java → api-module/src/main/java/com/tzld/piaoquan/api/job/contentplatform/ContentPlatformDatastatJob.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.job;
+package com.tzld.piaoquan.api.job.contentplatform;
 
 import com.alibaba.fastjson.JSONObject;
 import com.aliyun.odps.data.Record;

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/job/ContentPlatformGzhAccountJob.java → api-module/src/main/java/com/tzld/piaoquan/api/job/contentplatform/ContentPlatformGzhAccountJob.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.job;
+package com.tzld.piaoquan.api.job.contentplatform;
 
 import com.alibaba.fastjson.JSONObject;
 import com.tzld.piaoquan.api.component.AigcApiService;

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/job/ContentPlatformVideoJob.java → api-module/src/main/java/com/tzld/piaoquan/api/job/contentplatform/ContentPlatformVideoJob.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.job;
+package com.tzld.piaoquan.api.job.contentplatform;
 
 import com.aliyun.odps.data.Record;
 import com.google.common.collect.Lists;

+ 59 - 0
api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComAccountJob.java

@@ -0,0 +1,59 @@
+package com.tzld.piaoquan.api.job.wecom.thirdpart;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.tzld.piaoquan.api.component.WeComThirdPartyApiClient;
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.CommonResponse;
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.LoginInfo;
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.UuidRequest;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff;
+import com.tzld.piaoquan.api.service.WeComThirdPartyService;
+import com.tzld.piaoquan.growth.common.utils.LarkRobotUtil;
+import com.tzld.piaoquan.growth.common.utils.RedisUtils;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Objects;
+
+@Slf4j
+@Component
+public class WeComAccountJob {
+
+    @Autowired
+    WeComThirdPartyService weComThirdPartyService;
+    @Autowired
+    WeComThirdPartyApiClient apiClient;
+
+    @Autowired
+    private RedisUtils redisUtils;
+
+    @XxlJob("checkAccountOnline")
+    public ReturnT<String> checkAccountOnline(String param) {
+        List<ThirdPartWeComStaff> activeStaffList = weComThirdPartyService.getActiveStaffList();
+        for (ThirdPartWeComStaff staff : activeStaffList) {
+            String uuid = staff.getThirdUuid();
+            String offLineKey = "wecom:thirdpart:offline:" + uuid;
+            if (redisUtils.containsKey(offLineKey)) {
+                continue;
+            }
+            String response = apiClient.getRunClientByUuid(new UuidRequest(uuid));
+            CommonResponse<LoginInfo> commonResponse =
+                    JSONObject.parseObject(response, new TypeReference<CommonResponse<LoginInfo>>() {});
+            if (commonResponse.getErrcode() != 0
+                    && (Objects.isNull(commonResponse.getData().getUser_info())
+                    || Objects.isNull(commonResponse.getData().getUser_info().getObject()))) {
+                redisUtils.set(offLineKey, "1", 30 * 60);
+                LarkRobotUtil.sendWeComThirdPartMessage(
+                        "【账号掉线检测通知】\n" +
+                                "账号名称:" + staff.getName() + "\n" +
+                                "账号UUID:" + uuid + "\n" +
+                                "账号状态:已下线");
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+}

+ 179 - 0
api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComSendMsgJob.java

@@ -0,0 +1,179 @@
+package com.tzld.piaoquan.api.job.wecom.thirdpart;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import com.tzld.piaoquan.api.dao.mapper.contentplatform.ext.ContentPlatformPlanMapperExt;
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComMsgMapper;
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.CdnUploadImgLinkRequest;
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.CdnUploadImgLinkResponse;
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.SendAppMsgRequest;
+import com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformVideo;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsg;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsgExample;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff;
+import com.tzld.piaoquan.api.service.WeComThirdPartyService;
+import com.tzld.piaoquan.growth.common.model.po.CgiReplyBucketData;
+import com.tzld.piaoquan.growth.common.model.po.Staff;
+import com.tzld.piaoquan.growth.common.service.MessageAttachmentService;
+import com.tzld.piaoquan.growth.common.utils.DateUtil;
+import com.tzld.piaoquan.growth.common.utils.MessageUtil;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component
+public class WeComSendMsgJob {
+
+    @Autowired
+    WeComThirdPartyService weComThirdPartyService;
+    @Autowired
+    MessageAttachmentService messageAttachmentService;
+    @Autowired
+    ContentPlatformPlanMapperExt planMapperExt;
+    @Autowired
+    ThirdPartWeComMsgMapper thirdPartWeComMsgMapper;
+
+    @ApolloJsonValue("${wecom.thirdpart.send.msg.config:{}}")
+    private JSONObject sendMsgConfig;
+
+    @Value("${send.room.msg.video.min.score:3}")
+    private Double videoMinScore;
+    @Value("${send.room.msg.duplicate.days:7}")
+    private Integer duplicateDays;
+    @Value("${send.room.msg.video.num:2}")
+    private Integer videoNum;
+
+    private final static ExecutorService pool = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.SECONDS,
+            new LinkedBlockingQueue<>(1000),
+            new ThreadFactoryBuilder().setNameFormat("WeComSendMsgJob-%d").build(),
+            new ThreadPoolExecutor.AbortPolicy());
+
+    @XxlJob("autoSendAppMsg")
+    public ReturnT<String> autoSendAppMsg(String param) {
+        List<ThirdPartWeComStaff> activeStaffList = weComThirdPartyService.getActiveStaffList();
+        String time = DateUtil.getCurrentDateStr("HH:mm");
+        for (ThirdPartWeComStaff staff : activeStaffList) {
+            if (!sendMsgConfig.containsKey(staff.getName())) {
+                continue;
+            }
+            List<ThirdPartWeComRoom> roomList = weComThirdPartyService.getStaffRoomList(staff.getId());
+            JSONObject roomConfig = sendMsgConfig.getJSONObject(staff.getName());
+            for (ThirdPartWeComRoom room : roomList) {
+                if (!roomConfig.containsKey(room.getName())) {
+                    continue;
+                }
+                pool.execute(() -> {
+                    List<String> timeList = roomConfig.getJSONArray(room.getName()).toJavaList(String.class);
+                    if (timeList.contains(time)) {
+                        // 选取视频
+                        List<CgiReplyBucketData> cgiReplyBucketDataList = getCgiReplyBucketData(room.getThirdRoomId(), staff);
+                        for (CgiReplyBucketData cgiReplyBucketData : cgiReplyBucketDataList) {
+                            // build发送体
+                            SendAppMsgRequest request = new SendAppMsgRequest();
+                            request.setUuid(staff.getThirdUuid());
+                            request.setSend_userid(Long.valueOf(room.getThirdRoomId()));
+                            request.setIsRoom(true);
+                            request.setAppid("wx89e7eb06478361d7");
+                            request.setUsername("gh_ecd1ea0b84cf@app");
+                            request.setAppName("票圈 l 3亿人喜欢的视频平台");
+                            request.setTitle("票圈 l 3亿人喜欢的视频平台");
+                            request.setWeappIconUrl("http://rescdn.yishihui.com/temp/1755515422185_%E7%A5%A8%E5%9C%88Vlog_logo.jpg");
+                            // 填充视频信息
+                            request.setDesc(cgiReplyBucketData.getTitle());
+                            request.setPagepath(cgiReplyBucketData.getMiniPagePath());
+                            CdnUploadImgLinkRequest cdnUploadImgLinkRequest = new CdnUploadImgLinkRequest();
+                            cdnUploadImgLinkRequest.setUuid(staff.getThirdUuid());
+                            cdnUploadImgLinkRequest.setUrl(cgiReplyBucketData.getCoverUrl());
+                            CdnUploadImgLinkResponse uploadResponse = weComThirdPartyService.cdnUploadImgLink(cdnUploadImgLinkRequest);
+                            request.setCdnkey(uploadResponse.getCdn_key());
+                            request.setMd5(uploadResponse.getMd5());
+                            request.setAeskey(uploadResponse.getAes_key());
+                            request.setFileSize(uploadResponse.getSize().intValue());
+                            // 发送消息
+                            weComThirdPartyService.sendAppMsg(request);
+                            // 存储消息
+                            saveWeComMsg(staff.getId(), cgiReplyBucketData.getMiniVideoId(), request);
+                        }
+                    }
+                });
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    private List<CgiReplyBucketData> getCgiReplyBucketData(String roomId, ThirdPartWeComStaff thirdPartWeComStaff) {
+        String dt = planMapperExt.getVideoMaxDt();
+        String datastatDt = planMapperExt.getVideoDatastatMaxDt();
+        // 排除最近发送过的视频
+        List<Long> sentVideoIds = getSentVideoIds(Long.valueOf(roomId));
+        // 按行业获取视频
+        String sort = "datastat.fission_rate desc, video.score desc";
+        String type = "企微-社群";
+        String channel = "sum";
+        List<ContentPlatformVideo> videoList = planMapperExt.getVideoMinDatastatScoreList(dt, datastatDt,
+                type, channel, videoMinScore, sentVideoIds, 0, 100, sort);
+        // 行业数量不足,按平台推荐top选取视频
+        sort = "video.score desc";
+        videoList.addAll(planMapperExt.getVideoMinScoreList(dt, videoMinScore, sentVideoIds, 0, 100, sort));
+        List<CgiReplyBucketData> result = new ArrayList<>();
+        for (int i = 0; i < videoNum; i++) {
+            ContentPlatformVideo video = videoList.get(i);
+            Staff staff = new Staff();
+            staff.setCarrierId(String.valueOf(thirdPartWeComStaff.getThirdStaffId()));
+            staff.setRemark(thirdPartWeComStaff.getName());
+            String page = messageAttachmentService.getPage(staff, video.getVideoId());
+
+            CgiReplyBucketData cgiReplyBucketData = new CgiReplyBucketData();
+            cgiReplyBucketData.setMiniVideoId(video.getVideoId());
+            cgiReplyBucketData.setTitle(video.getTitle());
+            cgiReplyBucketData.setCoverUrl(video.getCover());
+            cgiReplyBucketData.setMiniPagePath(page);
+            result.add(cgiReplyBucketData);
+        }
+        return result;
+    }
+
+    private List<Long> getSentVideoIds(Long roomId) {
+        ThirdPartWeComMsgExample msgExample = new ThirdPartWeComMsgExample();
+        msgExample.createCriteria().andSendUseridEqualTo(roomId)
+                .andCreateTimeGreaterThan(DateUtil.getDaysAgoDate(duplicateDays));
+        List<ThirdPartWeComMsg> msgList = thirdPartWeComMsgMapper.selectByExample(msgExample);
+        return msgList.stream().map(ThirdPartWeComMsg::getVideoId).collect(Collectors.toList());
+    }
+
+    private void saveWeComMsg(Long staffId, Long videoId, SendAppMsgRequest request) {
+        ThirdPartWeComMsg msg = new ThirdPartWeComMsg();
+        msg.setStaffId(staffId);
+        msg.setVideoId(videoId);
+        msg.setUuid(request.getUuid());
+        msg.setSendUserid(request.getSend_userid());
+        msg.setIsroom(request.getIsRoom());
+        msg.setAppid(request.getAppid());
+        msg.setUsername(request.getUsername());
+        msg.setAppname(request.getAppName());
+        msg.setTitle(request.getTitle());
+        msg.setWeappiconurl(request.getWeappIconUrl());
+        msg.setPagepath(request.getPagepath());
+        msg.setRootSourceId(MessageUtil.getRootSourceId(msg.getPagepath()));
+        msg.setDesc(request.getDesc());
+        msg.setCdnkey(request.getCdnkey());
+        msg.setMd5(request.getMd5());
+        msg.setAeskey(request.getAeskey());
+        msg.setFilesize(request.getFileSize());
+        thirdPartWeComMsgMapper.insertSelective(msg);
+    }
+}

+ 98 - 0
api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComUserDetailJob.java

@@ -0,0 +1,98 @@
+package com.tzld.piaoquan.api.job.wecom.thirdpart;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.tzld.piaoquan.api.component.WeComThirdPartyApiClient;
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomMapper;
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffMapper;
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.*;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff;
+import com.tzld.piaoquan.api.service.WeComThirdPartyService;
+import com.tzld.piaoquan.growth.common.utils.RedisUtils;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component
+public class WeComUserDetailJob {
+
+    @Autowired
+    WeComThirdPartyService weComThirdPartyService;
+    @Autowired
+    ThirdPartWeComStaffMapper weComStaffMapper;
+    @Autowired
+    ThirdPartWeComRoomMapper weComRoomMapper;
+    @Autowired
+    WeComThirdPartyApiClient apiClient;
+
+    @Autowired
+    private RedisUtils redisUtils;
+
+    @XxlJob("syncUserDetail")
+    public ReturnT<String> syncUserDetail(String param) {
+        List<ThirdPartWeComStaff> activeStaffList = weComThirdPartyService.getActiveStaffList();
+        for (ThirdPartWeComStaff staff : activeStaffList) {
+            String uuid = staff.getThirdUuid();
+            String offLineKey = "wecom:thirdpart:offline:" + uuid;
+            if (redisUtils.containsKey(offLineKey)) {
+                continue;
+            }
+            String response = apiClient.getRunClientByUuid(new UuidRequest(uuid));
+            CommonResponse<LoginInfo> commonResponse =
+                    JSONObject.parseObject(response, new TypeReference<CommonResponse<LoginInfo>>() {});
+            if (commonResponse.getErrcode() != 0) {
+                continue;
+            } else {
+                LoginInfo loginInfo = commonResponse.getData();
+                staff.setAvatar(loginInfo.getUser_info().getObject().getAvatar());
+                staff.setName(loginInfo.getUser_info().getObject().getNickname());
+                staff.setUpdateTime(new Date());
+                weComStaffMapper.updateByPrimaryKeySelective(staff);
+            }
+            syncRoomList(uuid, staff);
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    private void syncRoomList(String uuid, ThirdPartWeComStaff staff) {
+        List<GetChatroomMembersResponse.RoomInfo> roomInfoList =
+                weComThirdPartyService.getChatroomMembers(new GetChatroomMembersRequest(uuid, 100, 0));
+        List<ThirdPartWeComRoom> roomList = weComThirdPartyService.getStaffRoomList(staff.getId());
+        Map<String, ThirdPartWeComRoom> roomMap = roomList.stream().collect(Collectors.toMap(ThirdPartWeComRoom::getThirdRoomId, room -> room));
+        for (GetChatroomMembersResponse.RoomInfo roomInfo : roomInfoList) {
+            String roomId = roomInfo.getRoom_id();
+            ThirdPartWeComRoom roomDetail = roomMap.get(roomId);
+            if (Objects.isNull(roomDetail)) {
+                roomDetail = new ThirdPartWeComRoom();
+                roomDetail.setCorpId(staff.getCorpId());
+                roomDetail.setStaffId(staff.getId());
+                roomDetail.setRoomUrl(roomInfo.getRoomurl());
+                roomDetail.setThirdRoomId(roomInfo.getRoom_id());
+                roomDetail.setThirdCreateUserId(roomInfo.getCreate_user_id());
+                roomDetail.setMemberCount(roomInfo.getTotal());
+                roomDetail.setName(roomInfo.getNickname());
+                roomDetail.setCreateTime(new Date());
+                roomDetail.setUpdateTime(new Date());
+                weComRoomMapper.insertSelective(roomDetail);
+            } else {
+                roomDetail.setRoomUrl(roomInfo.getRoomurl());
+                roomDetail.setThirdRoomId(roomInfo.getRoom_id());
+                roomDetail.setThirdCreateUserId(roomInfo.getCreate_user_id());
+                roomDetail.setMemberCount(roomInfo.getTotal());
+                roomDetail.setName(roomInfo.getNickname());
+                roomDetail.setUpdateTime(new Date());
+                weComRoomMapper.updateByPrimaryKeySelective(roomDetail);
+            }
+        }
+    }
+}

+ 12 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/AddRoomAdminsRequest.java

@@ -0,0 +1,12 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AddRoomAdminsRequest {
+    private String uuid;
+    private Long roomid;
+    private List<Long> vids;
+}

+ 11 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/CdnUploadImgLinkRequest.java

@@ -0,0 +1,11 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class CdnUploadImgLinkRequest {
+
+    private String uuid;
+    private String url;
+
+}

+ 13 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/CdnUploadImgLinkResponse.java

@@ -0,0 +1,13 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class CdnUploadImgLinkResponse {
+
+    private Long size;
+    private String cdn_key;
+    private String aes_key;
+    private String fileid;
+    private String md5;
+}

+ 10 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/CheckCodeRequest.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class CheckCodeRequest {
+    private String uuid;
+    private String qrcodeKey;
+    private String code;
+}

+ 10 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/CommonResponse.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class CommonResponse<T> {
+    private Integer errcode;
+    private String errmsg;
+    private T data;
+}

+ 12 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/CreateRoomWxRequest.java

@@ -0,0 +1,12 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CreateRoomWxRequest {
+    private String uuid;
+    private List<Long> vids;
+    private String roomName;
+}

+ 49 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/ExternalContactsResponse.java

@@ -0,0 +1,49 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ExternalContactsResponse {
+    private List<ContactItem> list;
+    private Integer seq;
+
+    @Data
+    public static class ContactItem {
+        private String unionid;
+        private Long create_time;
+        private Long add_customer_time;
+        private Integer sex;
+        private String mobile;
+        private String company_remark;
+        private String acctid;
+        private String avatar;
+        private Integer source;
+        private String english_name;
+        private List<String> remark_phone;
+        private String realname;
+        private String real_remarks;
+        private List<String> labelid;
+        private Long user_id;
+        private String nickname;
+        private String position;
+        private Long corp_id;
+        private SourceInfo source_info;
+        private String remarks;
+        private Integer seq;
+        private Integer status;
+
+    }
+
+    @Data
+    public static class SourceInfo {
+        private Long vid;
+        private String wx_friend_name;
+        private Integer apply_mode;
+        private String mobile;
+        private Long source_roomid;
+        private Integer source_type;
+
+    }
+}

+ 28 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetChatroomMembersRequest.java

@@ -0,0 +1,28 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 用于请求获取数据的参数对象,包含 UUID、每次查询数量和起始索引。
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class GetChatroomMembersRequest {
+    /**
+     * 唯一标识符,用于标识特定的请求或会话。
+     */
+    private String uuid;
+
+    /**
+     * 每次查询获取的数据数量。
+     */
+    private Integer limit;
+
+    /**
+     * 起始索引,类似页码,第一次查询默认传 0,后续根据返回值查询下一次。
+     */
+    private Integer star_index;
+}

+ 25 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetChatroomMembersResponse.java

@@ -0,0 +1,25 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class GetChatroomMembersResponse {
+    private Integer total;
+    private Integer next_start;
+    private List<RoomInfo> roomList;
+
+    @Data
+    public static class RoomInfo {
+        private String room_id;
+        private Long create_user_id;
+        private String infoticket;
+        private Long update_time;
+        private Integer total;
+        private Long create_time;
+        private String nickname;
+        private String roomurl;
+
+    }
+}

+ 10 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetExternalContactsRequest.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class GetExternalContactsRequest {
+    private String uuid;
+    private Integer limit;
+    private Integer seq;
+}

+ 10 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetInnerContactsRequest.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class GetInnerContactsRequest {
+    private String uuid;
+    private Integer limit;
+    private String strSeq;
+}

+ 50 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetInnerContactsResponse.java

@@ -0,0 +1,50 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class GetInnerContactsResponse {
+    private List<ContactItem> list;
+    private String seq;
+
+    @Data
+    public static class ContactItem {
+        // 部门相关字段
+        private Integer disp_order;
+        private Long corpid;
+        private String party_name;
+        private Long create_time;
+        private String remark;
+        private Long partyid;
+        private Integer type;
+        private Integer is_Department;
+        private Long parentid;
+        private Integer status;
+
+        // 用户相关字段
+        private String unionid;
+        private Integer sex;
+        private String mobile;
+        private String acctid;
+        private String avatar;
+        private String english_name;
+        private String realname;
+        private List<SelfAttrInfo> SelfAttrInfo;
+        private Long user_id;
+        private String nickname;
+        private String position;
+        private Long corp_id;
+
+    }
+
+    @Data
+    public static class SelfAttrInfo {
+        private String filed_name;
+        private String filed_value;
+        private String field_id;
+        private Integer field_type;
+
+    }
+}

+ 11 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetRoomUserListRequest.java

@@ -0,0 +1,11 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class GetRoomUserListRequest {
+
+    private String uuid;
+    private long roomid;
+
+}

+ 15 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/InitRequest.java

@@ -0,0 +1,15 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class InitRequest {
+    private String vid;
+    private String ip;
+    private String port;
+    private String proxyType;
+    private String userName;
+    private String passward;
+    private Integer proxySituation;
+    private String deverType;
+}

+ 9 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/InitResponse.java

@@ -0,0 +1,9 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class InitResponse {
+    private String uuid;
+    private Boolean is_login;
+}

+ 12 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/InvitationToRoomRequest.java

@@ -0,0 +1,12 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InvitationToRoomRequest {
+    private String uuid;
+    private Long roomid;
+    private List<Long> vids;
+}

+ 50 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/LoginInfo.java

@@ -0,0 +1,50 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class LoginInfo {
+    private Long logintime;
+    private Integer loginType;
+    private UserInfo user_info;
+    private String uuid;
+
+    @Data
+    public static class UserInfo {
+        private UserObject object;
+        private Long userid;
+        private String clientId;
+        private Long updateTime;
+        private String uuid;
+        private String requrl;
+        private Boolean isLogin;
+
+        public Boolean getIsLogin() {
+            return isLogin;
+        }
+
+        public void setIsLogin(Boolean isLogin) {
+            this.isLogin = isLogin;
+        }
+    }
+
+    @Data
+    public static class UserObject {
+        private String unionid;
+        private Long create_time;
+        private Integer sex;
+        private String mobile;
+        private String acctid;
+        private String scorp_id;
+        private String avatar;
+        private String corp_name;
+        private String english_name;
+        private String realname;
+        private Long user_id;
+        private String nickname;
+        private String position;
+        private Long corp_id;
+        private String corp_full_name;
+        private String corp_desc;
+    }
+}

+ 11 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/QrCodeResponse.java

@@ -0,0 +1,11 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class QrCodeResponse {
+    private String qrcode;
+    private String qrcode_data;
+    private String Key;
+    private Long Ttl;
+}

+ 10 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SecondaryValidationResponse.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class SecondaryValidationResponse {
+    private String qrcode;
+    private String Key;
+    private Long Ttl;
+}

+ 29 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SendAppMsgRequest.java

@@ -0,0 +1,29 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class SendAppMsgRequest {
+    private String uuid;
+    private Long send_userid;
+    private String desc;
+    private String appName;
+    private String title;
+    private String weappIconUrl;
+    private String pagepath;
+    private String username;
+    private String appid;
+    private String cdnkey;
+    private String md5;
+    private String aeskey;
+    private Integer fileSize;
+    private Boolean isRoom;
+
+    public Boolean getIsRoom() {
+        return isRoom;
+    }
+
+    public void setIsRoom(Boolean isRoom) {
+        this.isRoom = isRoom;
+    }
+}

+ 39 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SendAppMsgResponse.java

@@ -0,0 +1,39 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SendAppMsgResponse {
+    private Integer id;
+    private Integer receiver;
+    private String cdnKey;
+    private String senderName;
+    private Boolean isRoom;
+    private Long serverId;
+    private String title;
+    private String pagepath;
+    private Integer size;
+    private Long sender;
+    private String appid;
+    private String aesKey;
+    private String appInfo;
+    private String roomConversationId;
+    private Integer sendtime;
+    private Integer msgId;
+    private Integer msgtype;
+    private String username;
+    private String weappIconUrl;
+    private String desc;
+    private String md5;
+    private Date createTime;
+
+    public Boolean getIsRoom() {
+        return isRoom;
+    }
+
+    public void setIsRoom(Boolean isRoom) {
+        this.isRoom = isRoom;
+    }
+}

+ 19 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SendTextMsgRequest.java

@@ -0,0 +1,19 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class SendTextMsgRequest {
+    private String uuid;
+    private Long send_userid;
+    private Boolean isRoom;
+    private String content;
+
+    public Boolean getIsRoom() {
+        return isRoom;
+    }
+
+    public void setIsRoom(Boolean isRoom) {
+        this.isRoom = isRoom;
+    }
+}

+ 9 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SetCallbackUrlRequest.java

@@ -0,0 +1,9 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class SetCallbackUrlRequest {
+    private String uuid;
+    private String url;
+}

+ 10 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SetChatroomInviteRequest.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class SetChatroomInviteRequest {
+    private String uuid;
+    private Long roomid;
+    private Boolean status;
+}

+ 10 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/SetRoomManagementRequest.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class SetRoomManagementRequest {
+    private String uuid;
+    private Long roomid;
+    private Integer newFlag;
+}

+ 10 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/TransferChatroomOwnerRequest.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.Data;
+
+@Data
+public class TransferChatroomOwnerRequest {
+    private String uuid;
+    private Long roomid;
+    private Long vid;
+}

+ 12 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/UuidRequest.java

@@ -0,0 +1,12 @@
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class UuidRequest {
+    private String uuid;
+}

+ 92 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComCorp.java

@@ -0,0 +1,92 @@
+package com.tzld.piaoquan.api.model.po.wecom.thirdpart;
+
+import java.util.Date;
+
+public class ThirdPartWeComCorp {
+    private Long id;
+
+    private String name;
+
+    private Long corpId;
+
+    private Long thirdCorpId;
+
+    private Integer isDelete;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Long getCorpId() {
+        return corpId;
+    }
+
+    public void setCorpId(Long corpId) {
+        this.corpId = corpId;
+    }
+
+    public Long getThirdCorpId() {
+        return thirdCorpId;
+    }
+
+    public void setThirdCorpId(Long thirdCorpId) {
+        this.thirdCorpId = thirdCorpId;
+    }
+
+    public Integer getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(Integer isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", name=").append(name);
+        sb.append(", corpId=").append(corpId);
+        sb.append(", thirdCorpId=").append(thirdCorpId);
+        sb.append(", isDelete=").append(isDelete);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 642 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComCorpExample.java

@@ -0,0 +1,642 @@
+package com.tzld.piaoquan.api.model.po.wecom.thirdpart;
+
+import com.tzld.piaoquan.growth.common.utils.page.Page;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class ThirdPartWeComCorpExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    protected Page page;
+
+    public ThirdPartWeComCorpExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    public void setPage(Page page) {
+        this.page=page;
+    }
+
+    public Page getPage() {
+        return page;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNull() {
+            addCriterion("`name` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNotNull() {
+            addCriterion("`name` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameEqualTo(String value) {
+            addCriterion("`name` =", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotEqualTo(String value) {
+            addCriterion("`name` <>", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThan(String value) {
+            addCriterion("`name` >", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThanOrEqualTo(String value) {
+            addCriterion("`name` >=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThan(String value) {
+            addCriterion("`name` <", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThanOrEqualTo(String value) {
+            addCriterion("`name` <=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLike(String value) {
+            addCriterion("`name` like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotLike(String value) {
+            addCriterion("`name` not like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIn(List<String> values) {
+            addCriterion("`name` in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotIn(List<String> values) {
+            addCriterion("`name` not in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameBetween(String value1, String value2) {
+            addCriterion("`name` between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotBetween(String value1, String value2) {
+            addCriterion("`name` not between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdIsNull() {
+            addCriterion("corp_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdIsNotNull() {
+            addCriterion("corp_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdEqualTo(Long value) {
+            addCriterion("corp_id =", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdNotEqualTo(Long value) {
+            addCriterion("corp_id <>", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdGreaterThan(Long value) {
+            addCriterion("corp_id >", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("corp_id >=", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdLessThan(Long value) {
+            addCriterion("corp_id <", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdLessThanOrEqualTo(Long value) {
+            addCriterion("corp_id <=", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdIn(List<Long> values) {
+            addCriterion("corp_id in", values, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdNotIn(List<Long> values) {
+            addCriterion("corp_id not in", values, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdBetween(Long value1, Long value2) {
+            addCriterion("corp_id between", value1, value2, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdNotBetween(Long value1, Long value2) {
+            addCriterion("corp_id not between", value1, value2, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdIsNull() {
+            addCriterion("third_corp_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdIsNotNull() {
+            addCriterion("third_corp_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdEqualTo(Long value) {
+            addCriterion("third_corp_id =", value, "thirdCorpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdNotEqualTo(Long value) {
+            addCriterion("third_corp_id <>", value, "thirdCorpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdGreaterThan(Long value) {
+            addCriterion("third_corp_id >", value, "thirdCorpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("third_corp_id >=", value, "thirdCorpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdLessThan(Long value) {
+            addCriterion("third_corp_id <", value, "thirdCorpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdLessThanOrEqualTo(Long value) {
+            addCriterion("third_corp_id <=", value, "thirdCorpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdIn(List<Long> values) {
+            addCriterion("third_corp_id in", values, "thirdCorpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdNotIn(List<Long> values) {
+            addCriterion("third_corp_id not in", values, "thirdCorpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdBetween(Long value1, Long value2) {
+            addCriterion("third_corp_id between", value1, value2, "thirdCorpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCorpIdNotBetween(Long value1, Long value2) {
+            addCriterion("third_corp_id not between", value1, value2, "thirdCorpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNull() {
+            addCriterion("is_delete is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNotNull() {
+            addCriterion("is_delete is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteEqualTo(Integer value) {
+            addCriterion("is_delete =", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotEqualTo(Integer value) {
+            addCriterion("is_delete <>", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThan(Integer value) {
+            addCriterion("is_delete >", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThanOrEqualTo(Integer value) {
+            addCriterion("is_delete >=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThan(Integer value) {
+            addCriterion("is_delete <", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThanOrEqualTo(Integer value) {
+            addCriterion("is_delete <=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIn(List<Integer> values) {
+            addCriterion("is_delete in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotIn(List<Integer> values) {
+            addCriterion("is_delete not in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteBetween(Integer value1, Integer value2) {
+            addCriterion("is_delete between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotBetween(Integer value1, Integer value2) {
+            addCriterion("is_delete not between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 224 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComMsg.java

@@ -0,0 +1,224 @@
+package com.tzld.piaoquan.api.model.po.wecom.thirdpart;
+
+import java.util.Date;
+
+public class ThirdPartWeComMsg {
+    private Long id;
+
+    private String uuid;
+
+    private Long sendUserid;
+
+    private Long staffId;
+
+    private Long videoId;
+
+    private String appname;
+
+    private String title;
+
+    private String weappiconurl;
+
+    private String pagepath;
+
+    private String rootSourceId;
+
+    private String username;
+
+    private String appid;
+
+    private String cdnkey;
+
+    private String md5;
+
+    private String aeskey;
+
+    private Integer filesize;
+
+    private Boolean isroom;
+
+    private Date createTime;
+
+    private String desc;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public Long getSendUserid() {
+        return sendUserid;
+    }
+
+    public void setSendUserid(Long sendUserid) {
+        this.sendUserid = sendUserid;
+    }
+
+    public Long getStaffId() {
+        return staffId;
+    }
+
+    public void setStaffId(Long staffId) {
+        this.staffId = staffId;
+    }
+
+    public Long getVideoId() {
+        return videoId;
+    }
+
+    public void setVideoId(Long videoId) {
+        this.videoId = videoId;
+    }
+
+    public String getAppname() {
+        return appname;
+    }
+
+    public void setAppname(String appname) {
+        this.appname = appname;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getWeappiconurl() {
+        return weappiconurl;
+    }
+
+    public void setWeappiconurl(String weappiconurl) {
+        this.weappiconurl = weappiconurl;
+    }
+
+    public String getPagepath() {
+        return pagepath;
+    }
+
+    public void setPagepath(String pagepath) {
+        this.pagepath = pagepath;
+    }
+
+    public String getRootSourceId() {
+        return rootSourceId;
+    }
+
+    public void setRootSourceId(String rootSourceId) {
+        this.rootSourceId = rootSourceId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getAppid() {
+        return appid;
+    }
+
+    public void setAppid(String appid) {
+        this.appid = appid;
+    }
+
+    public String getCdnkey() {
+        return cdnkey;
+    }
+
+    public void setCdnkey(String cdnkey) {
+        this.cdnkey = cdnkey;
+    }
+
+    public String getMd5() {
+        return md5;
+    }
+
+    public void setMd5(String md5) {
+        this.md5 = md5;
+    }
+
+    public String getAeskey() {
+        return aeskey;
+    }
+
+    public void setAeskey(String aeskey) {
+        this.aeskey = aeskey;
+    }
+
+    public Integer getFilesize() {
+        return filesize;
+    }
+
+    public void setFilesize(Integer filesize) {
+        this.filesize = filesize;
+    }
+
+    public Boolean getIsroom() {
+        return isroom;
+    }
+
+    public void setIsroom(Boolean isroom) {
+        this.isroom = isroom;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", uuid=").append(uuid);
+        sb.append(", sendUserid=").append(sendUserid);
+        sb.append(", staffId=").append(staffId);
+        sb.append(", videoId=").append(videoId);
+        sb.append(", appname=").append(appname);
+        sb.append(", title=").append(title);
+        sb.append(", weappiconurl=").append(weappiconurl);
+        sb.append(", pagepath=").append(pagepath);
+        sb.append(", rootSourceId=").append(rootSourceId);
+        sb.append(", username=").append(username);
+        sb.append(", appid=").append(appid);
+        sb.append(", cdnkey=").append(cdnkey);
+        sb.append(", md5=").append(md5);
+        sb.append(", aeskey=").append(aeskey);
+        sb.append(", filesize=").append(filesize);
+        sb.append(", isroom=").append(isroom);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", desc=").append(desc);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 1402 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComMsgExample.java

@@ -0,0 +1,1402 @@
+package com.tzld.piaoquan.api.model.po.wecom.thirdpart;
+
+import com.tzld.piaoquan.growth.common.utils.page.Page;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class ThirdPartWeComMsgExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    protected Page page;
+
+    public ThirdPartWeComMsgExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    public void setPage(Page page) {
+        this.page=page;
+    }
+
+    public Page getPage() {
+        return page;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidIsNull() {
+            addCriterion("uuid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidIsNotNull() {
+            addCriterion("uuid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidEqualTo(String value) {
+            addCriterion("uuid =", value, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidNotEqualTo(String value) {
+            addCriterion("uuid <>", value, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidGreaterThan(String value) {
+            addCriterion("uuid >", value, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidGreaterThanOrEqualTo(String value) {
+            addCriterion("uuid >=", value, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidLessThan(String value) {
+            addCriterion("uuid <", value, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidLessThanOrEqualTo(String value) {
+            addCriterion("uuid <=", value, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidLike(String value) {
+            addCriterion("uuid like", value, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidNotLike(String value) {
+            addCriterion("uuid not like", value, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidIn(List<String> values) {
+            addCriterion("uuid in", values, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidNotIn(List<String> values) {
+            addCriterion("uuid not in", values, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidBetween(String value1, String value2) {
+            addCriterion("uuid between", value1, value2, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUuidNotBetween(String value1, String value2) {
+            addCriterion("uuid not between", value1, value2, "uuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridIsNull() {
+            addCriterion("send_userid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridIsNotNull() {
+            addCriterion("send_userid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridEqualTo(Long value) {
+            addCriterion("send_userid =", value, "sendUserid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridNotEqualTo(Long value) {
+            addCriterion("send_userid <>", value, "sendUserid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridGreaterThan(Long value) {
+            addCriterion("send_userid >", value, "sendUserid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridGreaterThanOrEqualTo(Long value) {
+            addCriterion("send_userid >=", value, "sendUserid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridLessThan(Long value) {
+            addCriterion("send_userid <", value, "sendUserid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridLessThanOrEqualTo(Long value) {
+            addCriterion("send_userid <=", value, "sendUserid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridIn(List<Long> values) {
+            addCriterion("send_userid in", values, "sendUserid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridNotIn(List<Long> values) {
+            addCriterion("send_userid not in", values, "sendUserid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridBetween(Long value1, Long value2) {
+            addCriterion("send_userid between", value1, value2, "sendUserid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendUseridNotBetween(Long value1, Long value2) {
+            addCriterion("send_userid not between", value1, value2, "sendUserid");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdIsNull() {
+            addCriterion("staff_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdIsNotNull() {
+            addCriterion("staff_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdEqualTo(Long value) {
+            addCriterion("staff_id =", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdNotEqualTo(Long value) {
+            addCriterion("staff_id <>", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdGreaterThan(Long value) {
+            addCriterion("staff_id >", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("staff_id >=", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdLessThan(Long value) {
+            addCriterion("staff_id <", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdLessThanOrEqualTo(Long value) {
+            addCriterion("staff_id <=", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdIn(List<Long> values) {
+            addCriterion("staff_id in", values, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdNotIn(List<Long> values) {
+            addCriterion("staff_id not in", values, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdBetween(Long value1, Long value2) {
+            addCriterion("staff_id between", value1, value2, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdNotBetween(Long value1, Long value2) {
+            addCriterion("staff_id not between", value1, value2, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdIsNull() {
+            addCriterion("video_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdIsNotNull() {
+            addCriterion("video_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdEqualTo(Long value) {
+            addCriterion("video_id =", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdNotEqualTo(Long value) {
+            addCriterion("video_id <>", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdGreaterThan(Long value) {
+            addCriterion("video_id >", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("video_id >=", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdLessThan(Long value) {
+            addCriterion("video_id <", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdLessThanOrEqualTo(Long value) {
+            addCriterion("video_id <=", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdIn(List<Long> values) {
+            addCriterion("video_id in", values, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdNotIn(List<Long> values) {
+            addCriterion("video_id not in", values, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdBetween(Long value1, Long value2) {
+            addCriterion("video_id between", value1, value2, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdNotBetween(Long value1, Long value2) {
+            addCriterion("video_id not between", value1, value2, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameIsNull() {
+            addCriterion("appName is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameIsNotNull() {
+            addCriterion("appName is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameEqualTo(String value) {
+            addCriterion("appName =", value, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameNotEqualTo(String value) {
+            addCriterion("appName <>", value, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameGreaterThan(String value) {
+            addCriterion("appName >", value, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameGreaterThanOrEqualTo(String value) {
+            addCriterion("appName >=", value, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameLessThan(String value) {
+            addCriterion("appName <", value, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameLessThanOrEqualTo(String value) {
+            addCriterion("appName <=", value, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameLike(String value) {
+            addCriterion("appName like", value, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameNotLike(String value) {
+            addCriterion("appName not like", value, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameIn(List<String> values) {
+            addCriterion("appName in", values, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameNotIn(List<String> values) {
+            addCriterion("appName not in", values, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameBetween(String value1, String value2) {
+            addCriterion("appName between", value1, value2, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppnameNotBetween(String value1, String value2) {
+            addCriterion("appName not between", value1, value2, "appname");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIsNull() {
+            addCriterion("title is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIsNotNull() {
+            addCriterion("title is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleEqualTo(String value) {
+            addCriterion("title =", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotEqualTo(String value) {
+            addCriterion("title <>", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleGreaterThan(String value) {
+            addCriterion("title >", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleGreaterThanOrEqualTo(String value) {
+            addCriterion("title >=", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLessThan(String value) {
+            addCriterion("title <", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLessThanOrEqualTo(String value) {
+            addCriterion("title <=", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLike(String value) {
+            addCriterion("title like", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotLike(String value) {
+            addCriterion("title not like", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIn(List<String> values) {
+            addCriterion("title in", values, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotIn(List<String> values) {
+            addCriterion("title not in", values, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleBetween(String value1, String value2) {
+            addCriterion("title between", value1, value2, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotBetween(String value1, String value2) {
+            addCriterion("title not between", value1, value2, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlIsNull() {
+            addCriterion("weappIconUrl is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlIsNotNull() {
+            addCriterion("weappIconUrl is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlEqualTo(String value) {
+            addCriterion("weappIconUrl =", value, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlNotEqualTo(String value) {
+            addCriterion("weappIconUrl <>", value, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlGreaterThan(String value) {
+            addCriterion("weappIconUrl >", value, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlGreaterThanOrEqualTo(String value) {
+            addCriterion("weappIconUrl >=", value, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlLessThan(String value) {
+            addCriterion("weappIconUrl <", value, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlLessThanOrEqualTo(String value) {
+            addCriterion("weappIconUrl <=", value, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlLike(String value) {
+            addCriterion("weappIconUrl like", value, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlNotLike(String value) {
+            addCriterion("weappIconUrl not like", value, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlIn(List<String> values) {
+            addCriterion("weappIconUrl in", values, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlNotIn(List<String> values) {
+            addCriterion("weappIconUrl not in", values, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlBetween(String value1, String value2) {
+            addCriterion("weappIconUrl between", value1, value2, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeappiconurlNotBetween(String value1, String value2) {
+            addCriterion("weappIconUrl not between", value1, value2, "weappiconurl");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathIsNull() {
+            addCriterion("pagepath is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathIsNotNull() {
+            addCriterion("pagepath is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathEqualTo(String value) {
+            addCriterion("pagepath =", value, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathNotEqualTo(String value) {
+            addCriterion("pagepath <>", value, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathGreaterThan(String value) {
+            addCriterion("pagepath >", value, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathGreaterThanOrEqualTo(String value) {
+            addCriterion("pagepath >=", value, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathLessThan(String value) {
+            addCriterion("pagepath <", value, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathLessThanOrEqualTo(String value) {
+            addCriterion("pagepath <=", value, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathLike(String value) {
+            addCriterion("pagepath like", value, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathNotLike(String value) {
+            addCriterion("pagepath not like", value, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathIn(List<String> values) {
+            addCriterion("pagepath in", values, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathNotIn(List<String> values) {
+            addCriterion("pagepath not in", values, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathBetween(String value1, String value2) {
+            addCriterion("pagepath between", value1, value2, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagepathNotBetween(String value1, String value2) {
+            addCriterion("pagepath not between", value1, value2, "pagepath");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdIsNull() {
+            addCriterion("root_source_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdIsNotNull() {
+            addCriterion("root_source_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdEqualTo(String value) {
+            addCriterion("root_source_id =", value, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdNotEqualTo(String value) {
+            addCriterion("root_source_id <>", value, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdGreaterThan(String value) {
+            addCriterion("root_source_id >", value, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdGreaterThanOrEqualTo(String value) {
+            addCriterion("root_source_id >=", value, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdLessThan(String value) {
+            addCriterion("root_source_id <", value, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdLessThanOrEqualTo(String value) {
+            addCriterion("root_source_id <=", value, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdLike(String value) {
+            addCriterion("root_source_id like", value, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdNotLike(String value) {
+            addCriterion("root_source_id not like", value, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdIn(List<String> values) {
+            addCriterion("root_source_id in", values, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdNotIn(List<String> values) {
+            addCriterion("root_source_id not in", values, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdBetween(String value1, String value2) {
+            addCriterion("root_source_id between", value1, value2, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootSourceIdNotBetween(String value1, String value2) {
+            addCriterion("root_source_id not between", value1, value2, "rootSourceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameIsNull() {
+            addCriterion("username is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameIsNotNull() {
+            addCriterion("username is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameEqualTo(String value) {
+            addCriterion("username =", value, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameNotEqualTo(String value) {
+            addCriterion("username <>", value, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameGreaterThan(String value) {
+            addCriterion("username >", value, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameGreaterThanOrEqualTo(String value) {
+            addCriterion("username >=", value, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameLessThan(String value) {
+            addCriterion("username <", value, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameLessThanOrEqualTo(String value) {
+            addCriterion("username <=", value, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameLike(String value) {
+            addCriterion("username like", value, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameNotLike(String value) {
+            addCriterion("username not like", value, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameIn(List<String> values) {
+            addCriterion("username in", values, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameNotIn(List<String> values) {
+            addCriterion("username not in", values, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameBetween(String value1, String value2) {
+            addCriterion("username between", value1, value2, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andUsernameNotBetween(String value1, String value2) {
+            addCriterion("username not between", value1, value2, "username");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidIsNull() {
+            addCriterion("appid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidIsNotNull() {
+            addCriterion("appid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidEqualTo(String value) {
+            addCriterion("appid =", value, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidNotEqualTo(String value) {
+            addCriterion("appid <>", value, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidGreaterThan(String value) {
+            addCriterion("appid >", value, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidGreaterThanOrEqualTo(String value) {
+            addCriterion("appid >=", value, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidLessThan(String value) {
+            addCriterion("appid <", value, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidLessThanOrEqualTo(String value) {
+            addCriterion("appid <=", value, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidLike(String value) {
+            addCriterion("appid like", value, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidNotLike(String value) {
+            addCriterion("appid not like", value, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidIn(List<String> values) {
+            addCriterion("appid in", values, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidNotIn(List<String> values) {
+            addCriterion("appid not in", values, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidBetween(String value1, String value2) {
+            addCriterion("appid between", value1, value2, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andAppidNotBetween(String value1, String value2) {
+            addCriterion("appid not between", value1, value2, "appid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyIsNull() {
+            addCriterion("cdnkey is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyIsNotNull() {
+            addCriterion("cdnkey is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyEqualTo(String value) {
+            addCriterion("cdnkey =", value, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyNotEqualTo(String value) {
+            addCriterion("cdnkey <>", value, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyGreaterThan(String value) {
+            addCriterion("cdnkey >", value, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyGreaterThanOrEqualTo(String value) {
+            addCriterion("cdnkey >=", value, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyLessThan(String value) {
+            addCriterion("cdnkey <", value, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyLessThanOrEqualTo(String value) {
+            addCriterion("cdnkey <=", value, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyLike(String value) {
+            addCriterion("cdnkey like", value, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyNotLike(String value) {
+            addCriterion("cdnkey not like", value, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyIn(List<String> values) {
+            addCriterion("cdnkey in", values, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyNotIn(List<String> values) {
+            addCriterion("cdnkey not in", values, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyBetween(String value1, String value2) {
+            addCriterion("cdnkey between", value1, value2, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andCdnkeyNotBetween(String value1, String value2) {
+            addCriterion("cdnkey not between", value1, value2, "cdnkey");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5IsNull() {
+            addCriterion("md5 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5IsNotNull() {
+            addCriterion("md5 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5EqualTo(String value) {
+            addCriterion("md5 =", value, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5NotEqualTo(String value) {
+            addCriterion("md5 <>", value, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5GreaterThan(String value) {
+            addCriterion("md5 >", value, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5GreaterThanOrEqualTo(String value) {
+            addCriterion("md5 >=", value, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5LessThan(String value) {
+            addCriterion("md5 <", value, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5LessThanOrEqualTo(String value) {
+            addCriterion("md5 <=", value, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5Like(String value) {
+            addCriterion("md5 like", value, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5NotLike(String value) {
+            addCriterion("md5 not like", value, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5In(List<String> values) {
+            addCriterion("md5 in", values, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5NotIn(List<String> values) {
+            addCriterion("md5 not in", values, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5Between(String value1, String value2) {
+            addCriterion("md5 between", value1, value2, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andMd5NotBetween(String value1, String value2) {
+            addCriterion("md5 not between", value1, value2, "md5");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyIsNull() {
+            addCriterion("aeskey is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyIsNotNull() {
+            addCriterion("aeskey is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyEqualTo(String value) {
+            addCriterion("aeskey =", value, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyNotEqualTo(String value) {
+            addCriterion("aeskey <>", value, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyGreaterThan(String value) {
+            addCriterion("aeskey >", value, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyGreaterThanOrEqualTo(String value) {
+            addCriterion("aeskey >=", value, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyLessThan(String value) {
+            addCriterion("aeskey <", value, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyLessThanOrEqualTo(String value) {
+            addCriterion("aeskey <=", value, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyLike(String value) {
+            addCriterion("aeskey like", value, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyNotLike(String value) {
+            addCriterion("aeskey not like", value, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyIn(List<String> values) {
+            addCriterion("aeskey in", values, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyNotIn(List<String> values) {
+            addCriterion("aeskey not in", values, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyBetween(String value1, String value2) {
+            addCriterion("aeskey between", value1, value2, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andAeskeyNotBetween(String value1, String value2) {
+            addCriterion("aeskey not between", value1, value2, "aeskey");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeIsNull() {
+            addCriterion("fileSize is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeIsNotNull() {
+            addCriterion("fileSize is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeEqualTo(Integer value) {
+            addCriterion("fileSize =", value, "filesize");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeNotEqualTo(Integer value) {
+            addCriterion("fileSize <>", value, "filesize");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeGreaterThan(Integer value) {
+            addCriterion("fileSize >", value, "filesize");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("fileSize >=", value, "filesize");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeLessThan(Integer value) {
+            addCriterion("fileSize <", value, "filesize");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeLessThanOrEqualTo(Integer value) {
+            addCriterion("fileSize <=", value, "filesize");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeIn(List<Integer> values) {
+            addCriterion("fileSize in", values, "filesize");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeNotIn(List<Integer> values) {
+            addCriterion("fileSize not in", values, "filesize");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeBetween(Integer value1, Integer value2) {
+            addCriterion("fileSize between", value1, value2, "filesize");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilesizeNotBetween(Integer value1, Integer value2) {
+            addCriterion("fileSize not between", value1, value2, "filesize");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomIsNull() {
+            addCriterion("isRoom is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomIsNotNull() {
+            addCriterion("isRoom is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomEqualTo(Boolean value) {
+            addCriterion("isRoom =", value, "isroom");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomNotEqualTo(Boolean value) {
+            addCriterion("isRoom <>", value, "isroom");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomGreaterThan(Boolean value) {
+            addCriterion("isRoom >", value, "isroom");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomGreaterThanOrEqualTo(Boolean value) {
+            addCriterion("isRoom >=", value, "isroom");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomLessThan(Boolean value) {
+            addCriterion("isRoom <", value, "isroom");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomLessThanOrEqualTo(Boolean value) {
+            addCriterion("isRoom <=", value, "isroom");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomIn(List<Boolean> values) {
+            addCriterion("isRoom in", values, "isroom");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomNotIn(List<Boolean> values) {
+            addCriterion("isRoom not in", values, "isroom");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomBetween(Boolean value1, Boolean value2) {
+            addCriterion("isRoom between", value1, value2, "isroom");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsroomNotBetween(Boolean value1, Boolean value2) {
+            addCriterion("isRoom not between", value1, value2, "isroom");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 125 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComRoom.java

@@ -0,0 +1,125 @@
+package com.tzld.piaoquan.api.model.po.wecom.thirdpart;
+
+import java.util.Date;
+
+public class ThirdPartWeComRoom {
+    private Long id;
+
+    private Long corpId;
+
+    private Long staffId;
+
+    private String thirdRoomId;
+
+    private Long thirdCreateUserId;
+
+    private Integer memberCount;
+
+    private String name;
+
+    private String roomUrl;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getCorpId() {
+        return corpId;
+    }
+
+    public void setCorpId(Long corpId) {
+        this.corpId = corpId;
+    }
+
+    public Long getStaffId() {
+        return staffId;
+    }
+
+    public void setStaffId(Long staffId) {
+        this.staffId = staffId;
+    }
+
+    public String getThirdRoomId() {
+        return thirdRoomId;
+    }
+
+    public void setThirdRoomId(String thirdRoomId) {
+        this.thirdRoomId = thirdRoomId;
+    }
+
+    public Long getThirdCreateUserId() {
+        return thirdCreateUserId;
+    }
+
+    public void setThirdCreateUserId(Long thirdCreateUserId) {
+        this.thirdCreateUserId = thirdCreateUserId;
+    }
+
+    public Integer getMemberCount() {
+        return memberCount;
+    }
+
+    public void setMemberCount(Integer memberCount) {
+        this.memberCount = memberCount;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getRoomUrl() {
+        return roomUrl;
+    }
+
+    public void setRoomUrl(String roomUrl) {
+        this.roomUrl = roomUrl;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", corpId=").append(corpId);
+        sb.append(", staffId=").append(staffId);
+        sb.append(", thirdRoomId=").append(thirdRoomId);
+        sb.append(", thirdCreateUserId=").append(thirdCreateUserId);
+        sb.append(", memberCount=").append(memberCount);
+        sb.append(", name=").append(name);
+        sb.append(", roomUrl=").append(roomUrl);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 842 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComRoomExample.java

@@ -0,0 +1,842 @@
+package com.tzld.piaoquan.api.model.po.wecom.thirdpart;
+
+import com.tzld.piaoquan.growth.common.utils.page.Page;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class ThirdPartWeComRoomExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    protected Page page;
+
+    public ThirdPartWeComRoomExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    public void setPage(Page page) {
+        this.page=page;
+    }
+
+    public Page getPage() {
+        return page;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdIsNull() {
+            addCriterion("corp_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdIsNotNull() {
+            addCriterion("corp_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdEqualTo(Long value) {
+            addCriterion("corp_id =", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdNotEqualTo(Long value) {
+            addCriterion("corp_id <>", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdGreaterThan(Long value) {
+            addCriterion("corp_id >", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("corp_id >=", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdLessThan(Long value) {
+            addCriterion("corp_id <", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdLessThanOrEqualTo(Long value) {
+            addCriterion("corp_id <=", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdIn(List<Long> values) {
+            addCriterion("corp_id in", values, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdNotIn(List<Long> values) {
+            addCriterion("corp_id not in", values, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdBetween(Long value1, Long value2) {
+            addCriterion("corp_id between", value1, value2, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdNotBetween(Long value1, Long value2) {
+            addCriterion("corp_id not between", value1, value2, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdIsNull() {
+            addCriterion("staff_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdIsNotNull() {
+            addCriterion("staff_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdEqualTo(Long value) {
+            addCriterion("staff_id =", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdNotEqualTo(Long value) {
+            addCriterion("staff_id <>", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdGreaterThan(Long value) {
+            addCriterion("staff_id >", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("staff_id >=", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdLessThan(Long value) {
+            addCriterion("staff_id <", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdLessThanOrEqualTo(Long value) {
+            addCriterion("staff_id <=", value, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdIn(List<Long> values) {
+            addCriterion("staff_id in", values, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdNotIn(List<Long> values) {
+            addCriterion("staff_id not in", values, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdBetween(Long value1, Long value2) {
+            addCriterion("staff_id between", value1, value2, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStaffIdNotBetween(Long value1, Long value2) {
+            addCriterion("staff_id not between", value1, value2, "staffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdIsNull() {
+            addCriterion("third_room_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdIsNotNull() {
+            addCriterion("third_room_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdEqualTo(String value) {
+            addCriterion("third_room_id =", value, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdNotEqualTo(String value) {
+            addCriterion("third_room_id <>", value, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdGreaterThan(String value) {
+            addCriterion("third_room_id >", value, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdGreaterThanOrEqualTo(String value) {
+            addCriterion("third_room_id >=", value, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdLessThan(String value) {
+            addCriterion("third_room_id <", value, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdLessThanOrEqualTo(String value) {
+            addCriterion("third_room_id <=", value, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdLike(String value) {
+            addCriterion("third_room_id like", value, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdNotLike(String value) {
+            addCriterion("third_room_id not like", value, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdIn(List<String> values) {
+            addCriterion("third_room_id in", values, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdNotIn(List<String> values) {
+            addCriterion("third_room_id not in", values, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdBetween(String value1, String value2) {
+            addCriterion("third_room_id between", value1, value2, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdRoomIdNotBetween(String value1, String value2) {
+            addCriterion("third_room_id not between", value1, value2, "thirdRoomId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdIsNull() {
+            addCriterion("third_create_user_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdIsNotNull() {
+            addCriterion("third_create_user_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdEqualTo(Long value) {
+            addCriterion("third_create_user_id =", value, "thirdCreateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdNotEqualTo(Long value) {
+            addCriterion("third_create_user_id <>", value, "thirdCreateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdGreaterThan(Long value) {
+            addCriterion("third_create_user_id >", value, "thirdCreateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("third_create_user_id >=", value, "thirdCreateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdLessThan(Long value) {
+            addCriterion("third_create_user_id <", value, "thirdCreateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdLessThanOrEqualTo(Long value) {
+            addCriterion("third_create_user_id <=", value, "thirdCreateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdIn(List<Long> values) {
+            addCriterion("third_create_user_id in", values, "thirdCreateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdNotIn(List<Long> values) {
+            addCriterion("third_create_user_id not in", values, "thirdCreateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdBetween(Long value1, Long value2) {
+            addCriterion("third_create_user_id between", value1, value2, "thirdCreateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdCreateUserIdNotBetween(Long value1, Long value2) {
+            addCriterion("third_create_user_id not between", value1, value2, "thirdCreateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountIsNull() {
+            addCriterion("member_count is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountIsNotNull() {
+            addCriterion("member_count is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountEqualTo(Integer value) {
+            addCriterion("member_count =", value, "memberCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountNotEqualTo(Integer value) {
+            addCriterion("member_count <>", value, "memberCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountGreaterThan(Integer value) {
+            addCriterion("member_count >", value, "memberCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountGreaterThanOrEqualTo(Integer value) {
+            addCriterion("member_count >=", value, "memberCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountLessThan(Integer value) {
+            addCriterion("member_count <", value, "memberCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountLessThanOrEqualTo(Integer value) {
+            addCriterion("member_count <=", value, "memberCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountIn(List<Integer> values) {
+            addCriterion("member_count in", values, "memberCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountNotIn(List<Integer> values) {
+            addCriterion("member_count not in", values, "memberCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountBetween(Integer value1, Integer value2) {
+            addCriterion("member_count between", value1, value2, "memberCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberCountNotBetween(Integer value1, Integer value2) {
+            addCriterion("member_count not between", value1, value2, "memberCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNull() {
+            addCriterion("`name` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNotNull() {
+            addCriterion("`name` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameEqualTo(String value) {
+            addCriterion("`name` =", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotEqualTo(String value) {
+            addCriterion("`name` <>", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThan(String value) {
+            addCriterion("`name` >", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThanOrEqualTo(String value) {
+            addCriterion("`name` >=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThan(String value) {
+            addCriterion("`name` <", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThanOrEqualTo(String value) {
+            addCriterion("`name` <=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLike(String value) {
+            addCriterion("`name` like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotLike(String value) {
+            addCriterion("`name` not like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIn(List<String> values) {
+            addCriterion("`name` in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotIn(List<String> values) {
+            addCriterion("`name` not in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameBetween(String value1, String value2) {
+            addCriterion("`name` between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotBetween(String value1, String value2) {
+            addCriterion("`name` not between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlIsNull() {
+            addCriterion("room_url is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlIsNotNull() {
+            addCriterion("room_url is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlEqualTo(String value) {
+            addCriterion("room_url =", value, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlNotEqualTo(String value) {
+            addCriterion("room_url <>", value, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlGreaterThan(String value) {
+            addCriterion("room_url >", value, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlGreaterThanOrEqualTo(String value) {
+            addCriterion("room_url >=", value, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlLessThan(String value) {
+            addCriterion("room_url <", value, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlLessThanOrEqualTo(String value) {
+            addCriterion("room_url <=", value, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlLike(String value) {
+            addCriterion("room_url like", value, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlNotLike(String value) {
+            addCriterion("room_url not like", value, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlIn(List<String> values) {
+            addCriterion("room_url in", values, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlNotIn(List<String> values) {
+            addCriterion("room_url not in", values, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlBetween(String value1, String value2) {
+            addCriterion("room_url between", value1, value2, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomUrlNotBetween(String value1, String value2) {
+            addCriterion("room_url not between", value1, value2, "roomUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 125 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComStaff.java

@@ -0,0 +1,125 @@
+package com.tzld.piaoquan.api.model.po.wecom.thirdpart;
+
+import java.util.Date;
+
+public class ThirdPartWeComStaff {
+    private Long id;
+
+    private Long corpId;
+
+    private String mobile;
+
+    private String name;
+
+    private String avatar;
+
+    private Long thirdStaffId;
+
+    private String thirdUuid;
+
+    private Integer status;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getCorpId() {
+        return corpId;
+    }
+
+    public void setCorpId(Long corpId) {
+        this.corpId = corpId;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public Long getThirdStaffId() {
+        return thirdStaffId;
+    }
+
+    public void setThirdStaffId(Long thirdStaffId) {
+        this.thirdStaffId = thirdStaffId;
+    }
+
+    public String getThirdUuid() {
+        return thirdUuid;
+    }
+
+    public void setThirdUuid(String thirdUuid) {
+        this.thirdUuid = thirdUuid;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", corpId=").append(corpId);
+        sb.append(", mobile=").append(mobile);
+        sb.append(", name=").append(name);
+        sb.append(", avatar=").append(avatar);
+        sb.append(", thirdStaffId=").append(thirdStaffId);
+        sb.append(", thirdUuid=").append(thirdUuid);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 852 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComStaffExample.java

@@ -0,0 +1,852 @@
+package com.tzld.piaoquan.api.model.po.wecom.thirdpart;
+
+import com.tzld.piaoquan.growth.common.utils.page.Page;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class ThirdPartWeComStaffExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    protected Page page;
+
+    public ThirdPartWeComStaffExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    public void setPage(Page page) {
+        this.page=page;
+    }
+
+    public Page getPage() {
+        return page;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdIsNull() {
+            addCriterion("corp_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdIsNotNull() {
+            addCriterion("corp_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdEqualTo(Long value) {
+            addCriterion("corp_id =", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdNotEqualTo(Long value) {
+            addCriterion("corp_id <>", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdGreaterThan(Long value) {
+            addCriterion("corp_id >", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("corp_id >=", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdLessThan(Long value) {
+            addCriterion("corp_id <", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdLessThanOrEqualTo(Long value) {
+            addCriterion("corp_id <=", value, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdIn(List<Long> values) {
+            addCriterion("corp_id in", values, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdNotIn(List<Long> values) {
+            addCriterion("corp_id not in", values, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdBetween(Long value1, Long value2) {
+            addCriterion("corp_id between", value1, value2, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCorpIdNotBetween(Long value1, Long value2) {
+            addCriterion("corp_id not between", value1, value2, "corpId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileIsNull() {
+            addCriterion("mobile is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileIsNotNull() {
+            addCriterion("mobile is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileEqualTo(String value) {
+            addCriterion("mobile =", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileNotEqualTo(String value) {
+            addCriterion("mobile <>", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileGreaterThan(String value) {
+            addCriterion("mobile >", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileGreaterThanOrEqualTo(String value) {
+            addCriterion("mobile >=", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileLessThan(String value) {
+            addCriterion("mobile <", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileLessThanOrEqualTo(String value) {
+            addCriterion("mobile <=", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileLike(String value) {
+            addCriterion("mobile like", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileNotLike(String value) {
+            addCriterion("mobile not like", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileIn(List<String> values) {
+            addCriterion("mobile in", values, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileNotIn(List<String> values) {
+            addCriterion("mobile not in", values, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileBetween(String value1, String value2) {
+            addCriterion("mobile between", value1, value2, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileNotBetween(String value1, String value2) {
+            addCriterion("mobile not between", value1, value2, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNull() {
+            addCriterion("`name` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNotNull() {
+            addCriterion("`name` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameEqualTo(String value) {
+            addCriterion("`name` =", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotEqualTo(String value) {
+            addCriterion("`name` <>", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThan(String value) {
+            addCriterion("`name` >", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThanOrEqualTo(String value) {
+            addCriterion("`name` >=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThan(String value) {
+            addCriterion("`name` <", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThanOrEqualTo(String value) {
+            addCriterion("`name` <=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLike(String value) {
+            addCriterion("`name` like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotLike(String value) {
+            addCriterion("`name` not like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIn(List<String> values) {
+            addCriterion("`name` in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotIn(List<String> values) {
+            addCriterion("`name` not in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameBetween(String value1, String value2) {
+            addCriterion("`name` between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotBetween(String value1, String value2) {
+            addCriterion("`name` not between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarIsNull() {
+            addCriterion("avatar is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarIsNotNull() {
+            addCriterion("avatar is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarEqualTo(String value) {
+            addCriterion("avatar =", value, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarNotEqualTo(String value) {
+            addCriterion("avatar <>", value, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarGreaterThan(String value) {
+            addCriterion("avatar >", value, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarGreaterThanOrEqualTo(String value) {
+            addCriterion("avatar >=", value, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarLessThan(String value) {
+            addCriterion("avatar <", value, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarLessThanOrEqualTo(String value) {
+            addCriterion("avatar <=", value, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarLike(String value) {
+            addCriterion("avatar like", value, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarNotLike(String value) {
+            addCriterion("avatar not like", value, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarIn(List<String> values) {
+            addCriterion("avatar in", values, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarNotIn(List<String> values) {
+            addCriterion("avatar not in", values, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarBetween(String value1, String value2) {
+            addCriterion("avatar between", value1, value2, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andAvatarNotBetween(String value1, String value2) {
+            addCriterion("avatar not between", value1, value2, "avatar");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdIsNull() {
+            addCriterion("third_staff_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdIsNotNull() {
+            addCriterion("third_staff_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdEqualTo(Long value) {
+            addCriterion("third_staff_id =", value, "thirdStaffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdNotEqualTo(Long value) {
+            addCriterion("third_staff_id <>", value, "thirdStaffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdGreaterThan(Long value) {
+            addCriterion("third_staff_id >", value, "thirdStaffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("third_staff_id >=", value, "thirdStaffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdLessThan(Long value) {
+            addCriterion("third_staff_id <", value, "thirdStaffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdLessThanOrEqualTo(Long value) {
+            addCriterion("third_staff_id <=", value, "thirdStaffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdIn(List<Long> values) {
+            addCriterion("third_staff_id in", values, "thirdStaffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdNotIn(List<Long> values) {
+            addCriterion("third_staff_id not in", values, "thirdStaffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdBetween(Long value1, Long value2) {
+            addCriterion("third_staff_id between", value1, value2, "thirdStaffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdStaffIdNotBetween(Long value1, Long value2) {
+            addCriterion("third_staff_id not between", value1, value2, "thirdStaffId");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidIsNull() {
+            addCriterion("third_uuid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidIsNotNull() {
+            addCriterion("third_uuid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidEqualTo(String value) {
+            addCriterion("third_uuid =", value, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidNotEqualTo(String value) {
+            addCriterion("third_uuid <>", value, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidGreaterThan(String value) {
+            addCriterion("third_uuid >", value, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidGreaterThanOrEqualTo(String value) {
+            addCriterion("third_uuid >=", value, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidLessThan(String value) {
+            addCriterion("third_uuid <", value, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidLessThanOrEqualTo(String value) {
+            addCriterion("third_uuid <=", value, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidLike(String value) {
+            addCriterion("third_uuid like", value, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidNotLike(String value) {
+            addCriterion("third_uuid not like", value, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidIn(List<String> values) {
+            addCriterion("third_uuid in", values, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidNotIn(List<String> values) {
+            addCriterion("third_uuid not in", values, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidBetween(String value1, String value2) {
+            addCriterion("third_uuid between", value1, value2, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andThirdUuidNotBetween(String value1, String value2) {
+            addCriterion("third_uuid not between", value1, value2, "thirdUuid");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("`status` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("`status` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(Integer value) {
+            addCriterion("`status` =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(Integer value) {
+            addCriterion("`status` <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(Integer value) {
+            addCriterion("`status` >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("`status` >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(Integer value) {
+            addCriterion("`status` <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("`status` <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<Integer> values) {
+            addCriterion("`status` in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<Integer> values) {
+            addCriterion("`status` not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(Integer value1, Integer value2) {
+            addCriterion("`status` between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("`status` not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 39 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/WeComThirdPartyService.java

@@ -0,0 +1,39 @@
+package com.tzld.piaoquan.api.service;
+
+import com.tzld.piaoquan.api.controller.GetRoomUserListResponse;
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.*;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff;
+
+import java.util.List;
+
+public interface WeComThirdPartyService {
+
+    InitResponse init();
+
+    void setCallbackUrl(SetCallbackUrlRequest request);
+
+    QrCodeResponse getQrCode(UuidRequest request);
+
+    void setCheckCode(CheckCodeRequest request);
+
+    String secondaryValidation(UuidRequest request);
+
+    LoginInfo getRunClientByUuid(UuidRequest request);
+
+    List<GetInnerContactsResponse.ContactItem> getInnerContacts(GetInnerContactsRequest request);
+
+    List<ExternalContactsResponse.ContactItem> getExternalContacts(GetExternalContactsRequest request);
+
+    List<GetChatroomMembersResponse.RoomInfo> getChatroomMembers(GetChatroomMembersRequest request);
+
+    List<GetRoomUserListResponse.Member> getRoomUserList(GetRoomUserListRequest request);
+
+    CdnUploadImgLinkResponse cdnUploadImgLink(CdnUploadImgLinkRequest request);
+
+    void sendAppMsg(SendAppMsgRequest request);
+
+    List<ThirdPartWeComStaff> getActiveStaffList();
+
+    List<ThirdPartWeComRoom> getStaffRoomList(Long staffId);
+}

+ 303 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/impl/WeComThirdPartyServiceImpl.java

@@ -0,0 +1,303 @@
+package com.tzld.piaoquan.api.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.tzld.piaoquan.api.component.WeComThirdPartyApiClient;
+import com.tzld.piaoquan.api.controller.GetRoomUserListResponse;
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComCorpMapper;
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomMapper;
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffMapper;
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.*;
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.*;
+import com.tzld.piaoquan.api.service.WeComThirdPartyService;
+import com.tzld.piaoquan.growth.common.dao.mapper.CorpMapper;
+import com.tzld.piaoquan.growth.common.model.po.Corp;
+import com.tzld.piaoquan.growth.common.model.po.CorpExample;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Slf4j
+@Service
+public class WeComThirdPartyServiceImpl implements WeComThirdPartyService {
+
+    @Autowired
+    private WeComThirdPartyApiClient apiClient;
+    @Autowired
+    private ThirdPartWeComStaffMapper thirdPartWeComStaffMapper;
+    @Autowired
+    private ThirdPartWeComRoomMapper thirdPartWeComRoomMapper;
+    @Autowired
+    private ThirdPartWeComCorpMapper thirdPartWeComCorpMapper;
+    @Autowired
+    private CorpMapper corpMapper;
+
+    @Override
+    public InitResponse init() {
+        InitRequest request = new InitRequest();
+        request.setProxySituation(0);
+        request.setDeverType("ipad");
+        String response = apiClient.init(request);
+        CommonResponse<InitResponse> commonResponse =
+                JSONObject.parseObject(response, new TypeReference<CommonResponse<InitResponse>>() {});
+        if (commonResponse.getErrcode() != 0) {
+            log.error("init failed, response: {}", response);
+            return null;
+        }
+        return commonResponse.getData();
+    }
+
+    @Override
+    public void setCallbackUrl(SetCallbackUrlRequest request) {
+        apiClient.setCallbackUrl(request);
+    }
+
+    @Override
+    public QrCodeResponse getQrCode(UuidRequest request) {
+        String response = apiClient.getQrCode(request);
+        CommonResponse<QrCodeResponse> commonResponse =
+                JSONObject.parseObject(response, new TypeReference<CommonResponse<QrCodeResponse>>() {});
+        if (commonResponse.getErrcode() != 0) {
+            log.error("get qr code failed, response: {}", response);
+            return null;
+        }
+        return commonResponse.getData();
+    }
+
+    @Override
+    public void setCheckCode(CheckCodeRequest request) {
+        apiClient.checkCode(request);
+    }
+
+    @Override
+    public String secondaryValidation(UuidRequest request) {
+        String response = apiClient.secondaryValidation(request);
+        CommonResponse<SecondaryValidationResponse> commonResponse =
+                JSONObject.parseObject(response, new TypeReference<CommonResponse<SecondaryValidationResponse>>() {});
+        if (commonResponse.getErrcode() != 0) {
+            log.error("secondary validation failed, response: {}", response);
+            return null;
+        }
+        return commonResponse.getData().getQrcode();
+    }
+
+    @Override
+    public LoginInfo getRunClientByUuid(UuidRequest request) {
+        String response = apiClient.getRunClientByUuid(request);
+        CommonResponse<LoginInfo> commonResponse =
+                JSONObject.parseObject(response, new TypeReference<CommonResponse<LoginInfo>>() {});
+        if (commonResponse.getErrcode() != 0) {
+            log.error("get run client by uuid failed, response: {}", response);
+            return null;
+        }
+        new Thread(() -> saveStaffDetail(commonResponse.getData())).start();
+        return commonResponse.getData();
+    }
+
+    private void saveStaffDetail(LoginInfo data) {
+        if (Objects.isNull(data)) {
+            return;
+        }
+        String uuid = data.getUuid();
+        LoginInfo.UserInfo userInfo = data.getUser_info();
+        if (Objects.isNull(userInfo)) {
+            return;
+        }
+        LoginInfo.UserObject userObject = userInfo.getObject();
+        if (Objects.isNull(userObject)) {
+            return;
+        }
+        Corp corp = getCorpByName(userObject.getCorp_name());
+        ThirdPartWeComCorp existCorp = getExistCorpByThirdCorpId(userObject.getCorp_id());
+        if (Objects.isNull(existCorp)) {
+            existCorp = new ThirdPartWeComCorp();
+            existCorp.setThirdCorpId(userObject.getCorp_id());
+            existCorp.setName(userObject.getCorp_name());
+            if (Objects.nonNull(corp)) {
+                existCorp.setCorpId(corp.getId());
+            }
+            thirdPartWeComCorpMapper.insertSelective(existCorp);
+        } else {
+            if (Objects.nonNull(corp)) {
+                existCorp.setCorpId(corp.getId());
+            }
+            existCorp.setName(userObject.getCorp_name());
+            thirdPartWeComCorpMapper.updateByPrimaryKeySelective(existCorp);
+        }
+        ThirdPartWeComStaff existStaff = getExistStaffByThirdStaffId(userObject.getUser_id());
+        if (Objects.isNull(existStaff)) {
+            existStaff = new ThirdPartWeComStaff();
+            existStaff.setThirdStaffId(userObject.getUser_id());
+            existStaff.setCorpId(existCorp.getId());
+            existStaff.setName(userObject.getNickname());
+            existStaff.setMobile(userObject.getMobile());
+            existStaff.setAvatar(userObject.getAvatar());
+            existStaff.setThirdStaffId(userObject.getUser_id());
+            existStaff.setThirdUuid(uuid);
+            thirdPartWeComStaffMapper.insertSelective(existStaff);
+        } else {
+            existStaff.setCorpId(existCorp.getId());
+            existStaff.setName(userObject.getNickname());
+            existStaff.setMobile(userObject.getMobile());
+            existStaff.setAvatar(userObject.getAvatar());
+            existStaff.setThirdUuid(uuid);
+            existStaff.setStatus(0);
+            thirdPartWeComStaffMapper.updateByPrimaryKeySelective(existStaff);
+        }
+    }
+
+    private Corp getCorpByName(String corpName) {
+        CorpExample example = new CorpExample();
+        example.createCriteria().andNameEqualTo(corpName);
+        List<Corp> list = corpMapper.selectByExample(example);
+        if (list.isEmpty()) {
+            return null;
+        }
+        return list.get(0);
+    }
+
+    private ThirdPartWeComStaff getExistStaffByThirdStaffId(Long userId) {
+        ThirdPartWeComStaffExample example = new ThirdPartWeComStaffExample();
+        example.createCriteria().andThirdStaffIdEqualTo(userId);
+        List<ThirdPartWeComStaff> list = thirdPartWeComStaffMapper.selectByExample(example);
+        if (list.isEmpty()) {
+            return null;
+        }
+        return list.get(0);
+    }
+
+    private ThirdPartWeComCorp getExistCorpByThirdCorpId(Long thirdCorpId) {
+        ThirdPartWeComCorpExample example = new ThirdPartWeComCorpExample();
+        example.createCriteria().andThirdCorpIdEqualTo(thirdCorpId);
+        List<ThirdPartWeComCorp> list = thirdPartWeComCorpMapper.selectByExample(example);
+        if (list.isEmpty()) {
+            return null;
+        }
+        return list.get(0);
+    }
+
+    @Override
+    public List<GetInnerContactsResponse.ContactItem> getInnerContacts(GetInnerContactsRequest request) {
+        List<GetInnerContactsResponse.ContactItem> result = new ArrayList<>();
+        String seq = null;
+        do {
+            if (StringUtils.isBlank(seq)) {
+                request.setStrSeq("");
+            } else {
+                request.setStrSeq(seq);
+            }
+            String response = apiClient.getInnerContacts(request);
+            CommonResponse<GetInnerContactsResponse> commonResponse =
+                    JSONObject.parseObject(response, new TypeReference<CommonResponse<GetInnerContactsResponse>>() {});
+            if (commonResponse.getErrcode() != 0) {
+                log.error("get inner contacts failed, response: {}", response);
+                return result;
+            }
+            result.addAll(commonResponse.getData().getList());
+            seq = commonResponse.getData().getSeq();
+        } while (StringUtils.isNotBlank(seq));
+        return result;
+    }
+
+    @Override
+    public List<ExternalContactsResponse.ContactItem> getExternalContacts(GetExternalContactsRequest request) {
+        List<ExternalContactsResponse.ContactItem> result = new ArrayList<>();
+        Integer seq = null;
+        do {
+            if (Objects.isNull(seq)) {
+                request.setSeq(0);
+            } else {
+                request.setSeq(seq);
+            }
+            String response = apiClient.getExternalContacts(request);
+            CommonResponse<ExternalContactsResponse> commonResponse =
+                    JSONObject.parseObject(response, new TypeReference<CommonResponse<ExternalContactsResponse>>() {});
+            if (commonResponse.getErrcode() != 0) {
+                log.error("get external contacts failed, response: {}", response);
+                return result;
+            }
+            result.addAll(commonResponse.getData().getList());
+            seq = commonResponse.getData().getSeq();
+        } while (Objects.nonNull(seq));
+        return result;
+    }
+
+    @Override
+    public List<GetChatroomMembersResponse.RoomInfo> getChatroomMembers(GetChatroomMembersRequest request) {
+        List<GetChatroomMembersResponse.RoomInfo> result = new ArrayList<>();
+        Integer startIndex = null;
+        do {
+            if (Objects.isNull(startIndex)) {
+                request.setStar_index(0);
+            } else {
+                request.setStar_index(startIndex);
+            }
+            String response = apiClient.getChatroomMembers(request);
+            CommonResponse<GetChatroomMembersResponse> commonResponse =
+                    JSONObject.parseObject(response, new TypeReference<CommonResponse<GetChatroomMembersResponse>>() {});
+            if (commonResponse.getErrcode() != 0) {
+                log.error("get chatroom members failed, response: {}", response);
+                return result;
+            }
+            result.addAll(commonResponse.getData().getRoomList());
+            startIndex = commonResponse.getData().getNext_start();
+        } while (Objects.nonNull(startIndex) && startIndex > 0);
+        return result;
+    }
+
+    @Override
+    public List<GetRoomUserListResponse.Member> getRoomUserList(GetRoomUserListRequest request) {
+        List<GetRoomUserListResponse.Member> result = new ArrayList<>();
+        String response = apiClient.getRoomUserList(request);
+        CommonResponse<GetRoomUserListResponse> commonResponse =
+                JSONObject.parseObject(response, new TypeReference<CommonResponse<GetRoomUserListResponse>>() {});
+        if (commonResponse.getErrcode() != 0) {
+            log.error("get room user list failed, response: {}", response);
+            return result;
+        }
+        result.addAll(commonResponse.getData().getMember_list());
+        return result;
+    }
+
+    @Override
+    public CdnUploadImgLinkResponse cdnUploadImgLink(CdnUploadImgLinkRequest request) {
+        String response = apiClient.cdnUploadImgLink(request);
+        CommonResponse<CdnUploadImgLinkResponse> commonResponse =
+                JSONObject.parseObject(response, new TypeReference<CommonResponse<CdnUploadImgLinkResponse>>() {});
+        if (commonResponse.getErrcode() != 0) {
+            log.error("cdn upload img link failed, response: {}", response);
+            return null;
+        }
+        return commonResponse.getData();
+    }
+
+    @Override
+    public void sendAppMsg(SendAppMsgRequest request) {
+        String response = apiClient.sendAppMsg(request);
+        CommonResponse<SendAppMsgResponse> commonResponse =
+                JSONObject.parseObject(response, new TypeReference<CommonResponse<SendAppMsgResponse>>() {});
+        if (commonResponse.getErrcode() != 0) {
+            log.error("send app msg failed, response: {}", response);
+        }
+    }
+
+    @Override
+    public List<ThirdPartWeComStaff> getActiveStaffList() {
+        ThirdPartWeComStaffExample example = new ThirdPartWeComStaffExample();
+        example.createCriteria().andStatusEqualTo(0);
+        return thirdPartWeComStaffMapper.selectByExample(example);
+    }
+
+    @Override
+    public List<ThirdPartWeComRoom> getStaffRoomList(Long staffId) {
+        ThirdPartWeComRoomExample example = new ThirdPartWeComRoomExample();
+        example.createCriteria().andStaffIdEqualTo(staffId);
+        return thirdPartWeComRoomMapper.selectByExample(example);
+    }
+
+}

+ 2 - 0
api-module/src/main/resources/application-dev.properties

@@ -1,3 +1,5 @@
+server.port=8080
+
 spring.datasource.username=crawler
 spring.datasource.password=crawler123456@
 spring.datasource.url=jdbc:mysql://rm-bp17q95335a99272b.mysql.rds.aliyuncs.com:3306/growth-test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true

+ 30 - 0
api-module/src/main/resources/mapper/contentplatform/ext/ContentPlatformPlanMapperExt.xml

@@ -126,6 +126,36 @@
         limit #{offset}, #{pageSize}
     </select>
 
+    <select id="getVideoMinScoreList" resultType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformVideo">
+        select *
+        from content_platform_video_agg video
+        where video.dt = #{dt} and video.status = 1 and video.score > #{minScore}
+        <if test="excludeVideoIds != null and excludeVideoIds.size() > 0">
+            and video.video_id not in
+            <foreach collection="excludeVideoIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        order by ${sort}
+        limit #{offset}, #{pageSize}
+    </select>
+
+    <select id="getVideoMinDatastatScoreList" resultType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformVideo">
+        select video.*
+        from content_platform_video_agg video
+        left join content_platform_video_datastat_agg datastat
+            on datastat.dt = #{datastatDt} and datastat.type = #{type} and datastat.channel = #{channel} and datastat.video_id = video.video_id
+        where video.dt = #{dt} and video.status = 1 and datastat.fission_rate > #{minScore}
+        <if test="excludeVideoIds != null and excludeVideoIds.size() > 0">
+            and video.video_id not in
+            <foreach collection="excludeVideoIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        order by ${sort}
+        limit #{offset}, #{pageSize}
+    </select>
+
     <select id="getVideoCategoryList" resultType="java.lang.String">
         select distinct category
         from content_platform_video_agg

+ 248 - 0
api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComCorpMapper.xml

@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComCorpMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComCorp">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="corp_id" jdbcType="BIGINT" property="corpId" />
+    <result column="third_corp_id" jdbcType="BIGINT" property="thirdCorpId" />
+    <result column="is_delete" jdbcType="INTEGER" property="isDelete" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, `name`, corp_id, third_corp_id, is_delete, create_time, update_time
+  </sql>
+  <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComCorpExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from third_part_we_com_corp
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from third_part_we_com_corp
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from third_part_we_com_corp
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComCorpExample">
+    delete from third_part_we_com_corp
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComCorp"
+          useGeneratedKeys="true" keyProperty="id">
+    insert into third_part_we_com_corp (id, `name`, corp_id, 
+      third_corp_id, is_delete, create_time, 
+      update_time)
+    values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{corpId,jdbcType=BIGINT}, 
+      #{thirdCorpId,jdbcType=BIGINT}, #{isDelete,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{updateTime,jdbcType=TIMESTAMP})
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComCorp"
+          useGeneratedKeys="true" keyProperty="id">
+    insert into third_part_we_com_corp
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="name != null">
+        `name`,
+      </if>
+      <if test="corpId != null">
+        corp_id,
+      </if>
+      <if test="thirdCorpId != null">
+        third_corp_id,
+      </if>
+      <if test="isDelete != null">
+        is_delete,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="name != null">
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="corpId != null">
+        #{corpId,jdbcType=BIGINT},
+      </if>
+      <if test="thirdCorpId != null">
+        #{thirdCorpId,jdbcType=BIGINT},
+      </if>
+      <if test="isDelete != null">
+        #{isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComCorpExample" resultType="java.lang.Long">
+    select count(*) from third_part_we_com_corp
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update third_part_we_com_corp
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=BIGINT},
+      </if>
+      <if test="record.name != null">
+        `name` = #{record.name,jdbcType=VARCHAR},
+      </if>
+      <if test="record.corpId != null">
+        corp_id = #{record.corpId,jdbcType=BIGINT},
+      </if>
+      <if test="record.thirdCorpId != null">
+        third_corp_id = #{record.thirdCorpId,jdbcType=BIGINT},
+      </if>
+      <if test="record.isDelete != null">
+        is_delete = #{record.isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.updateTime != null">
+        update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update third_part_we_com_corp
+    set id = #{record.id,jdbcType=BIGINT},
+      `name` = #{record.name,jdbcType=VARCHAR},
+      corp_id = #{record.corpId,jdbcType=BIGINT},
+      third_corp_id = #{record.thirdCorpId,jdbcType=BIGINT},
+      is_delete = #{record.isDelete,jdbcType=INTEGER},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComCorp">
+    update third_part_we_com_corp
+    <set>
+      <if test="name != null">
+        `name` = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="corpId != null">
+        corp_id = #{corpId,jdbcType=BIGINT},
+      </if>
+      <if test="thirdCorpId != null">
+        third_corp_id = #{thirdCorpId,jdbcType=BIGINT},
+      </if>
+      <if test="isDelete != null">
+        is_delete = #{isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComCorp">
+    update third_part_we_com_corp
+    set `name` = #{name,jdbcType=VARCHAR},
+      corp_id = #{corpId,jdbcType=BIGINT},
+      third_corp_id = #{thirdCorpId,jdbcType=BIGINT},
+      is_delete = #{isDelete,jdbcType=INTEGER},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>

+ 506 - 0
api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComMsgMapper.xml

@@ -0,0 +1,506 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComMsgMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsg">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="uuid" jdbcType="VARCHAR" property="uuid" />
+    <result column="send_userid" jdbcType="BIGINT" property="sendUserid" />
+    <result column="staff_id" jdbcType="BIGINT" property="staffId" />
+    <result column="video_id" jdbcType="BIGINT" property="videoId" />
+    <result column="appName" jdbcType="VARCHAR" property="appname" />
+    <result column="title" jdbcType="VARCHAR" property="title" />
+    <result column="weappIconUrl" jdbcType="VARCHAR" property="weappiconurl" />
+    <result column="pagepath" jdbcType="VARCHAR" property="pagepath" />
+    <result column="root_source_id" jdbcType="VARCHAR" property="rootSourceId" />
+    <result column="username" jdbcType="VARCHAR" property="username" />
+    <result column="appid" jdbcType="VARCHAR" property="appid" />
+    <result column="cdnkey" jdbcType="VARCHAR" property="cdnkey" />
+    <result column="md5" jdbcType="VARCHAR" property="md5" />
+    <result column="aeskey" jdbcType="VARCHAR" property="aeskey" />
+    <result column="fileSize" jdbcType="INTEGER" property="filesize" />
+    <result column="isRoom" jdbcType="BIT" property="isroom" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+  </resultMap>
+  <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsg">
+    <result column="desc" jdbcType="LONGVARCHAR" property="desc" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, uuid, send_userid, staff_id, video_id, appName, title, weappIconUrl, pagepath, 
+    root_source_id, username, appid, cdnkey, md5, aeskey, fileSize, isRoom, create_time
+  </sql>
+  <sql id="Blob_Column_List">
+    `desc`
+  </sql>
+  <select id="selectByExampleWithBLOBs" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsgExample" resultMap="ResultMapWithBLOBs">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from third_part_we_com_msg
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsgExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from third_part_we_com_msg
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="ResultMapWithBLOBs">
+    select 
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from third_part_we_com_msg
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from third_part_we_com_msg
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsgExample">
+    delete from third_part_we_com_msg
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsg">
+    insert into third_part_we_com_msg (id, uuid, send_userid, 
+      staff_id, video_id, appName, 
+      title, weappIconUrl, pagepath, 
+      root_source_id, username, appid, 
+      cdnkey, md5, aeskey, 
+      fileSize, isRoom, create_time, 
+      `desc`)
+    values (#{id,jdbcType=BIGINT}, #{uuid,jdbcType=VARCHAR}, #{sendUserid,jdbcType=BIGINT}, 
+      #{staffId,jdbcType=BIGINT}, #{videoId,jdbcType=BIGINT}, #{appname,jdbcType=VARCHAR}, 
+      #{title,jdbcType=VARCHAR}, #{weappiconurl,jdbcType=VARCHAR}, #{pagepath,jdbcType=VARCHAR}, 
+      #{rootSourceId,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, #{appid,jdbcType=VARCHAR}, 
+      #{cdnkey,jdbcType=VARCHAR}, #{md5,jdbcType=VARCHAR}, #{aeskey,jdbcType=VARCHAR}, 
+      #{filesize,jdbcType=INTEGER}, #{isroom,jdbcType=BIT}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{desc,jdbcType=LONGVARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsg">
+    insert into third_part_we_com_msg
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="uuid != null">
+        uuid,
+      </if>
+      <if test="sendUserid != null">
+        send_userid,
+      </if>
+      <if test="staffId != null">
+        staff_id,
+      </if>
+      <if test="videoId != null">
+        video_id,
+      </if>
+      <if test="appname != null">
+        appName,
+      </if>
+      <if test="title != null">
+        title,
+      </if>
+      <if test="weappiconurl != null">
+        weappIconUrl,
+      </if>
+      <if test="pagepath != null">
+        pagepath,
+      </if>
+      <if test="rootSourceId != null">
+        root_source_id,
+      </if>
+      <if test="username != null">
+        username,
+      </if>
+      <if test="appid != null">
+        appid,
+      </if>
+      <if test="cdnkey != null">
+        cdnkey,
+      </if>
+      <if test="md5 != null">
+        md5,
+      </if>
+      <if test="aeskey != null">
+        aeskey,
+      </if>
+      <if test="filesize != null">
+        fileSize,
+      </if>
+      <if test="isroom != null">
+        isRoom,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="desc != null">
+        `desc`,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="uuid != null">
+        #{uuid,jdbcType=VARCHAR},
+      </if>
+      <if test="sendUserid != null">
+        #{sendUserid,jdbcType=BIGINT},
+      </if>
+      <if test="staffId != null">
+        #{staffId,jdbcType=BIGINT},
+      </if>
+      <if test="videoId != null">
+        #{videoId,jdbcType=BIGINT},
+      </if>
+      <if test="appname != null">
+        #{appname,jdbcType=VARCHAR},
+      </if>
+      <if test="title != null">
+        #{title,jdbcType=VARCHAR},
+      </if>
+      <if test="weappiconurl != null">
+        #{weappiconurl,jdbcType=VARCHAR},
+      </if>
+      <if test="pagepath != null">
+        #{pagepath,jdbcType=VARCHAR},
+      </if>
+      <if test="rootSourceId != null">
+        #{rootSourceId,jdbcType=VARCHAR},
+      </if>
+      <if test="username != null">
+        #{username,jdbcType=VARCHAR},
+      </if>
+      <if test="appid != null">
+        #{appid,jdbcType=VARCHAR},
+      </if>
+      <if test="cdnkey != null">
+        #{cdnkey,jdbcType=VARCHAR},
+      </if>
+      <if test="md5 != null">
+        #{md5,jdbcType=VARCHAR},
+      </if>
+      <if test="aeskey != null">
+        #{aeskey,jdbcType=VARCHAR},
+      </if>
+      <if test="filesize != null">
+        #{filesize,jdbcType=INTEGER},
+      </if>
+      <if test="isroom != null">
+        #{isroom,jdbcType=BIT},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="desc != null">
+        #{desc,jdbcType=LONGVARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsgExample" resultType="java.lang.Long">
+    select count(*) from third_part_we_com_msg
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update third_part_we_com_msg
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=BIGINT},
+      </if>
+      <if test="record.uuid != null">
+        uuid = #{record.uuid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sendUserid != null">
+        send_userid = #{record.sendUserid,jdbcType=BIGINT},
+      </if>
+      <if test="record.staffId != null">
+        staff_id = #{record.staffId,jdbcType=BIGINT},
+      </if>
+      <if test="record.videoId != null">
+        video_id = #{record.videoId,jdbcType=BIGINT},
+      </if>
+      <if test="record.appname != null">
+        appName = #{record.appname,jdbcType=VARCHAR},
+      </if>
+      <if test="record.title != null">
+        title = #{record.title,jdbcType=VARCHAR},
+      </if>
+      <if test="record.weappiconurl != null">
+        weappIconUrl = #{record.weappiconurl,jdbcType=VARCHAR},
+      </if>
+      <if test="record.pagepath != null">
+        pagepath = #{record.pagepath,jdbcType=VARCHAR},
+      </if>
+      <if test="record.rootSourceId != null">
+        root_source_id = #{record.rootSourceId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.username != null">
+        username = #{record.username,jdbcType=VARCHAR},
+      </if>
+      <if test="record.appid != null">
+        appid = #{record.appid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.cdnkey != null">
+        cdnkey = #{record.cdnkey,jdbcType=VARCHAR},
+      </if>
+      <if test="record.md5 != null">
+        md5 = #{record.md5,jdbcType=VARCHAR},
+      </if>
+      <if test="record.aeskey != null">
+        aeskey = #{record.aeskey,jdbcType=VARCHAR},
+      </if>
+      <if test="record.filesize != null">
+        fileSize = #{record.filesize,jdbcType=INTEGER},
+      </if>
+      <if test="record.isroom != null">
+        isRoom = #{record.isroom,jdbcType=BIT},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.desc != null">
+        `desc` = #{record.desc,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExampleWithBLOBs" parameterType="map">
+    update third_part_we_com_msg
+    set id = #{record.id,jdbcType=BIGINT},
+      uuid = #{record.uuid,jdbcType=VARCHAR},
+      send_userid = #{record.sendUserid,jdbcType=BIGINT},
+      staff_id = #{record.staffId,jdbcType=BIGINT},
+      video_id = #{record.videoId,jdbcType=BIGINT},
+      appName = #{record.appname,jdbcType=VARCHAR},
+      title = #{record.title,jdbcType=VARCHAR},
+      weappIconUrl = #{record.weappiconurl,jdbcType=VARCHAR},
+      pagepath = #{record.pagepath,jdbcType=VARCHAR},
+      root_source_id = #{record.rootSourceId,jdbcType=VARCHAR},
+      username = #{record.username,jdbcType=VARCHAR},
+      appid = #{record.appid,jdbcType=VARCHAR},
+      cdnkey = #{record.cdnkey,jdbcType=VARCHAR},
+      md5 = #{record.md5,jdbcType=VARCHAR},
+      aeskey = #{record.aeskey,jdbcType=VARCHAR},
+      fileSize = #{record.filesize,jdbcType=INTEGER},
+      isRoom = #{record.isroom,jdbcType=BIT},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      `desc` = #{record.desc,jdbcType=LONGVARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update third_part_we_com_msg
+    set id = #{record.id,jdbcType=BIGINT},
+      uuid = #{record.uuid,jdbcType=VARCHAR},
+      send_userid = #{record.sendUserid,jdbcType=BIGINT},
+      staff_id = #{record.staffId,jdbcType=BIGINT},
+      video_id = #{record.videoId,jdbcType=BIGINT},
+      appName = #{record.appname,jdbcType=VARCHAR},
+      title = #{record.title,jdbcType=VARCHAR},
+      weappIconUrl = #{record.weappiconurl,jdbcType=VARCHAR},
+      pagepath = #{record.pagepath,jdbcType=VARCHAR},
+      root_source_id = #{record.rootSourceId,jdbcType=VARCHAR},
+      username = #{record.username,jdbcType=VARCHAR},
+      appid = #{record.appid,jdbcType=VARCHAR},
+      cdnkey = #{record.cdnkey,jdbcType=VARCHAR},
+      md5 = #{record.md5,jdbcType=VARCHAR},
+      aeskey = #{record.aeskey,jdbcType=VARCHAR},
+      fileSize = #{record.filesize,jdbcType=INTEGER},
+      isRoom = #{record.isroom,jdbcType=BIT},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsg">
+    update third_part_we_com_msg
+    <set>
+      <if test="uuid != null">
+        uuid = #{uuid,jdbcType=VARCHAR},
+      </if>
+      <if test="sendUserid != null">
+        send_userid = #{sendUserid,jdbcType=BIGINT},
+      </if>
+      <if test="staffId != null">
+        staff_id = #{staffId,jdbcType=BIGINT},
+      </if>
+      <if test="videoId != null">
+        video_id = #{videoId,jdbcType=BIGINT},
+      </if>
+      <if test="appname != null">
+        appName = #{appname,jdbcType=VARCHAR},
+      </if>
+      <if test="title != null">
+        title = #{title,jdbcType=VARCHAR},
+      </if>
+      <if test="weappiconurl != null">
+        weappIconUrl = #{weappiconurl,jdbcType=VARCHAR},
+      </if>
+      <if test="pagepath != null">
+        pagepath = #{pagepath,jdbcType=VARCHAR},
+      </if>
+      <if test="rootSourceId != null">
+        root_source_id = #{rootSourceId,jdbcType=VARCHAR},
+      </if>
+      <if test="username != null">
+        username = #{username,jdbcType=VARCHAR},
+      </if>
+      <if test="appid != null">
+        appid = #{appid,jdbcType=VARCHAR},
+      </if>
+      <if test="cdnkey != null">
+        cdnkey = #{cdnkey,jdbcType=VARCHAR},
+      </if>
+      <if test="md5 != null">
+        md5 = #{md5,jdbcType=VARCHAR},
+      </if>
+      <if test="aeskey != null">
+        aeskey = #{aeskey,jdbcType=VARCHAR},
+      </if>
+      <if test="filesize != null">
+        fileSize = #{filesize,jdbcType=INTEGER},
+      </if>
+      <if test="isroom != null">
+        isRoom = #{isroom,jdbcType=BIT},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="desc != null">
+        `desc` = #{desc,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsg">
+    update third_part_we_com_msg
+    set uuid = #{uuid,jdbcType=VARCHAR},
+      send_userid = #{sendUserid,jdbcType=BIGINT},
+      staff_id = #{staffId,jdbcType=BIGINT},
+      video_id = #{videoId,jdbcType=BIGINT},
+      appName = #{appname,jdbcType=VARCHAR},
+      title = #{title,jdbcType=VARCHAR},
+      weappIconUrl = #{weappiconurl,jdbcType=VARCHAR},
+      pagepath = #{pagepath,jdbcType=VARCHAR},
+      root_source_id = #{rootSourceId,jdbcType=VARCHAR},
+      username = #{username,jdbcType=VARCHAR},
+      appid = #{appid,jdbcType=VARCHAR},
+      cdnkey = #{cdnkey,jdbcType=VARCHAR},
+      md5 = #{md5,jdbcType=VARCHAR},
+      aeskey = #{aeskey,jdbcType=VARCHAR},
+      fileSize = #{filesize,jdbcType=INTEGER},
+      isRoom = #{isroom,jdbcType=BIT},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      `desc` = #{desc,jdbcType=LONGVARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComMsg">
+    update third_part_we_com_msg
+    set uuid = #{uuid,jdbcType=VARCHAR},
+      send_userid = #{sendUserid,jdbcType=BIGINT},
+      staff_id = #{staffId,jdbcType=BIGINT},
+      video_id = #{videoId,jdbcType=BIGINT},
+      appName = #{appname,jdbcType=VARCHAR},
+      title = #{title,jdbcType=VARCHAR},
+      weappIconUrl = #{weappiconurl,jdbcType=VARCHAR},
+      pagepath = #{pagepath,jdbcType=VARCHAR},
+      root_source_id = #{rootSourceId,jdbcType=VARCHAR},
+      username = #{username,jdbcType=VARCHAR},
+      appid = #{appid,jdbcType=VARCHAR},
+      cdnkey = #{cdnkey,jdbcType=VARCHAR},
+      md5 = #{md5,jdbcType=VARCHAR},
+      aeskey = #{aeskey,jdbcType=VARCHAR},
+      fileSize = #{filesize,jdbcType=INTEGER},
+      isRoom = #{isroom,jdbcType=BIT},
+      create_time = #{createTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>

+ 294 - 0
api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComRoomMapper.xml

@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="corp_id" jdbcType="BIGINT" property="corpId" />
+    <result column="staff_id" jdbcType="BIGINT" property="staffId" />
+    <result column="third_room_id" jdbcType="VARCHAR" property="thirdRoomId" />
+    <result column="third_create_user_id" jdbcType="BIGINT" property="thirdCreateUserId" />
+    <result column="member_count" jdbcType="INTEGER" property="memberCount" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="room_url" jdbcType="VARCHAR" property="roomUrl" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, corp_id, staff_id, third_room_id, third_create_user_id, member_count, `name`, 
+    room_url, create_time, update_time
+  </sql>
+  <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from third_part_we_com_room
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from third_part_we_com_room
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from third_part_we_com_room
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomExample">
+    delete from third_part_we_com_room
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom">
+    insert into third_part_we_com_room (id, corp_id, staff_id, 
+      third_room_id, third_create_user_id, member_count, 
+      `name`, room_url, create_time, 
+      update_time)
+    values (#{id,jdbcType=BIGINT}, #{corpId,jdbcType=BIGINT}, #{staffId,jdbcType=BIGINT}, 
+      #{thirdRoomId,jdbcType=VARCHAR}, #{thirdCreateUserId,jdbcType=BIGINT}, #{memberCount,jdbcType=INTEGER}, 
+      #{name,jdbcType=VARCHAR}, #{roomUrl,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{updateTime,jdbcType=TIMESTAMP})
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom">
+    insert into third_part_we_com_room
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="corpId != null">
+        corp_id,
+      </if>
+      <if test="staffId != null">
+        staff_id,
+      </if>
+      <if test="thirdRoomId != null">
+        third_room_id,
+      </if>
+      <if test="thirdCreateUserId != null">
+        third_create_user_id,
+      </if>
+      <if test="memberCount != null">
+        member_count,
+      </if>
+      <if test="name != null">
+        `name`,
+      </if>
+      <if test="roomUrl != null">
+        room_url,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="corpId != null">
+        #{corpId,jdbcType=BIGINT},
+      </if>
+      <if test="staffId != null">
+        #{staffId,jdbcType=BIGINT},
+      </if>
+      <if test="thirdRoomId != null">
+        #{thirdRoomId,jdbcType=VARCHAR},
+      </if>
+      <if test="thirdCreateUserId != null">
+        #{thirdCreateUserId,jdbcType=BIGINT},
+      </if>
+      <if test="memberCount != null">
+        #{memberCount,jdbcType=INTEGER},
+      </if>
+      <if test="name != null">
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="roomUrl != null">
+        #{roomUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomExample" resultType="java.lang.Long">
+    select count(*) from third_part_we_com_room
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update third_part_we_com_room
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=BIGINT},
+      </if>
+      <if test="record.corpId != null">
+        corp_id = #{record.corpId,jdbcType=BIGINT},
+      </if>
+      <if test="record.staffId != null">
+        staff_id = #{record.staffId,jdbcType=BIGINT},
+      </if>
+      <if test="record.thirdRoomId != null">
+        third_room_id = #{record.thirdRoomId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.thirdCreateUserId != null">
+        third_create_user_id = #{record.thirdCreateUserId,jdbcType=BIGINT},
+      </if>
+      <if test="record.memberCount != null">
+        member_count = #{record.memberCount,jdbcType=INTEGER},
+      </if>
+      <if test="record.name != null">
+        `name` = #{record.name,jdbcType=VARCHAR},
+      </if>
+      <if test="record.roomUrl != null">
+        room_url = #{record.roomUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.updateTime != null">
+        update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update third_part_we_com_room
+    set id = #{record.id,jdbcType=BIGINT},
+      corp_id = #{record.corpId,jdbcType=BIGINT},
+      staff_id = #{record.staffId,jdbcType=BIGINT},
+      third_room_id = #{record.thirdRoomId,jdbcType=VARCHAR},
+      third_create_user_id = #{record.thirdCreateUserId,jdbcType=BIGINT},
+      member_count = #{record.memberCount,jdbcType=INTEGER},
+      `name` = #{record.name,jdbcType=VARCHAR},
+      room_url = #{record.roomUrl,jdbcType=VARCHAR},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom">
+    update third_part_we_com_room
+    <set>
+      <if test="corpId != null">
+        corp_id = #{corpId,jdbcType=BIGINT},
+      </if>
+      <if test="staffId != null">
+        staff_id = #{staffId,jdbcType=BIGINT},
+      </if>
+      <if test="thirdRoomId != null">
+        third_room_id = #{thirdRoomId,jdbcType=VARCHAR},
+      </if>
+      <if test="thirdCreateUserId != null">
+        third_create_user_id = #{thirdCreateUserId,jdbcType=BIGINT},
+      </if>
+      <if test="memberCount != null">
+        member_count = #{memberCount,jdbcType=INTEGER},
+      </if>
+      <if test="name != null">
+        `name` = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="roomUrl != null">
+        room_url = #{roomUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom">
+    update third_part_we_com_room
+    set corp_id = #{corpId,jdbcType=BIGINT},
+      staff_id = #{staffId,jdbcType=BIGINT},
+      third_room_id = #{thirdRoomId,jdbcType=VARCHAR},
+      third_create_user_id = #{thirdCreateUserId,jdbcType=BIGINT},
+      member_count = #{memberCount,jdbcType=INTEGER},
+      `name` = #{name,jdbcType=VARCHAR},
+      room_url = #{roomUrl,jdbcType=VARCHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>

+ 294 - 0
api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComStaffMapper.xml

@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="corp_id" jdbcType="BIGINT" property="corpId" />
+    <result column="mobile" jdbcType="VARCHAR" property="mobile" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="avatar" jdbcType="VARCHAR" property="avatar" />
+    <result column="third_staff_id" jdbcType="BIGINT" property="thirdStaffId" />
+    <result column="third_uuid" jdbcType="VARCHAR" property="thirdUuid" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, corp_id, mobile, `name`, avatar, third_staff_id, third_uuid, `status`, create_time, 
+    update_time
+  </sql>
+  <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from third_part_we_com_staff
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from third_part_we_com_staff
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from third_part_we_com_staff
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffExample">
+    delete from third_part_we_com_staff
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff">
+    insert into third_part_we_com_staff (id, corp_id, mobile, 
+      `name`, avatar, third_staff_id, 
+      third_uuid, `status`, create_time, 
+      update_time)
+    values (#{id,jdbcType=BIGINT}, #{corpId,jdbcType=BIGINT}, #{mobile,jdbcType=VARCHAR}, 
+      #{name,jdbcType=VARCHAR}, #{avatar,jdbcType=VARCHAR}, #{thirdStaffId,jdbcType=BIGINT}, 
+      #{thirdUuid,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{updateTime,jdbcType=TIMESTAMP})
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff">
+    insert into third_part_we_com_staff
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="corpId != null">
+        corp_id,
+      </if>
+      <if test="mobile != null">
+        mobile,
+      </if>
+      <if test="name != null">
+        `name`,
+      </if>
+      <if test="avatar != null">
+        avatar,
+      </if>
+      <if test="thirdStaffId != null">
+        third_staff_id,
+      </if>
+      <if test="thirdUuid != null">
+        third_uuid,
+      </if>
+      <if test="status != null">
+        `status`,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="corpId != null">
+        #{corpId,jdbcType=BIGINT},
+      </if>
+      <if test="mobile != null">
+        #{mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null">
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="avatar != null">
+        #{avatar,jdbcType=VARCHAR},
+      </if>
+      <if test="thirdStaffId != null">
+        #{thirdStaffId,jdbcType=BIGINT},
+      </if>
+      <if test="thirdUuid != null">
+        #{thirdUuid,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null">
+        #{status,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffExample" resultType="java.lang.Long">
+    select count(*) from third_part_we_com_staff
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update third_part_we_com_staff
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=BIGINT},
+      </if>
+      <if test="record.corpId != null">
+        corp_id = #{record.corpId,jdbcType=BIGINT},
+      </if>
+      <if test="record.mobile != null">
+        mobile = #{record.mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="record.name != null">
+        `name` = #{record.name,jdbcType=VARCHAR},
+      </if>
+      <if test="record.avatar != null">
+        avatar = #{record.avatar,jdbcType=VARCHAR},
+      </if>
+      <if test="record.thirdStaffId != null">
+        third_staff_id = #{record.thirdStaffId,jdbcType=BIGINT},
+      </if>
+      <if test="record.thirdUuid != null">
+        third_uuid = #{record.thirdUuid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.status != null">
+        `status` = #{record.status,jdbcType=INTEGER},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.updateTime != null">
+        update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update third_part_we_com_staff
+    set id = #{record.id,jdbcType=BIGINT},
+      corp_id = #{record.corpId,jdbcType=BIGINT},
+      mobile = #{record.mobile,jdbcType=VARCHAR},
+      `name` = #{record.name,jdbcType=VARCHAR},
+      avatar = #{record.avatar,jdbcType=VARCHAR},
+      third_staff_id = #{record.thirdStaffId,jdbcType=BIGINT},
+      third_uuid = #{record.thirdUuid,jdbcType=VARCHAR},
+      `status` = #{record.status,jdbcType=INTEGER},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff">
+    update third_part_we_com_staff
+    <set>
+      <if test="corpId != null">
+        corp_id = #{corpId,jdbcType=BIGINT},
+      </if>
+      <if test="mobile != null">
+        mobile = #{mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null">
+        `name` = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="avatar != null">
+        avatar = #{avatar,jdbcType=VARCHAR},
+      </if>
+      <if test="thirdStaffId != null">
+        third_staff_id = #{thirdStaffId,jdbcType=BIGINT},
+      </if>
+      <if test="thirdUuid != null">
+        third_uuid = #{thirdUuid,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null">
+        `status` = #{status,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff">
+    update third_part_we_com_staff
+    set corp_id = #{corpId,jdbcType=BIGINT},
+      mobile = #{mobile,jdbcType=VARCHAR},
+      `name` = #{name,jdbcType=VARCHAR},
+      avatar = #{avatar,jdbcType=VARCHAR},
+      third_staff_id = #{thirdStaffId,jdbcType=BIGINT},
+      third_uuid = #{thirdUuid,jdbcType=VARCHAR},
+      `status` = #{status,jdbcType=INTEGER},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>

+ 59 - 0
api-module/src/main/resources/mybatis-api-wecomThirdpart-generator-config.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE generatorConfiguration
+        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
+        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+<!-- 配置生成器 -->
+<generatorConfiguration>
+    <context id="mysql" defaultModelType="flat">
+        <property name="autoDelimitKeywords" value="true"/>
+        <!-- 生成的Java文件的编码 -->
+        <property name="javaFileEncoding" value="UTF-8"/>
+        <!-- 格式化java代码 -->
+        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
+        <!-- 格式化XML代码 -->
+        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
+        <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
+        <property name="beginningDelimiter" value="`"/>
+        <property name="endingDelimiter" value="`"/>
+
+        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
+        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
+        <plugin type="com.tzld.piaoquan.api.dao.generator.PaginationPlugin"/>
+
+        <commentGenerator>
+<!--            <property name="addRemarkComments" value="true"/>-->
+            <property name="suppressDate" value="true"/>
+            <property name="suppressAllComments" value="true"/>
+        </commentGenerator>
+
+        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
+                        connectionURL="jdbc:mysql://rm-bp17q95335a99272b.mysql.rds.aliyuncs.com:3306/growth-test?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false"
+                        userId="crawler" password="crawler123456@">
+        </jdbcConnection>
+
+        <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
+            <property name="forceBigDecimals" value="false"/>
+        </javaTypeResolver>
+
+        <javaModelGenerator targetPackage="com.tzld.piaoquan.api.model.po.wecom.thirdpart" targetProject="api-module/src/main/java">
+            <property name="constructorBased" value="false"/>
+            <property name="enableSubPackages" value="true"/>
+            <property name="immutable" value="false"/>
+        </javaModelGenerator>
+
+        <sqlMapGenerator targetPackage="mapper.wecom.thirdpart" targetProject="api-module/src/main/resources">
+            <property name="enableSubPackages" value="true"/>
+        </sqlMapGenerator>
+
+        <javaClientGenerator targetPackage="com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart" type="XMLMAPPER"
+                             targetProject="api-module/src/main/java">
+            <property name="enableSubPackages" value="true"/>
+        </javaClientGenerator>
+
+        <table tableName="third_part_we_com_corp" domainObjectName="ThirdPartWeComCorp" alias=""/>
+        <table tableName="third_part_we_com_room" domainObjectName="ThirdPartWeComRoom" alias=""/>
+        <table tableName="third_part_we_com_staff" domainObjectName="ThirdPartWeComStaff" alias=""/>
+        <table tableName="third_part_we_com_msg" domainObjectName="ThirdPartWeComMsg" alias=""/>
+    </context>
+
+</generatorConfiguration>

+ 1 - 1
api-module/src/test/java/com/tzld/piaoquan/api/ContentPlatformTest.java

@@ -1,7 +1,7 @@
 package com.tzld.piaoquan.api;
 
 import com.aliyun.openservices.shade.com.google.common.collect.Sets;
-import com.tzld.piaoquan.api.job.ContentPlatformDatastatJob;
+import com.tzld.piaoquan.api.job.contentplatform.ContentPlatformDatastatJob;
 import com.tzld.piaoquan.growth.common.model.bo.VideoDetail;
 import com.tzld.piaoquan.growth.common.service.MessageAttachmentService;
 import com.tzld.piaoquan.growth.common.utils.DateUtil;

+ 38 - 0
api-module/src/test/java/com/tzld/piaoquan/api/WeComThirdPartTest.java

@@ -0,0 +1,38 @@
+package com.tzld.piaoquan.api;
+
+import com.tzld.piaoquan.api.job.wecom.thirdpart.WeComAccountJob;
+import com.tzld.piaoquan.api.job.wecom.thirdpart.WeComSendMsgJob;
+import com.tzld.piaoquan.api.job.wecom.thirdpart.WeComUserDetailJob;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest(classes = GrowthServerApplication.class)
+@Slf4j
+public class WeComThirdPartTest {
+
+    @Autowired
+    WeComSendMsgJob weComSendMsgJob;
+    @Autowired
+    WeComAccountJob weComAccountJob;
+    @Autowired
+    WeComUserDetailJob weComUserDetailJob;
+
+
+    @Test
+    public void checkAccountOnline() {
+        weComAccountJob.checkAccountOnline("");
+    }
+
+    @Test
+    public void syncUserDetail() {
+        weComUserDetailJob.syncUserDetail("");
+    }
+
+    @Test
+    public void autoSendAppMsg() {
+        weComSendMsgJob.autoSendAppMsg("");
+    }
+
+}

+ 19 - 0
common-module/src/main/java/com/tzld/piaoquan/growth/common/utils/LarkRobotUtil.java

@@ -24,6 +24,8 @@ public class LarkRobotUtil {
 
     private static final String AUTO_REPLY_VIDEO_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/0d80b7dc-47d1-4c27-a7e1-97f2fb6ba26e";
 
+    private static final String WE_COM_THIRDPART_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/d5a61df6-7a74-4fa1-808f-e388cfa9b16c";
+
     private static final HttpPoolClientUtil HTTP_POOL_CLIENT_UTIL_DEFAULT = HttpClientUtil.create(3000, 10000, 20, 100, 3, 3000);
 
 
@@ -74,6 +76,23 @@ public class LarkRobotUtil {
         }
     }
 
+    public static void sendWeComThirdPartMessage(String msg) {
+        sendWeComThirdPartMessage("text", msg);
+    }
+
+    public static void sendWeComThirdPartMessage(String type, String msg) {
+        try {
+            JSONObject param = new JSONObject();
+            param.put("msg_type", type);
+            JSONObject content = new JSONObject();
+            content.put("text", msg);
+            param.put("content", content);
+            HTTP_POOL_CLIENT_UTIL_DEFAULT.post(WE_COM_THIRDPART_URL, param.toJSONString());
+        } catch (Exception e) {
+            log.error("Lark sendMessage error", e);
+        }
+    }
+
     public static void sendNotPushMessage(String msg) {
         try {
             JSONObject param = new JSONObject();

+ 4 - 4
common-module/src/main/java/com/tzld/piaoquan/growth/common/utils/RedisUtils.java

@@ -27,9 +27,9 @@ public class RedisUtils {
     private RedisTemplate<String, String> redisTemplate;
 
 
-    public boolean contantinsKey(String key) {
+    public boolean containsKey(String key) {
         if (StringUtils.isBlank(key)) {
-            log.error("contantinsKey is empty key:" + key);
+            log.error("containsKey is empty key:" + key);
             return Boolean.FALSE;
         }
         return Boolean.TRUE.equals(redisTemplate.hasKey(key));
@@ -70,7 +70,7 @@ public class RedisUtils {
             expireTime = DEFAULT_EXPIRE_TIME;
         }
         // 只在第一次进行设置过期时间
-        if (!contantinsKey(key)) {
+        if (!containsKey(key)) {
             redisTemplate.opsForValue().increment(key, value);
             redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
         } else {
@@ -93,7 +93,7 @@ public class RedisUtils {
             expireTime = DEFAULT_EXPIRE_TIME;
         }
         // 只在第一次进行设置过期时间
-        if (!contantinsKey(key)) {
+        if (!containsKey(key)) {
             redisTemplate.opsForValue().increment(key, value);
             redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
         } else {