Browse Source

Merge branch '20251119-wyp-weCom' into test

wangyunpeng 4 days ago
parent
commit
924e89e00e
40 changed files with 1013 additions and 234 deletions
  1. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/MessageController.java
  2. 3 6
      api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/TencentWeComController.java
  3. 2 2
      api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/ThirdPartyController.java
  4. 2 2
      api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/WeComController.java
  5. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/WeComUserController.java
  6. 26 0
      api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/thirdpart/WeComThirdPartyCallBackController.java
  7. 2 2
      api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/thirdpart/WeComThirdPartyController.java
  8. 11 0
      api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ext/ThirdPartWeComMapperExt.java
  9. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComAccountJob.java
  10. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComCreateRoomJob.java
  11. 5 2
      api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComSendMsgJob.java
  12. 77 13
      api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComUserDetailJob.java
  13. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetRoomUserListResponse.java
  14. 11 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComRoom.java
  15. 60 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComRoomExample.java
  16. 11 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComRoomUser.java
  17. 60 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComRoomUserExample.java
  18. 11 11
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComStaff.java
  19. 70 70
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComStaffExample.java
  20. 22 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComStaffUser.java
  21. 120 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/wecom/thirdpart/ThirdPartWeComStaffUserExample.java
  22. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/ThirdPartyService.java
  23. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/WeComAutoReply.java
  24. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/WeComService.java
  25. 2 2
      api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/impl/ThirdPartyServiceImpl.java
  26. 3 5
      api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/impl/WeComAutoReplyImpl.java
  27. 2 3
      api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/impl/WeComServiceImpl.java
  28. 13 0
      api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/WeComThirdPartyCallBackService.java
  29. 1 2
      api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/WeComThirdPartyService.java
  30. 34 0
      api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/impl/WeComThirdPartyCallBackServiceImpl.java
  31. 2 3
      api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/impl/WeComThirdPartyServiceImpl.java
  32. 25 7
      api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComRoomMapper.xml
  33. 25 8
      api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComRoomUserMapper.xml
  34. 20 20
      api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComStaffMapper.xml
  35. 52 19
      api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComStaffUserMapper.xml
  36. 319 31
      api-module/src/main/resources/mapper/wecom/thirdpart/ext/ThirdPartWeComMapperExt.xml
  37. 1 1
      api-module/src/test/java/com/tzld/piaoquan/api/WeComThirdPartTest.java
  38. 10 12
      common-module/src/main/java/com/tzld/piaoquan/growth/common/service/Impl/MessageAttachmentServiceImpl.java
  39. 2 2
      common-module/src/main/java/com/tzld/piaoquan/growth/common/service/MessageAttachmentService.java
  40. 1 3
      offline-module/src/main/java/com/tzld/piaoquan/offline/job/WeComMessageDataJob.java

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/controller/MessageController.java → api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/MessageController.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.controller;
+package com.tzld.piaoquan.api.controller.wecom;
 
 
 import com.tzld.piaoquan.growth.common.common.base.CommonResponse;

+ 3 - 6
api-module/src/main/java/com/tzld/piaoquan/api/controller/TencentWeComController.java → api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/TencentWeComController.java

@@ -1,20 +1,17 @@
-package com.tzld.piaoquan.api.controller;
+package com.tzld.piaoquan.api.controller.wecom;
 
 import com.alibaba.fastjson.JSONObject;
-import com.tzld.piaoquan.growth.common.model.vo.SendRequestParam;
-import com.tzld.piaoquan.api.service.WeComAutoReply;
+import com.tzld.piaoquan.api.service.wecom.WeComAutoReply;
 import com.tzld.piaoquan.growth.common.common.constant.WeComServerConstant;
 import com.tzld.piaoquan.growth.common.component.HttpPoolClient;
+import com.tzld.piaoquan.growth.common.model.vo.SendRequestParam;
 import com.tzld.piaoquan.growth.common.service.WeComUserService;
 import com.tzld.piaoquan.growth.common.utils.wecom.WXBizMsgCrypt;
 import com.tzld.piaoquan.growth.common.utils.wecom.WxUtil;
 import lombok.extern.slf4j.Slf4j;
-import lombok.val;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;

+ 2 - 2
api-module/src/main/java/com/tzld/piaoquan/api/controller/ThirdPartyController.java → api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/ThirdPartyController.java

@@ -1,10 +1,10 @@
-package com.tzld.piaoquan.api.controller;
+package com.tzld.piaoquan.api.controller.wecom;
 
 
 import com.tzld.piaoquan.api.model.vo.*;
 import com.tzld.piaoquan.api.mq.MessageCallbackProducer;
 import com.tzld.piaoquan.api.service.GhAccessTokenService;
-import com.tzld.piaoquan.api.service.ThirdPartyService;
+import com.tzld.piaoquan.api.service.wecom.ThirdPartyService;
 import com.tzld.piaoquan.growth.common.common.base.CommonResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;

+ 2 - 2
api-module/src/main/java/com/tzld/piaoquan/api/controller/WeComController.java → api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/WeComController.java

@@ -1,8 +1,8 @@
-package com.tzld.piaoquan.api.controller;
+package com.tzld.piaoquan.api.controller.wecom;
 
 import com.tzld.piaoquan.api.model.vo.WeComPushMessageParam;
 import com.tzld.piaoquan.api.model.vo.WeComPushMessageVo;
-import com.tzld.piaoquan.api.service.WeComService;
+import com.tzld.piaoquan.api.service.wecom.WeComService;
 import com.tzld.piaoquan.growth.common.common.base.CommonResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/controller/WeComUserController.java → api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/WeComUserController.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.controller;
+package com.tzld.piaoquan.api.controller.wecom;
 
 import com.tzld.piaoquan.api.model.vo.WeComUserNameAvatarParam;
 import com.tzld.piaoquan.growth.common.common.base.CommonResponse;

+ 26 - 0
api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/thirdpart/WeComThirdPartyCallBackController.java

@@ -0,0 +1,26 @@
+package com.tzld.piaoquan.api.controller.wecom.thirdpart;
+
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyCallBackService;
+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;
+
+@Slf4j
+@RestController
+@RequestMapping("/wecom/thirdparty")
+public class WeComThirdPartyCallBackController {
+
+    @Autowired
+    private WeComThirdPartyCallBackService service;
+
+    @PostMapping("/callback")
+    public CommonResponse<String> callback(@RequestBody JSONObject param) {
+        service.handleCallback(param);
+        return CommonResponse.success();
+    }
+}

+ 2 - 2
api-module/src/main/java/com/tzld/piaoquan/api/controller/WeComThirdPartyController.java → api-module/src/main/java/com/tzld/piaoquan/api/controller/wecom/thirdpart/WeComThirdPartyController.java

@@ -1,7 +1,7 @@
-package com.tzld.piaoquan.api.controller;
+package com.tzld.piaoquan.api.controller.wecom.thirdpart;
 
 import com.tzld.piaoquan.api.model.param.wecom.thirdpart.*;
-import com.tzld.piaoquan.api.service.WeComThirdPartyService;
+import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyService;
 import com.tzld.piaoquan.growth.common.common.base.CommonResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;

+ 11 - 0
api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ext/ThirdPartWeComMapperExt.java

@@ -1,5 +1,6 @@
 package com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ext;
 
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom;
 import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomUser;
 import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffUser;
 import org.apache.ibatis.annotations.Param;
@@ -10,7 +11,17 @@ public interface ThirdPartWeComMapperExt {
 
     void batchInsertThirdPartWeComRoomUser(@Param("records") List<ThirdPartWeComRoomUser> records);
 
+    void batchUpdateThirdPartWeComRoomUser(@Param("records") List<ThirdPartWeComRoomUser> records);
+
     void batchInsertThirdPartWeComStaffUser(@Param("records") List<ThirdPartWeComStaffUser> saveList);
 
+    void batchUpdateThirdPartWeComStaffUser(@Param("records") List<ThirdPartWeComStaffUser> saveList);
+
     List<ThirdPartWeComStaffUser> getNoGroupStaffUserList(@Param("thirdStaffId") Long thirdStaffId);
+
+    void setRoomUserQuitTime(@Param("thirdRoomId") String thirdRoomId, @Param("deleteList") List<Long> deleteList, @Param("quitTime") Long quitTime);
+
+    void batchInsertThirdPartWeComRoom(@Param("records") List<ThirdPartWeComRoom> partition);
+
+    void batchUpdateThirdPartWeComRoom(@Param("records") List<ThirdPartWeComRoom> partition);
 }

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

@@ -7,7 +7,7 @@ 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.api.service.wecom.thirdparty.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;

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComCreateRoomJob.java

@@ -9,7 +9,7 @@ import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom;
 import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomUser;
 import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff;
 import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffUser;
-import com.tzld.piaoquan.api.service.WeComThirdPartyService;
+import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyService;
 import com.tzld.piaoquan.growth.common.utils.DateUtil;
 import com.tzld.piaoquan.growth.common.utils.RedisUtils;
 import com.xxl.job.core.biz.model.ReturnT;

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

@@ -16,7 +16,7 @@ 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.model.vo.contentplatform.WxVideoV2VO;
-import com.tzld.piaoquan.api.service.WeComThirdPartyService;
+import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyService;
 import com.tzld.piaoquan.api.util.CdnUtil;
 import com.tzld.piaoquan.growth.common.model.po.CgiReplyBucketData;
 import com.tzld.piaoquan.growth.common.model.po.Staff;
@@ -73,6 +73,8 @@ public class WeComSendMsgJob {
     private Map<Long, JSONObject> videoSourceStaffConfig;
     @ApolloJsonValue("${send.room.msg.staff.put.scene.config:{}}")
     private Map<Long, String> staffPutSceneConfig;
+    @ApolloJsonValue("${send.room.msg.staff.channel.config:{}}")
+    private Map<Long, String> staffChannelConfig;
     @ApolloJsonValue("${send.room.msg.auto.open.staff:[]}")
     private List<Long> autoOpenStaffList;
     @Value("${send.room.msg.random.time:20}")
@@ -191,7 +193,8 @@ public class WeComSendMsgJob {
             staff.setCarrierId(String.valueOf(thirdPartWeComStaff.getThirdStaffId()));
             staff.setRemark(thirdPartWeComStaff.getName());
             String putScene = staffPutSceneConfig.getOrDefault(thirdPartWeComStaff.getThirdStaffId(), "touliu");
-            String page = messageAttachmentService.getPageNoCache(putScene, staff, video.getVideoId(), "企微", "社群");
+            String pageChannel = staffChannelConfig.getOrDefault(thirdPartWeComStaff.getThirdStaffId(), "tencentqw");
+            String page = messageAttachmentService.getPageNoCache(putScene, pageChannel, staff, video.getVideoId(), "企微", "社群");
 
             CgiReplyBucketData cgiReplyBucketData = new CgiReplyBucketData();
             cgiReplyBucketData.setMiniVideoId(video.getVideoId());

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

@@ -2,9 +2,9 @@ package com.tzld.piaoquan.api.job.wecom.thirdpart;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
+import com.google.common.collect.Lists;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import com.tzld.piaoquan.api.component.WeComThirdPartyApiClient;
-import com.tzld.piaoquan.api.controller.GetRoomUserListResponse;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomMapper;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomUserMapper;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffMapper;
@@ -12,7 +12,7 @@ import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffUserM
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ext.ThirdPartWeComMapperExt;
 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.api.service.wecom.thirdparty.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;
@@ -57,8 +57,8 @@ public class WeComUserDetailJob {
     @Value("${create.room.auto.send.msg:false}")
     private Boolean autoSendMsg;
 
-    private final static ExecutorService pool = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.SECONDS,
-            new LinkedBlockingQueue<>(1000),
+    private final static ExecutorService pool = new ThreadPoolExecutor(10, 10, 0L, TimeUnit.SECONDS,
+            new LinkedBlockingQueue<>(10000),
             new ThreadFactoryBuilder().setNameFormat("SyncUserDetailJob-%d").build(),
             new ThreadPoolExecutor.AbortPolicy());
 
@@ -76,7 +76,8 @@ public class WeComUserDetailJob {
                     }
                     String response = apiClient.getRunClientByUuid(new UuidRequest(uuid));
                     CommonResponse<LoginInfo> commonResponse =
-                            JSONObject.parseObject(response, new TypeReference<CommonResponse<LoginInfo>>() {});
+                            JSONObject.parseObject(response, new TypeReference<CommonResponse<LoginInfo>>() {
+                            });
                     if (commonResponse.getErrcode() == 0) {
                         LoginInfo loginInfo = commonResponse.getData();
                         staff.setAvatar(loginInfo.getUser_info().getObject().getAvatar());
@@ -113,11 +114,22 @@ public class WeComUserDetailJob {
         Map<Long, ThirdPartWeComStaffUser> existUserMap = existUserList.stream()
                 .collect(Collectors.toMap(ThirdPartWeComStaffUser::getUserId, user -> user));
         List<ThirdPartWeComStaffUser> saveList = new ArrayList<>();
+        List<ThirdPartWeComStaffUser> updateList = new ArrayList<>();
         for (ExternalContactsResponse.ContactItem contactItem : contactItemList) {
             if (existUserIdList.contains(contactItem.getUser_id())) {
+                //0 互相删除 8主动删除拉黑  2049被删除  其他的都是好友
+                List<Integer> deleteStatusList = Arrays.asList(0, 8, 2049);
                 ThirdPartWeComStaffUser existUser = existUserMap.get(contactItem.getUser_id());
                 existUser.setUpdateTime(new Date());
-
+                if (Objects.isNull(existUser.getRemoveCustomerTime()) && deleteStatusList.contains(contactItem.getStatus())) {
+                    if (!deleteStatusList.contains(existUser.getStatus())) {
+                        existUser.setRemoveCustomerTime(System.currentTimeMillis() / 1000);
+                    } else {
+                        // 历史已删除,设为前一天
+                        existUser.setRemoveCustomerTime((System.currentTimeMillis() / 1000) - 86400);
+                    }
+                }
+                existUser.setAddCustomerTime(contactItem.getAdd_customer_time());
                 existUser.setUnionid(contactItem.getUnionid());
                 existUser.setSex(contactItem.getSex());
                 existUser.setMobile(contactItem.getMobile());
@@ -137,7 +149,8 @@ public class WeComUserDetailJob {
                 existUser.setSeq(contactItem.getSeq());
                 existUser.setStatus(contactItem.getStatus());
 
-                staffUserMapper.updateByPrimaryKeySelective(existUser);
+                //staffUserMapper.updateByPrimaryKeySelective(existUser);
+                updateList.add(existUser);
             } else {
                 ThirdPartWeComStaffUser staffUser = new ThirdPartWeComStaffUser();
                 staffUser.setThirdStaffId(thirdStaffId);
@@ -145,6 +158,7 @@ public class WeComUserDetailJob {
                 staffUser.setUpdateTime(new Date());
 
                 // 从ContactItem对象复制所有字段值
+                staffUser.setAddCustomerTime(contactItem.getAdd_customer_time());
                 staffUser.setUnionid(contactItem.getUnionid());
                 staffUser.setSex(contactItem.getSex());
                 staffUser.setMobile(contactItem.getMobile());
@@ -168,7 +182,16 @@ public class WeComUserDetailJob {
             }
         }
         if (CollectionUtils.isNotEmpty(saveList)) {
-            thirdPartWeComMapperExt.batchInsertThirdPartWeComStaffUser(saveList);
+            List<List<ThirdPartWeComStaffUser>> partitionList = Lists.partition(saveList, 500);
+            for (List<ThirdPartWeComStaffUser> partition : partitionList) {
+                thirdPartWeComMapperExt.batchInsertThirdPartWeComStaffUser(partition);
+            }
+        }
+        if (CollectionUtils.isNotEmpty(updateList)) {
+            List<List<ThirdPartWeComStaffUser>> partitionList = Lists.partition(updateList, 200);
+            for (List<ThirdPartWeComStaffUser> partition : partitionList) {
+                thirdPartWeComMapperExt.batchUpdateThirdPartWeComStaffUser(partition);
+            }
         }
     }
 
@@ -206,6 +229,8 @@ public class WeComUserDetailJob {
         List<ThirdPartWeComRoom> roomList = thirdPartyService.getStaffRoomList(staff.getId());
         Map<String, ThirdPartWeComRoom> roomMap = roomList.stream()
                 .collect(Collectors.toMap(ThirdPartWeComRoom::getThirdRoomId, room -> room));
+        List<ThirdPartWeComRoom> saveList = new ArrayList<>();
+        List<ThirdPartWeComRoom> updateList = new ArrayList<>();
         for (GetChatroomMembersResponse.RoomInfo roomInfo : roomInfoList) {
             String roomId = roomInfo.getRoom_id();
             ThirdPartWeComRoom roomDetail = roomMap.get(roomId);
@@ -220,15 +245,18 @@ public class WeComUserDetailJob {
                 roomDetail.setName(roomInfo.getNickname());
                 roomDetail.setAddUserStatus(0);
                 roomDetail.setSendStatus(0);
+                roomDetail.setRoomCreateTime(roomInfo.getCreate_time());
                 roomDetail.setCreateTime(new Date());
                 roomDetail.setUpdateTime(new Date());
-                roomMapper.insertSelective(roomDetail);
+                //roomMapper.insertSelective(roomDetail);
+                saveList.add(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.setRoomCreateTime(roomInfo.getCreate_time());
                 roomDetail.setUpdateTime(new Date());
                 if (staff.getAutoCreateRoom() == 1) {
                     if (roomDetail.getMemberCount() >= memberMaxNums) {
@@ -238,9 +266,24 @@ public class WeComUserDetailJob {
                         roomDetail.setSendStatus(1);
                     }
                 }
-                roomMapper.updateByPrimaryKeySelective(roomDetail);
+                //roomMapper.updateByPrimaryKeySelective(roomDetail);
+                updateList.add(roomDetail);
+            }
+        }
+        if (CollectionUtils.isNotEmpty(saveList)) {
+            List<List<ThirdPartWeComRoom>> partitionList = Lists.partition(saveList, 500);
+            for (List<ThirdPartWeComRoom> partition : partitionList) {
+                thirdPartWeComMapperExt.batchInsertThirdPartWeComRoom(partition);
             }
-            syncRoomUserList(staff.getThirdUuid(), roomDetail.getThirdRoomId());
+        }
+        if (CollectionUtils.isNotEmpty(updateList)) {
+            List<List<ThirdPartWeComRoom>> partitionList = Lists.partition(updateList, 200);
+            for (List<ThirdPartWeComRoom> partition : partitionList) {
+                thirdPartWeComMapperExt.batchUpdateThirdPartWeComRoom(partition);
+            }
+        }
+        for (GetChatroomMembersResponse.RoomInfo roomInfo : roomInfoList) {
+            syncRoomUserList(staff.getThirdUuid(), roomInfo.getRoom_id());
         }
         List<String> roomIds = roomInfoList.stream().map(GetChatroomMembersResponse.RoomInfo::getRoom_id).collect(Collectors.toList());
         roomList.removeIf(room -> roomIds.contains(room.getThirdRoomId()));
@@ -256,12 +299,14 @@ public class WeComUserDetailJob {
     public void syncRoomUserList(String uuid, String thirdRoomId) {
         GetRoomUserListRequest request = new GetRoomUserListRequest(uuid, Long.valueOf(thirdRoomId));
         List<GetRoomUserListResponse.Member> userList = thirdPartyService.getRoomUserList(request);
+        List<Long> currentUniList = userList.stream().map(GetRoomUserListResponse.Member::getUin).collect(Collectors.toList());
         List<ThirdPartWeComRoomUser> existUserList = getThirdPartWeComRoomUserListByRoomId(thirdRoomId);
         List<Long> existUserIdList = existUserList.stream().map(ThirdPartWeComRoomUser::getUin).collect(Collectors.toList());
         Map<Long, ThirdPartWeComRoomUser> existUserMap = existUserList.stream()
                 .collect(Collectors.toMap(ThirdPartWeComRoomUser::getUin, roomUser -> roomUser, (a, b) -> a));
 
         List<ThirdPartWeComRoomUser> saveList = new ArrayList<>();
+        List<ThirdPartWeComRoomUser> updateList = new ArrayList<>();
         for (GetRoomUserListResponse.Member user : userList) {
             if (existUserIdList.contains(user.getUin())) {
                 ThirdPartWeComRoomUser existUser = existUserMap.get(user.getUin());
@@ -284,7 +329,8 @@ public class WeComUserDetailJob {
                 existUser.setInviteUserId(user.getInvite_user_id());
                 existUser.setCorpId(user.getCorp_id());
 
-                roomUserMapper.updateByPrimaryKeySelective(existUser);
+                //roomUserMapper.updateByPrimaryKeySelective(existUser);
+                updateList.add(existUser);
             } else {
                 ThirdPartWeComRoomUser roomUser = new ThirdPartWeComRoomUser();
                 roomUser.setThirdRoomId(thirdRoomId);
@@ -313,7 +359,25 @@ public class WeComUserDetailJob {
             }
         }
         if (CollectionUtils.isNotEmpty(saveList)) {
-            thirdPartWeComMapperExt.batchInsertThirdPartWeComRoomUser(saveList);
+            List<List<ThirdPartWeComRoomUser>> partitionList = Lists.partition(saveList, 500);
+            for (List<ThirdPartWeComRoomUser> partition : partitionList) {
+                thirdPartWeComMapperExt.batchInsertThirdPartWeComRoomUser(partition);
+            }
+        }
+        if (CollectionUtils.isNotEmpty(updateList)) {
+            List<List<ThirdPartWeComRoomUser>> partitionList = Lists.partition(updateList, 200);
+            for (List<ThirdPartWeComRoomUser> partition : partitionList) {
+                thirdPartWeComMapperExt.batchUpdateThirdPartWeComRoomUser(partition);
+            }
+        }
+        // 删除不存在的用户
+        List<Long> deleteList = existUserList.stream()
+                .map(ThirdPartWeComRoomUser::getUin)
+                .filter(uin -> !currentUniList.contains(uin))
+                .collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(deleteList)) {
+            Long quitTime = System.currentTimeMillis() / 1000;
+            thirdPartWeComMapperExt.setRoomUserQuitTime(thirdRoomId, deleteList, quitTime);
         }
     }
 

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/controller/GetRoomUserListResponse.java → api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/GetRoomUserListResponse.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.controller;
+package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
 
 import lombok.Data;
 

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

@@ -19,6 +19,8 @@ public class ThirdPartWeComRoom {
 
     private String roomUrl;
 
+    private Long roomCreateTime;
+
     private Integer addUserStatus;
 
     private Integer sendStatus;
@@ -95,6 +97,14 @@ public class ThirdPartWeComRoom {
         this.roomUrl = roomUrl;
     }
 
+    public Long getRoomCreateTime() {
+        return roomCreateTime;
+    }
+
+    public void setRoomCreateTime(Long roomCreateTime) {
+        this.roomCreateTime = roomCreateTime;
+    }
+
     public Integer getAddUserStatus() {
         return addUserStatus;
     }
@@ -157,6 +167,7 @@ public class ThirdPartWeComRoom {
         sb.append(", memberCount=").append(memberCount);
         sb.append(", name=").append(name);
         sb.append(", roomUrl=").append(roomUrl);
+        sb.append(", roomCreateTime=").append(roomCreateTime);
         sb.append(", addUserStatus=").append(addUserStatus);
         sb.append(", sendStatus=").append(sendStatus);
         sb.append(", sendTime=").append(sendTime);

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

@@ -626,6 +626,66 @@ public class ThirdPartWeComRoomExample {
             return (Criteria) this;
         }
 
+        public Criteria andRoomCreateTimeIsNull() {
+            addCriterion("room_create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeIsNotNull() {
+            addCriterion("room_create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeEqualTo(Long value) {
+            addCriterion("room_create_time =", value, "roomCreateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeNotEqualTo(Long value) {
+            addCriterion("room_create_time <>", value, "roomCreateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeGreaterThan(Long value) {
+            addCriterion("room_create_time >", value, "roomCreateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeGreaterThanOrEqualTo(Long value) {
+            addCriterion("room_create_time >=", value, "roomCreateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeLessThan(Long value) {
+            addCriterion("room_create_time <", value, "roomCreateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeLessThanOrEqualTo(Long value) {
+            addCriterion("room_create_time <=", value, "roomCreateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeIn(List<Long> values) {
+            addCriterion("room_create_time in", values, "roomCreateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeNotIn(List<Long> values) {
+            addCriterion("room_create_time not in", values, "roomCreateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeBetween(Long value1, Long value2) {
+            addCriterion("room_create_time between", value1, value2, "roomCreateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRoomCreateTimeNotBetween(Long value1, Long value2) {
+            addCriterion("room_create_time not between", value1, value2, "roomCreateTime");
+            return (Criteria) this;
+        }
+
         public Criteria andAddUserStatusIsNull() {
             addCriterion("add_user_status is null");
             return (Criteria) this;

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

@@ -27,6 +27,8 @@ public class ThirdPartWeComRoomUser {
 
     private Long joinTime;
 
+    private Long quitTime;
+
     private String nickname;
 
     private String roomNickname;
@@ -139,6 +141,14 @@ public class ThirdPartWeComRoomUser {
         this.joinTime = joinTime;
     }
 
+    public Long getQuitTime() {
+        return quitTime;
+    }
+
+    public void setQuitTime(Long quitTime) {
+        this.quitTime = quitTime;
+    }
+
     public String getNickname() {
         return nickname;
     }
@@ -221,6 +231,7 @@ public class ThirdPartWeComRoomUser {
         sb.append(", realname=").append(realname);
         sb.append(", roomNotes=").append(roomNotes);
         sb.append(", joinTime=").append(joinTime);
+        sb.append(", quitTime=").append(quitTime);
         sb.append(", nickname=").append(nickname);
         sb.append(", roomNickname=").append(roomNickname);
         sb.append(", position=").append(position);

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

@@ -916,6 +916,66 @@ public class ThirdPartWeComRoomUserExample {
             return (Criteria) this;
         }
 
+        public Criteria andQuitTimeIsNull() {
+            addCriterion("quit_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeIsNotNull() {
+            addCriterion("quit_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeEqualTo(Long value) {
+            addCriterion("quit_time =", value, "quitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeNotEqualTo(Long value) {
+            addCriterion("quit_time <>", value, "quitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeGreaterThan(Long value) {
+            addCriterion("quit_time >", value, "quitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeGreaterThanOrEqualTo(Long value) {
+            addCriterion("quit_time >=", value, "quitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeLessThan(Long value) {
+            addCriterion("quit_time <", value, "quitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeLessThanOrEqualTo(Long value) {
+            addCriterion("quit_time <=", value, "quitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeIn(List<Long> values) {
+            addCriterion("quit_time in", values, "quitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeNotIn(List<Long> values) {
+            addCriterion("quit_time not in", values, "quitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeBetween(Long value1, Long value2) {
+            addCriterion("quit_time between", value1, value2, "quitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andQuitTimeNotBetween(Long value1, Long value2) {
+            addCriterion("quit_time not between", value1, value2, "quitTime");
+            return (Criteria) this;
+        }
+
         public Criteria andNicknameIsNull() {
             addCriterion("nickname is null");
             return (Criteria) this;

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

@@ -11,12 +11,12 @@ public class ThirdPartWeComStaff {
 
     private String name;
 
-    private String avatar;
-
     private Long thirdStaffId;
 
     private String thirdUuid;
 
+    private String avatar;
+
     private Integer status;
 
     private Integer autoCreateRoom;
@@ -57,14 +57,6 @@ public class ThirdPartWeComStaff {
         this.name = name;
     }
 
-    public String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
-
     public Long getThirdStaffId() {
         return thirdStaffId;
     }
@@ -81,6 +73,14 @@ public class ThirdPartWeComStaff {
         this.thirdUuid = thirdUuid;
     }
 
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
     public Integer getStatus() {
         return status;
     }
@@ -123,9 +123,9 @@ public class ThirdPartWeComStaff {
         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(", avatar=").append(avatar);
         sb.append(", status=").append(status);
         sb.append(", autoCreateRoom=").append(autoCreateRoom);
         sb.append(", createTime=").append(createTime);

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

@@ -376,76 +376,6 @@ public class ThirdPartWeComStaffExample {
             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;
@@ -576,6 +506,76 @@ public class ThirdPartWeComStaffExample {
             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 andStatusIsNull() {
             addCriterion("`status` is null");
             return (Criteria) this;

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

@@ -7,6 +7,10 @@ public class ThirdPartWeComStaffUser {
 
     private Long thirdStaffId;
 
+    private Long addCustomerTime;
+
+    private Long removeCustomerTime;
+
     private String unionid;
 
     private Integer sex;
@@ -65,6 +69,22 @@ public class ThirdPartWeComStaffUser {
         this.thirdStaffId = thirdStaffId;
     }
 
+    public Long getAddCustomerTime() {
+        return addCustomerTime;
+    }
+
+    public void setAddCustomerTime(Long addCustomerTime) {
+        this.addCustomerTime = addCustomerTime;
+    }
+
+    public Long getRemoveCustomerTime() {
+        return removeCustomerTime;
+    }
+
+    public void setRemoveCustomerTime(Long removeCustomerTime) {
+        this.removeCustomerTime = removeCustomerTime;
+    }
+
     public String getUnionid() {
         return unionid;
     }
@@ -241,6 +261,8 @@ public class ThirdPartWeComStaffUser {
         sb.append("Hash = ").append(hashCode());
         sb.append(", id=").append(id);
         sb.append(", thirdStaffId=").append(thirdStaffId);
+        sb.append(", addCustomerTime=").append(addCustomerTime);
+        sb.append(", removeCustomerTime=").append(removeCustomerTime);
         sb.append(", unionid=").append(unionid);
         sb.append(", sex=").append(sex);
         sb.append(", mobile=").append(mobile);

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

@@ -236,6 +236,126 @@ public class ThirdPartWeComStaffUserExample {
             return (Criteria) this;
         }
 
+        public Criteria andAddCustomerTimeIsNull() {
+            addCriterion("add_customer_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeIsNotNull() {
+            addCriterion("add_customer_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeEqualTo(Long value) {
+            addCriterion("add_customer_time =", value, "addCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeNotEqualTo(Long value) {
+            addCriterion("add_customer_time <>", value, "addCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeGreaterThan(Long value) {
+            addCriterion("add_customer_time >", value, "addCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeGreaterThanOrEqualTo(Long value) {
+            addCriterion("add_customer_time >=", value, "addCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeLessThan(Long value) {
+            addCriterion("add_customer_time <", value, "addCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeLessThanOrEqualTo(Long value) {
+            addCriterion("add_customer_time <=", value, "addCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeIn(List<Long> values) {
+            addCriterion("add_customer_time in", values, "addCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeNotIn(List<Long> values) {
+            addCriterion("add_customer_time not in", values, "addCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeBetween(Long value1, Long value2) {
+            addCriterion("add_customer_time between", value1, value2, "addCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddCustomerTimeNotBetween(Long value1, Long value2) {
+            addCriterion("add_customer_time not between", value1, value2, "addCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeIsNull() {
+            addCriterion("remove_customer_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeIsNotNull() {
+            addCriterion("remove_customer_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeEqualTo(Long value) {
+            addCriterion("remove_customer_time =", value, "removeCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeNotEqualTo(Long value) {
+            addCriterion("remove_customer_time <>", value, "removeCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeGreaterThan(Long value) {
+            addCriterion("remove_customer_time >", value, "removeCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeGreaterThanOrEqualTo(Long value) {
+            addCriterion("remove_customer_time >=", value, "removeCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeLessThan(Long value) {
+            addCriterion("remove_customer_time <", value, "removeCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeLessThanOrEqualTo(Long value) {
+            addCriterion("remove_customer_time <=", value, "removeCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeIn(List<Long> values) {
+            addCriterion("remove_customer_time in", values, "removeCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeNotIn(List<Long> values) {
+            addCriterion("remove_customer_time not in", values, "removeCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeBetween(Long value1, Long value2) {
+            addCriterion("remove_customer_time between", value1, value2, "removeCustomerTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemoveCustomerTimeNotBetween(Long value1, Long value2) {
+            addCriterion("remove_customer_time not between", value1, value2, "removeCustomerTime");
+            return (Criteria) this;
+        }
+
         public Criteria andUnionidIsNull() {
             addCriterion("unionid is null");
             return (Criteria) this;

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/service/ThirdPartyService.java → api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/ThirdPartyService.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.service;
+package com.tzld.piaoquan.api.service.wecom;
 
 
 import com.tzld.piaoquan.api.model.vo.PushMessageParam;

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/service/WeComAutoReply.java → api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/WeComAutoReply.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.service;
+package com.tzld.piaoquan.api.service.wecom;
 
 public interface WeComAutoReply {
 

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/service/WeComService.java → api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/WeComService.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.service;
+package com.tzld.piaoquan.api.service.wecom;
 
 
 

+ 2 - 2
api-module/src/main/java/com/tzld/piaoquan/api/service/impl/ThirdPartyServiceImpl.java → api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/impl/ThirdPartyServiceImpl.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.service.impl;
+package com.tzld.piaoquan.api.service.wecom.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -13,7 +13,7 @@ import com.tzld.piaoquan.api.model.vo.PushMessageParam;
 import com.tzld.piaoquan.api.model.vo.PushMessageVo;
 import com.tzld.piaoquan.api.model.vo.ReportUvVo;
 import com.tzld.piaoquan.api.service.GhAccessTokenService;
-import com.tzld.piaoquan.api.service.ThirdPartyService;
+import com.tzld.piaoquan.api.service.wecom.ThirdPartyService;
 import com.tzld.piaoquan.api.service.strategy.ReplyStrategyService;
 import com.tzld.piaoquan.growth.common.common.base.CommonResponse;
 import com.tzld.piaoquan.growth.common.common.constant.TimeConstant;

+ 3 - 5
api-module/src/main/java/com/tzld/piaoquan/api/service/impl/WeComAutoReplyImpl.java → api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/impl/WeComAutoReplyImpl.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.api.service.impl;
+package com.tzld.piaoquan.api.service.wecom.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -6,8 +6,8 @@ import com.tzld.piaoquan.api.dao.mapper.AutoReplyMsgSendRecordMapper;
 import com.tzld.piaoquan.api.model.bo.MsgData;
 import com.tzld.piaoquan.api.model.po.AutoReplyMsgSendRecord;
 import com.tzld.piaoquan.api.model.vo.WeComPushMessageVo;
-import com.tzld.piaoquan.api.service.WeComAutoReply;
-import com.tzld.piaoquan.api.service.WeComService;
+import com.tzld.piaoquan.api.service.wecom.WeComAutoReply;
+import com.tzld.piaoquan.api.service.wecom.WeComService;
 import com.tzld.piaoquan.growth.common.component.HttpPoolClient;
 import com.tzld.piaoquan.growth.common.dao.mapper.CorpMapper;
 import com.tzld.piaoquan.growth.common.model.bo.MsgResult;
@@ -20,11 +20,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 import java.util.Random;
 
 @Slf4j

+ 2 - 3
api-module/src/main/java/com/tzld/piaoquan/api/service/impl/WeComServiceImpl.java → api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/impl/WeComServiceImpl.java

@@ -1,9 +1,8 @@
-package com.tzld.piaoquan.api.service.impl;
+package com.tzld.piaoquan.api.service.wecom.impl;
 
 import com.alibaba.fastjson.JSON;
 
 import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.piaoquan.api.common.enums.ReplyStrategyServiceEnum;
 import com.tzld.piaoquan.api.dao.mapper.ReplyStaffMapper;
@@ -15,7 +14,7 @@ import com.tzld.piaoquan.api.model.po.ReplyStaff;
 import com.tzld.piaoquan.api.model.po.ReplyStaffExample;
 import com.tzld.piaoquan.api.model.vo.WeComPushMessageParam;
 import com.tzld.piaoquan.api.model.vo.WeComPushMessageVo;
-import com.tzld.piaoquan.api.service.WeComService;
+import com.tzld.piaoquan.api.service.wecom.WeComService;
 import com.tzld.piaoquan.api.service.strategy.ReplyStrategyService;
 import com.tzld.piaoquan.growth.common.common.base.CommonResponse;
 import com.tzld.piaoquan.growth.common.common.enums.ExceptionCodeEnum;

+ 13 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/WeComThirdPartyCallBackService.java

@@ -0,0 +1,13 @@
+package com.tzld.piaoquan.api.service.wecom.thirdparty;
+
+import com.alibaba.fastjson.JSONObject;
+
+public interface WeComThirdPartyCallBackService {
+
+    /**
+     * 处理回调
+     *
+     * @param param
+     */
+    void handleCallback(JSONObject param);
+}

+ 1 - 2
api-module/src/main/java/com/tzld/piaoquan/api/service/WeComThirdPartyService.java → api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/WeComThirdPartyService.java

@@ -1,6 +1,5 @@
-package com.tzld.piaoquan.api.service;
+package com.tzld.piaoquan.api.service.wecom.thirdparty;
 
-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;

+ 34 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/impl/WeComThirdPartyCallBackServiceImpl.java

@@ -0,0 +1,34 @@
+package com.tzld.piaoquan.api.service.wecom.thirdparty.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.piaoquan.api.component.WeComThirdPartyApiClient;
+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.service.wecom.thirdparty.WeComThirdPartyCallBackService;
+import com.tzld.piaoquan.growth.common.utils.RedisUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class WeComThirdPartyCallBackServiceImpl implements WeComThirdPartyCallBackService {
+
+    @Autowired
+    private WeComThirdPartyApiClient apiClient;
+    @Autowired
+    private ThirdPartWeComStaffMapper thirdPartWeComStaffMapper;
+    @Autowired
+    private ThirdPartWeComRoomMapper thirdPartWeComRoomMapper;
+    @Autowired
+    private ThirdPartWeComCorpMapper thirdPartWeComCorpMapper;
+
+    @Autowired
+    private RedisUtils redisUtils;
+
+    @Override
+    public void handleCallback(JSONObject param) {
+        log.info("handleCallback param: {}", param);
+    }
+}

+ 2 - 3
api-module/src/main/java/com/tzld/piaoquan/api/service/impl/WeComThirdPartyServiceImpl.java → api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/impl/WeComThirdPartyServiceImpl.java

@@ -1,17 +1,16 @@
-package com.tzld.piaoquan.api.service.impl;
+package com.tzld.piaoquan.api.service.wecom.thirdparty.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.tzld.piaoquan.api.common.enums.ExceptionEnum;
 import com.tzld.piaoquan.api.common.exception.CommonException;
 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.api.service.wecom.thirdparty.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;

+ 25 - 7
api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComRoomMapper.xml

@@ -10,6 +10,7 @@
     <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="room_create_time" jdbcType="BIGINT" property="roomCreateTime" />
     <result column="add_user_status" jdbcType="INTEGER" property="addUserStatus" />
     <result column="send_status" jdbcType="INTEGER" property="sendStatus" />
     <result column="send_time" jdbcType="VARCHAR" property="sendTime" />
@@ -77,7 +78,8 @@
   </sql>
   <sql id="Base_Column_List">
     id, corp_id, staff_id, third_room_id, third_create_user_id, member_count, `name`, 
-    room_url, add_user_status, send_status, send_time, is_delete, create_time, update_time
+    room_url, room_create_time, add_user_status, send_status, send_time, is_delete, create_time, 
+    update_time
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomExample" resultMap="BaseResultMap">
     select
@@ -116,14 +118,16 @@
           useGeneratedKeys="true" keyProperty="id">
     insert into third_part_we_com_room (id, corp_id, staff_id, 
       third_room_id, third_create_user_id, member_count, 
-      `name`, room_url, add_user_status, 
-      send_status, send_time, is_delete, 
-      create_time, update_time)
+      `name`, room_url, room_create_time, 
+      add_user_status, send_status, send_time, 
+      is_delete, 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}, #{addUserStatus,jdbcType=INTEGER}, 
-      #{sendStatus,jdbcType=INTEGER}, #{sendTime,jdbcType=VARCHAR}, #{isDelete,jdbcType=INTEGER}, 
-      #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
+      #{name,jdbcType=VARCHAR}, #{roomUrl,jdbcType=VARCHAR}, #{roomCreateTime,jdbcType=BIGINT}, 
+      #{addUserStatus,jdbcType=INTEGER}, #{sendStatus,jdbcType=INTEGER}, #{sendTime,jdbcType=VARCHAR}, 
+      #{isDelete,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}
+      )
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom"
           useGeneratedKeys="true" keyProperty="id">
@@ -153,6 +157,9 @@
       <if test="roomUrl != null">
         room_url,
       </if>
+      <if test="roomCreateTime != null">
+        room_create_time,
+      </if>
       <if test="addUserStatus != null">
         add_user_status,
       </if>
@@ -197,6 +204,9 @@
       <if test="roomUrl != null">
         #{roomUrl,jdbcType=VARCHAR},
       </if>
+      <if test="roomCreateTime != null">
+        #{roomCreateTime,jdbcType=BIGINT},
+      </if>
       <if test="addUserStatus != null">
         #{addUserStatus,jdbcType=INTEGER},
       </if>
@@ -250,6 +260,9 @@
       <if test="record.roomUrl != null">
         room_url = #{record.roomUrl,jdbcType=VARCHAR},
       </if>
+      <if test="record.roomCreateTime != null">
+        room_create_time = #{record.roomCreateTime,jdbcType=BIGINT},
+      </if>
       <if test="record.addUserStatus != null">
         add_user_status = #{record.addUserStatus,jdbcType=INTEGER},
       </if>
@@ -283,6 +296,7 @@
       member_count = #{record.memberCount,jdbcType=INTEGER},
       `name` = #{record.name,jdbcType=VARCHAR},
       room_url = #{record.roomUrl,jdbcType=VARCHAR},
+      room_create_time = #{record.roomCreateTime,jdbcType=BIGINT},
       add_user_status = #{record.addUserStatus,jdbcType=INTEGER},
       send_status = #{record.sendStatus,jdbcType=INTEGER},
       send_time = #{record.sendTime,jdbcType=VARCHAR},
@@ -317,6 +331,9 @@
       <if test="roomUrl != null">
         room_url = #{roomUrl,jdbcType=VARCHAR},
       </if>
+      <if test="roomCreateTime != null">
+        room_create_time = #{roomCreateTime,jdbcType=BIGINT},
+      </if>
       <if test="addUserStatus != null">
         add_user_status = #{addUserStatus,jdbcType=INTEGER},
       </if>
@@ -347,6 +364,7 @@
       member_count = #{memberCount,jdbcType=INTEGER},
       `name` = #{name,jdbcType=VARCHAR},
       room_url = #{roomUrl,jdbcType=VARCHAR},
+      room_create_time = #{roomCreateTime,jdbcType=BIGINT},
       add_user_status = #{addUserStatus,jdbcType=INTEGER},
       send_status = #{sendStatus,jdbcType=INTEGER},
       send_time = #{sendTime,jdbcType=VARCHAR},

+ 25 - 8
api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComRoomUserMapper.xml

@@ -14,6 +14,7 @@
     <result column="realname" jdbcType="VARCHAR" property="realname" />
     <result column="room_notes" jdbcType="VARCHAR" property="roomNotes" />
     <result column="join_time" jdbcType="BIGINT" property="joinTime" />
+    <result column="quit_time" jdbcType="BIGINT" property="quitTime" />
     <result column="nickname" jdbcType="VARCHAR" property="nickname" />
     <result column="room_nickname" jdbcType="VARCHAR" property="roomNickname" />
     <result column="position" jdbcType="VARCHAR" property="position" />
@@ -83,8 +84,8 @@
   </sql>
   <sql id="Base_Column_List">
     id, third_room_id, unionid, sex, mobile, acctid, join_scene, avatar, english_name, 
-    realname, room_notes, join_time, nickname, room_nickname, `position`, uin, invite_user_id, 
-    corp_id, create_time, update_time
+    realname, room_notes, join_time, quit_time, nickname, room_nickname, `position`, 
+    uin, invite_user_id, corp_id, create_time, update_time
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomUserExample" resultMap="BaseResultMap">
     select
@@ -124,16 +125,18 @@
       sex, mobile, acctid, 
       join_scene, avatar, english_name, 
       realname, room_notes, join_time, 
-      nickname, room_nickname, `position`, 
-      uin, invite_user_id, corp_id, 
-      create_time, update_time)
+      quit_time, nickname, room_nickname, 
+      `position`, uin, invite_user_id, 
+      corp_id, create_time, update_time
+      )
     values (#{id,jdbcType=BIGINT}, #{thirdRoomId,jdbcType=VARCHAR}, #{unionid,jdbcType=VARCHAR}, 
       #{sex,jdbcType=INTEGER}, #{mobile,jdbcType=VARCHAR}, #{acctid,jdbcType=VARCHAR}, 
       #{joinScene,jdbcType=INTEGER}, #{avatar,jdbcType=VARCHAR}, #{englishName,jdbcType=VARCHAR}, 
       #{realname,jdbcType=VARCHAR}, #{roomNotes,jdbcType=VARCHAR}, #{joinTime,jdbcType=BIGINT}, 
-      #{nickname,jdbcType=VARCHAR}, #{roomNickname,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR}, 
-      #{uin,jdbcType=BIGINT}, #{inviteUserId,jdbcType=BIGINT}, #{corpId,jdbcType=BIGINT}, 
-      #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
+      #{quitTime,jdbcType=BIGINT}, #{nickname,jdbcType=VARCHAR}, #{roomNickname,jdbcType=VARCHAR}, 
+      #{position,jdbcType=VARCHAR}, #{uin,jdbcType=BIGINT}, #{inviteUserId,jdbcType=BIGINT}, 
+      #{corpId,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}
+      )
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomUser">
     insert into third_part_we_com_room_user
@@ -174,6 +177,9 @@
       <if test="joinTime != null">
         join_time,
       </if>
+      <if test="quitTime != null">
+        quit_time,
+      </if>
       <if test="nickname != null">
         nickname,
       </if>
@@ -236,6 +242,9 @@
       <if test="joinTime != null">
         #{joinTime,jdbcType=BIGINT},
       </if>
+      <if test="quitTime != null">
+        #{quitTime,jdbcType=BIGINT},
+      </if>
       <if test="nickname != null">
         #{nickname,jdbcType=VARCHAR},
       </if>
@@ -307,6 +316,9 @@
       <if test="record.joinTime != null">
         join_time = #{record.joinTime,jdbcType=BIGINT},
       </if>
+      <if test="record.quitTime != null">
+        quit_time = #{record.quitTime,jdbcType=BIGINT},
+      </if>
       <if test="record.nickname != null">
         nickname = #{record.nickname,jdbcType=VARCHAR},
       </if>
@@ -350,6 +362,7 @@
       realname = #{record.realname,jdbcType=VARCHAR},
       room_notes = #{record.roomNotes,jdbcType=VARCHAR},
       join_time = #{record.joinTime,jdbcType=BIGINT},
+      quit_time = #{record.quitTime,jdbcType=BIGINT},
       nickname = #{record.nickname,jdbcType=VARCHAR},
       room_nickname = #{record.roomNickname,jdbcType=VARCHAR},
       `position` = #{record.position,jdbcType=VARCHAR},
@@ -398,6 +411,9 @@
       <if test="joinTime != null">
         join_time = #{joinTime,jdbcType=BIGINT},
       </if>
+      <if test="quitTime != null">
+        quit_time = #{quitTime,jdbcType=BIGINT},
+      </if>
       <if test="nickname != null">
         nickname = #{nickname,jdbcType=VARCHAR},
       </if>
@@ -438,6 +454,7 @@
       realname = #{realname,jdbcType=VARCHAR},
       room_notes = #{roomNotes,jdbcType=VARCHAR},
       join_time = #{joinTime,jdbcType=BIGINT},
+      quit_time = #{quitTime,jdbcType=BIGINT},
       nickname = #{nickname,jdbcType=VARCHAR},
       room_nickname = #{roomNickname,jdbcType=VARCHAR},
       `position` = #{position,jdbcType=VARCHAR},

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

@@ -6,9 +6,9 @@
     <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="avatar" jdbcType="VARCHAR" property="avatar" />
     <result column="status" jdbcType="INTEGER" property="status" />
     <result column="auto_create_room" jdbcType="INTEGER" property="autoCreateRoom" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
@@ -73,7 +73,7 @@
     </where>
   </sql>
   <sql id="Base_Column_List">
-    id, corp_id, mobile, `name`, avatar, third_staff_id, third_uuid, `status`, auto_create_room, 
+    id, corp_id, mobile, `name`, third_staff_id, third_uuid, avatar, `status`, auto_create_room, 
     create_time, update_time
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffExample" resultMap="BaseResultMap">
@@ -111,12 +111,12 @@
   </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`, auto_create_room, 
+      `name`, third_staff_id, third_uuid, 
+      avatar, `status`, auto_create_room, 
       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}, #{autoCreateRoom,jdbcType=INTEGER}, 
+      #{name,jdbcType=VARCHAR}, #{thirdStaffId,jdbcType=BIGINT}, #{thirdUuid,jdbcType=VARCHAR}, 
+      #{avatar,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, #{autoCreateRoom,jdbcType=INTEGER}, 
       #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaff">
@@ -134,15 +134,15 @@
       <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="avatar != null">
+        avatar,
+      </if>
       <if test="status != null">
         `status`,
       </if>
@@ -169,15 +169,15 @@
       <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="avatar != null">
+        #{avatar,jdbcType=VARCHAR},
+      </if>
       <if test="status != null">
         #{status,jdbcType=INTEGER},
       </if>
@@ -213,15 +213,15 @@
       <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.avatar != null">
+        avatar = #{record.avatar,jdbcType=VARCHAR},
+      </if>
       <if test="record.status != null">
         `status` = #{record.status,jdbcType=INTEGER},
       </if>
@@ -245,9 +245,9 @@
       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},
+      avatar = #{record.avatar,jdbcType=VARCHAR},
       `status` = #{record.status,jdbcType=INTEGER},
       auto_create_room = #{record.autoCreateRoom,jdbcType=INTEGER},
       create_time = #{record.createTime,jdbcType=TIMESTAMP},
@@ -268,15 +268,15 @@
       <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="avatar != null">
+        avatar = #{avatar,jdbcType=VARCHAR},
+      </if>
       <if test="status != null">
         `status` = #{status,jdbcType=INTEGER},
       </if>
@@ -297,9 +297,9 @@
     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},
+      avatar = #{avatar,jdbcType=VARCHAR},
       `status` = #{status,jdbcType=INTEGER},
       auto_create_room = #{autoCreateRoom,jdbcType=INTEGER},
       create_time = #{createTime,jdbcType=TIMESTAMP},

+ 52 - 19
api-module/src/main/resources/mapper/wecom/thirdpart/ThirdPartWeComStaffUserMapper.xml

@@ -4,6 +4,8 @@
   <resultMap id="BaseResultMap" type="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffUser">
     <id column="id" jdbcType="BIGINT" property="id" />
     <result column="third_staff_id" jdbcType="BIGINT" property="thirdStaffId" />
+    <result column="add_customer_time" jdbcType="BIGINT" property="addCustomerTime" />
+    <result column="remove_customer_time" jdbcType="BIGINT" property="removeCustomerTime" />
     <result column="unionid" jdbcType="VARCHAR" property="unionid" />
     <result column="sex" jdbcType="INTEGER" property="sex" />
     <result column="mobile" jdbcType="VARCHAR" property="mobile" />
@@ -85,9 +87,10 @@
     </where>
   </sql>
   <sql id="Base_Column_List">
-    id, third_staff_id, unionid, sex, mobile, company_remark, acctid, avatar, `source`, 
-    english_name, remark_phone, realname, real_remarks, labelid, user_id, nickname, `position`, 
-    corp_id, remarks, seq, `status`, create_time, update_time
+    id, third_staff_id, add_customer_time, remove_customer_time, unionid, sex, mobile, 
+    company_remark, acctid, avatar, `source`, english_name, remark_phone, realname, real_remarks, 
+    labelid, user_id, nickname, `position`, corp_id, remarks, seq, `status`, create_time, 
+    update_time
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffUserExample" resultMap="BaseResultMap">
     select
@@ -123,22 +126,24 @@
     </if>
   </delete>
   <insert id="insert" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffUser">
-    insert into third_part_we_com_staff_user (id, third_staff_id, unionid, 
-      sex, mobile, company_remark, 
-      acctid, avatar, `source`, 
-      english_name, remark_phone, realname, 
-      real_remarks, labelid, user_id, 
-      nickname, `position`, corp_id, 
-      remarks, seq, `status`, 
-      create_time, update_time)
-    values (#{id,jdbcType=BIGINT}, #{thirdStaffId,jdbcType=BIGINT}, #{unionid,jdbcType=VARCHAR}, 
-      #{sex,jdbcType=INTEGER}, #{mobile,jdbcType=VARCHAR}, #{companyRemark,jdbcType=VARCHAR}, 
-      #{acctid,jdbcType=VARCHAR}, #{avatar,jdbcType=VARCHAR}, #{source,jdbcType=INTEGER}, 
-      #{englishName,jdbcType=VARCHAR}, #{remarkPhone,jdbcType=VARCHAR}, #{realname,jdbcType=VARCHAR}, 
-      #{realRemarks,jdbcType=VARCHAR}, #{labelid,jdbcType=VARCHAR}, #{userId,jdbcType=BIGINT}, 
-      #{nickname,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR}, #{corpId,jdbcType=BIGINT}, 
-      #{remarks,jdbcType=VARCHAR}, #{seq,jdbcType=INTEGER}, #{status,jdbcType=INTEGER}, 
-      #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
+    insert into third_part_we_com_staff_user (id, third_staff_id, add_customer_time, 
+      remove_customer_time, unionid, sex, 
+      mobile, company_remark, acctid, 
+      avatar, `source`, english_name, 
+      remark_phone, realname, real_remarks, 
+      labelid, user_id, nickname, 
+      `position`, corp_id, remarks, 
+      seq, `status`, create_time, 
+      update_time)
+    values (#{id,jdbcType=BIGINT}, #{thirdStaffId,jdbcType=BIGINT}, #{addCustomerTime,jdbcType=BIGINT}, 
+      #{removeCustomerTime,jdbcType=BIGINT}, #{unionid,jdbcType=VARCHAR}, #{sex,jdbcType=INTEGER}, 
+      #{mobile,jdbcType=VARCHAR}, #{companyRemark,jdbcType=VARCHAR}, #{acctid,jdbcType=VARCHAR}, 
+      #{avatar,jdbcType=VARCHAR}, #{source,jdbcType=INTEGER}, #{englishName,jdbcType=VARCHAR}, 
+      #{remarkPhone,jdbcType=VARCHAR}, #{realname,jdbcType=VARCHAR}, #{realRemarks,jdbcType=VARCHAR}, 
+      #{labelid,jdbcType=VARCHAR}, #{userId,jdbcType=BIGINT}, #{nickname,jdbcType=VARCHAR}, 
+      #{position,jdbcType=VARCHAR}, #{corpId,jdbcType=BIGINT}, #{remarks,jdbcType=VARCHAR}, 
+      #{seq,jdbcType=INTEGER}, #{status,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{updateTime,jdbcType=TIMESTAMP})
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffUser">
     insert into third_part_we_com_staff_user
@@ -149,6 +154,12 @@
       <if test="thirdStaffId != null">
         third_staff_id,
       </if>
+      <if test="addCustomerTime != null">
+        add_customer_time,
+      </if>
+      <if test="removeCustomerTime != null">
+        remove_customer_time,
+      </if>
       <if test="unionid != null">
         unionid,
       </if>
@@ -220,6 +231,12 @@
       <if test="thirdStaffId != null">
         #{thirdStaffId,jdbcType=BIGINT},
       </if>
+      <if test="addCustomerTime != null">
+        #{addCustomerTime,jdbcType=BIGINT},
+      </if>
+      <if test="removeCustomerTime != null">
+        #{removeCustomerTime,jdbcType=BIGINT},
+      </if>
       <if test="unionid != null">
         #{unionid,jdbcType=VARCHAR},
       </if>
@@ -300,6 +317,12 @@
       <if test="record.thirdStaffId != null">
         third_staff_id = #{record.thirdStaffId,jdbcType=BIGINT},
       </if>
+      <if test="record.addCustomerTime != null">
+        add_customer_time = #{record.addCustomerTime,jdbcType=BIGINT},
+      </if>
+      <if test="record.removeCustomerTime != null">
+        remove_customer_time = #{record.removeCustomerTime,jdbcType=BIGINT},
+      </if>
       <if test="record.unionid != null">
         unionid = #{record.unionid,jdbcType=VARCHAR},
       </if>
@@ -372,6 +395,8 @@
     update third_part_we_com_staff_user
     set id = #{record.id,jdbcType=BIGINT},
       third_staff_id = #{record.thirdStaffId,jdbcType=BIGINT},
+      add_customer_time = #{record.addCustomerTime,jdbcType=BIGINT},
+      remove_customer_time = #{record.removeCustomerTime,jdbcType=BIGINT},
       unionid = #{record.unionid,jdbcType=VARCHAR},
       sex = #{record.sex,jdbcType=INTEGER},
       mobile = #{record.mobile,jdbcType=VARCHAR},
@@ -403,6 +428,12 @@
       <if test="thirdStaffId != null">
         third_staff_id = #{thirdStaffId,jdbcType=BIGINT},
       </if>
+      <if test="addCustomerTime != null">
+        add_customer_time = #{addCustomerTime,jdbcType=BIGINT},
+      </if>
+      <if test="removeCustomerTime != null">
+        remove_customer_time = #{removeCustomerTime,jdbcType=BIGINT},
+      </if>
       <if test="unionid != null">
         unionid = #{unionid,jdbcType=VARCHAR},
       </if>
@@ -472,6 +503,8 @@
   <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffUser">
     update third_part_we_com_staff_user
     set third_staff_id = #{thirdStaffId,jdbcType=BIGINT},
+      add_customer_time = #{addCustomerTime,jdbcType=BIGINT},
+      remove_customer_time = #{removeCustomerTime,jdbcType=BIGINT},
       unionid = #{unionid,jdbcType=VARCHAR},
       sex = #{sex,jdbcType=INTEGER},
       mobile = #{mobile,jdbcType=VARCHAR},

+ 319 - 31
api-module/src/main/resources/mapper/wecom/thirdpart/ext/ThirdPartWeComMapperExt.xml

@@ -2,45 +2,333 @@
 <!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.ext.ThirdPartWeComMapperExt">
 
-  <insert id="batchInsertThirdPartWeComRoomUser">
-    insert into third_part_we_com_room_user (id, third_room_id, unionid, sex, mobile, acctid, join_scene, avatar, 
-       english_name, realname, room_notes, join_time, nickname, room_nickname, `position`, uin, invite_user_id, corp_id,
-       create_time, update_time)
-    values
-    <foreach collection="records" item="item" separator=",">
-      (#{item.id}, #{item.thirdRoomId}, #{item.unionid}, #{item.sex}, #{item.mobile}, #{item.acctid}, #{item.joinScene},
-       #{item.avatar}, #{item.englishName}, #{item.realname}, #{item.roomNotes}, #{item.joinTime}, #{item.nickname},
-       #{item.roomNickname}, #{item.position}, #{item.uin}, #{item.inviteUserId}, #{item.corpId}, #{item.createTime},
-       #{item.updateTime})
-    </foreach>
-  </insert>
-
-  <insert id="batchInsertThirdPartWeComStaffUser">
-    insert into third_part_we_com_staff_user (id, third_staff_id, unionid, sex, mobile, company_remark,
-      acctid, avatar, `source`, english_name, remark_phone, realname, real_remarks, labelid, user_id,
-      nickname, `position`, corp_id, remarks, seq, `status`, create_time, update_time)
-    values
-    <foreach collection="records" item="item" separator=",">
-        (#{item.id}, #{item.thirdStaffId}, #{item.unionid}, #{item.sex}, #{item.mobile}, #{item.companyRemark},
-        #{item.acctid}, #{item.avatar}, #{item.source}, #{item.englishName}, #{item.remarkPhone}, #{item.realname},
-        #{item.realRemarks}, #{item.labelid}, #{item.userId}, #{item.nickname}, #{item.position}, #{item.corpId},
-        #{item.remarks}, #{item.seq}, #{item.status}, #{item.createTime}, #{item.updateTime})
-    </foreach>
-  </insert>
+    <insert id="batchInsertThirdPartWeComRoomUser">
+        insert into third_part_we_com_room_user (id, third_room_id, unionid, sex, mobile, acctid, join_scene, avatar,
+        english_name, realname, room_notes, join_time, quit_time, nickname,
+        room_nickname, `position`, uin, invite_user_id, corp_id, create_time, update_time)
+        values
+        <foreach collection="records" item="item" separator=",">
+            (#{item.id}, #{item.thirdRoomId}, #{item.unionid}, #{item.sex}, #{item.mobile}, #{item.acctid},
+            #{item.joinScene}, #{item.avatar}, #{item.englishName}, #{item.realname}, #{item.roomNotes},
+            #{item.joinTime}, #{item.quitTime}, #{item.nickname}, #{item.roomNickname}, #{item.position},
+            #{item.uin}, #{item.inviteUserId}, #{item.corpId}, #{item.createTime}, #{item.updateTime})
+        </foreach>
+    </insert>
+
+    <update id="batchUpdateThirdPartWeComRoomUser">
+        update third_part_we_com_room_user
+        <trim prefix="set" suffixOverrides=",">
+            <trim prefix="sex = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.sex}
+                </foreach>
+            </trim>
+            <trim prefix="mobile = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.mobile}
+                </foreach>
+            </trim>
+            <trim prefix="acctid = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.acctid}
+                </foreach>
+            </trim>
+            <trim prefix="avatar = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.avatar}
+                </foreach>
+            </trim>
+            <trim prefix="english_name = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.englishName}
+                </foreach>
+            </trim>
+            <trim prefix="realname = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.realname}
+                </foreach>
+            </trim>
+            <trim prefix="room_notes = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.roomNotes}
+                </foreach>
+            </trim>
+            <trim prefix="quit_time = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.quitTime}
+                </foreach>
+            </trim>
+            <trim prefix="nickname = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.nickname}
+                </foreach>
+            </trim>
+            <trim prefix="room_nickname = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.roomNickname}
+                </foreach>
+            </trim>
+            <trim prefix="position = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.position}
+                </foreach>
+            </trim>
+            <trim prefix="update_time = case" suffix="end">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.updateTime}
+                </foreach>
+            </trim>
+        </trim>
+        where id in
+        <foreach collection="records" item="item" open="(" close=")" separator=",">
+            #{item.id}
+        </foreach>
+    </update>
+
+    <insert id="batchInsertThirdPartWeComStaffUser">
+        insert into third_part_we_com_staff_user (id, third_staff_id, add_customer_time, remove_customer_time, unionid,
+        sex, mobile, company_remark, acctid, avatar, `source`, english_name,
+        remark_phone, realname, real_remarks, labelid, user_id, nickname,
+        `position`, corp_id, remarks, seq, `status`, create_time, update_time)
+        values
+        <foreach collection="records" item="item" separator=",">
+            (#{item.id}, #{item.thirdStaffId}, #{item.addCustomerTime}, #{item.removeCustomerTime}, #{item.unionid},
+            #{item.sex}, #{item.mobile}, #{item.companyRemark}, #{item.acctid}, #{item.avatar}, #{item.source},
+            #{item.englishName}, #{item.remarkPhone}, #{item.realname}, #{item.realRemarks}, #{item.labelid},
+            #{item.userId}, #{item.nickname}, #{item.position}, #{item.corpId}, #{item.remarks}, #{item.seq},
+            #{item.status}, #{item.createTime}, #{item.updateTime})
+        </foreach>
+    </insert>
+
+    <update id="batchUpdateThirdPartWeComStaffUser">
+        update third_part_we_com_staff_user
+        <trim prefix="set" suffixOverrides=",">
+            <trim prefix="add_customer_time = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.addCustomerTime}
+                </foreach>
+            </trim>
+            <trim prefix="remove_customer_time = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.removeCustomerTime}
+                </foreach>
+            </trim>
+            <trim prefix="unionid = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.unionid}
+                </foreach>
+            </trim>
+            <trim prefix="sex = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.sex}
+                </foreach>
+            </trim>
+            <trim prefix="mobile = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.mobile}
+                </foreach>
+            </trim>
+            <trim prefix="company_remark = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.companyRemark}
+                </foreach>
+            </trim>
+            <trim prefix="acctid = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.acctid}
+                </foreach>
+            </trim>
+            <trim prefix="avatar = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.avatar}
+                </foreach>
+            </trim>
+            <trim prefix="source = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.source}
+                </foreach>
+            </trim>
+            <trim prefix="english_name = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.englishName}
+                </foreach>
+            </trim>
+            <trim prefix="remark_phone = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.remarkPhone}
+                </foreach>
+            </trim>
+            <trim prefix="realname = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.realname}
+                </foreach>
+            </trim>
+            <trim prefix="real_remarks = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.realRemarks}
+                </foreach>
+            </trim>
+            <trim prefix="labelid = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.labelid}
+                </foreach>
+            </trim>
+            <trim prefix="user_id = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.userId}
+                </foreach>
+            </trim>
+            <trim prefix="nickname = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.nickname}
+                </foreach>
+            </trim>
+            <trim prefix="`position` = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.position}
+                </foreach>
+            </trim>
+            <trim prefix="corp_id = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.corpId}
+                </foreach>
+            </trim>
+            <trim prefix="remarks = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.remarks}
+                </foreach>
+            </trim>
+            <trim prefix="seq = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.seq}
+                </foreach>
+            </trim>
+            <trim prefix="status = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.status}
+                </foreach>
+            </trim>
+            <trim prefix="update_time = case" suffix="end">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.updateTime}
+                </foreach>
+            </trim>
+        </trim>
+        where id in
+        <foreach collection="records" item="item" open="(" close=")" separator=",">
+            #{item.id}
+        </foreach>
+    </update>
 
     <select id="getNoGroupStaffUserList"
             resultType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComStaffUser">
         select staff_user.*
         from third_part_we_com_staff staff
-         join third_part_we_com_staff_user staff_user on staff.third_staff_id = staff_user.third_staff_id
+        join third_part_we_com_staff_user staff_user on staff.third_staff_id = staff_user.third_staff_id
         left join (select distinct room_user.uin
-                   from third_part_we_com_staff staff
-                    join third_part_we_com_room room on staff.id = room.staff_id
-                    join third_part_we_com_room_user room_user
-                         on room.third_room_id = room_user.third_room_id
-                   where staff.third_staff_id = #{thirdStaffId}) room_user on staff_user.user_id = room_user.uin
+            from third_part_we_com_staff staff
+                     join third_part_we_com_room room on staff.id = room.staff_id
+                     join third_part_we_com_room_user room_user
+                      on room.third_room_id = room_user.third_room_id
+            where staff.third_staff_id = #{thirdStaffId}) room_user on staff_user.user_id = room_user.uin
         where staff.third_staff_id = #{thirdStaffId}
           and room_user.uin is null
     </select>
 
+    <update id="setRoomUserQuitTime">
+        update third_part_we_com_room_user
+        set quit_time = #{quitTime}
+        where third_room_id = #{thirdRoomId}
+        and uin in
+        <foreach collection="deleteList" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </update>
+
+    <insert id="batchInsertThirdPartWeComRoom">
+        insert into third_part_we_com_room (id, corp_id, staff_id, third_room_id, third_create_user_id, member_count,
+        `name`, room_url, room_create_time, add_user_status, send_status, send_time, is_delete, create_time, update_time)
+        values
+        <foreach collection="records" item="item" separator=",">
+            (#{item.id}, #{item.corpId}, #{item.staffId}, #{item.thirdRoomId}, #{item.thirdCreateUserId},
+             #{item.memberCount}, #{item.name}, #{item.roomUrl}, #{item.roomCreateTime}, #{item.addUserStatus},
+             #{item.sendStatus}, #{item.sendTime}, #{item.isDelete}, #{item.createTime}, #{item.updateTime})
+        </foreach>
+    </insert>
+
+    <update id="batchUpdateThirdPartWeComRoom">
+        update third_part_we_com_room
+        <trim prefix="set" suffixOverrides=",">
+            <trim prefix="corp_id = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.corpId}
+                </foreach>
+            </trim>
+            <trim prefix="staff_id = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.staffId}
+                </foreach>
+            </trim>
+            <trim prefix="third_room_id = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.thirdRoomId}
+                </foreach>
+            </trim>
+            <trim prefix="third_create_user_id = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.thirdCreateUserId}
+                </foreach>
+            </trim>
+            <trim prefix="member_count = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.memberCount}
+                </foreach>
+            </trim>
+            <trim prefix="`name` = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.name}
+                </foreach>
+            </trim>
+            <trim prefix="room_url = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.roomUrl}
+                </foreach>
+            </trim>
+            <trim prefix="room_create_time = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.roomCreateTime}
+                </foreach>
+            </trim>
+            <trim prefix="add_user_status = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.addUserStatus}
+                </foreach>
+            </trim>
+            <trim prefix="send_status = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.sendStatus}
+                </foreach>
+            </trim>
+            <trim prefix="send_time = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.sendTime}
+                </foreach>
+            </trim>
+            <trim prefix="is_delete = case" suffix="end,">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.isDelete}
+                </foreach>
+            </trim>
+            <trim prefix="update_time = case" suffix="end">
+                <foreach collection="records" item="item">
+                    when id = #{item.id} then #{item.updateTime}
+                </foreach>
+            </trim>
+        </trim>
+        where id in
+        <foreach collection="records" item="item" open="(" close=")" separator=",">
+            #{item.id}
+        </foreach>
+    </update>
+
 </mapper>

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

@@ -9,7 +9,7 @@ import com.tzld.piaoquan.api.job.wecom.thirdpart.WeComUserDetailJob;
 import com.tzld.piaoquan.api.model.param.wecom.thirdpart.UpdateRoomNameRequest;
 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.api.service.wecom.thirdparty.WeComThirdPartyService;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;

+ 10 - 12
common-module/src/main/java/com/tzld/piaoquan/growth/common/service/Impl/MessageAttachmentServiceImpl.java

@@ -389,16 +389,16 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
     }
 
     @Override
-    public String getPage(Staff staff, Long videoId, String typeOne, String typeTwo) {
+    public String getPage(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo) {
         try {
             if (staff == null || staff.getCarrierId() == null) {
                 return "";
             }
-            String page = selectPage(videoId, staff.getCarrierId(), typeOne, typeTwo);
+            String page = selectPage(putScene, channel, videoId, staff.getCarrierId(), typeOne, typeTwo);
             if (StringUtils.isNotEmpty(page)) {
                 return page;
             }
-            return insertPage("touliu", staff.getCarrierId(), videoId, staff.getRemark(), typeOne, typeTwo);
+            return insertPage(putScene, channel, staff.getCarrierId(), videoId, staff.getRemark(), typeOne, typeTwo);
         } catch (IOException e) {
             log.error("MessageAttachmentService getPage error", e);
         }
@@ -406,21 +406,21 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
     }
 
     @Override
-    public String getPageNoCache(String putScene, Staff staff, Long videoId, String typeOne, String typeTwo) {
+    public String getPageNoCache(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo) {
         try {
             if (staff == null || staff.getCarrierId() == null) {
                 return "";
             }
-            return insertPage(putScene, staff.getCarrierId(), videoId, staff.getRemark(), typeOne, typeTwo);
+            return insertPage(putScene, channel, staff.getCarrierId(), videoId, staff.getRemark(), typeOne, typeTwo);
         } catch (IOException e) {
             log.error("MessageAttachmentService getPageNoCache error", e);
         }
         return null;
     }
 
-    private String insertPage(String putScene, String carrierId, Long videoId, String remark, String typeOne, String typeTwo) throws IOException {
+    private String insertPage(String putScene, String channel, String carrierId, Long videoId, String remark, String typeOne, String typeTwo) throws IOException {
         AdPutFlowParam param = new AdPutFlowParam();
-        param.setChannel("tencentqw");
+        param.setChannel(channel);
         param.setPath("pages/category.html");
         param.setPutCarrierId(carrierId);
         param.setPutScene(putScene);
@@ -442,10 +442,10 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
         return data.getString("url");
     }
 
-    public String selectPage(Long videoId, String carrierId, String typeOne, String typeTwo) {
+    public String selectPage(String putScene, String channel, Long videoId, String carrierId, String typeOne, String typeTwo) {
         int totalPage = 1;
         for (int n = 1; n <= totalPage; n++) {
-            String url = getUrl(videoId, n);
+            String url = getUrl(videoId, putScene, channel, n);
             try {
                 String res = httpPoolClient.get(url);
                 JSONObject jsonObject = JSONObject.parseObject(res);
@@ -479,10 +479,8 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
         return null;
     }
 
-    private static String getUrl(Long videoId, int n) {
+    private static String getUrl(Long videoId, String putScene, String channel, int n) {
         String baseUrl = "https://api.piaoquantv.com/ad/put/flow/list/tencent";
-        String putScene = "touliu";
-        String channel = "tencentqw";
         int pageSize = 20;
         return String.format(
                 "%s?videoId=%d&putScene=%s&channel=%s&currentPage=%d&pageSize=%d",

+ 2 - 2
common-module/src/main/java/com/tzld/piaoquan/growth/common/service/MessageAttachmentService.java

@@ -25,9 +25,9 @@ public interface MessageAttachmentService {
 
     String getPicMediaId(String cover, Long corpId, Long miniprogramVideoId);
 
-    String getPage(Staff staff, Long videoId, String typeOne, String typeTwo);
+    String getPage(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo);
 
-    String getPageNoCache(String putScene, Staff staff, Long videoId, String typeOne, String typeTwo);
+    String getPageNoCache(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo);
 
     String getPage(String channel, String carrierId, String scene, String putTypeOne, String putTypeTwo, String putTypeThree, Long videoId);
 

+ 1 - 3
offline-module/src/main/java/com/tzld/piaoquan/offline/job/WeComMessageDataJob.java

@@ -6,8 +6,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.aliyun.odps.data.Record;
 import com.google.common.collect.Lists;
 import com.tzld.piaoquan.growth.common.common.constant.MessageConstant;
-import com.tzld.piaoquan.growth.common.common.enums.ExceptionCodeEnum;
-import com.tzld.piaoquan.growth.common.common.exception.CustomizeException;
 import com.tzld.piaoquan.growth.common.dao.mapper.*;
 import com.tzld.piaoquan.growth.common.model.bo.*;
 import com.tzld.piaoquan.growth.common.model.po.*;
@@ -552,7 +550,7 @@ public class WeComMessageDataJob {
             if (pageMap.containsKey(key)) {
                 page = pageMap.get(key);
             } else {
-                page = messageAttachmentService.getPage(staff, videoId, "企微", "日常推送");
+                page = messageAttachmentService.getPage("touliu", "tencentqw", staff, videoId, "企微", "日常推送");
                 pageMap.put(key, page);
             }
             if (StringUtils.isEmpty(page)) {