|
@@ -1,14 +1,13 @@
|
|
|
package com.tzld.piaoquan.api.job.wecom.thirdpart;
|
|
|
|
|
|
-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.ext.ThirdPartWeComMapperExt;
|
|
|
-import com.tzld.piaoquan.api.model.param.wecom.thirdpart.CreateRoomWxRequest;
|
|
|
-import com.tzld.piaoquan.api.model.param.wecom.thirdpart.CreateRoomWxResponse;
|
|
|
-import com.tzld.piaoquan.api.model.param.wecom.thirdpart.InvitationToRoomRequest;
|
|
|
+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.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;
|
|
@@ -20,10 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.Iterator;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
import java.util.concurrent.LinkedBlockingQueue;
|
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
@@ -75,72 +71,162 @@ public class WeComCreateRoomJob {
|
|
|
return;
|
|
|
}
|
|
|
// 已创建群添加群成员
|
|
|
- List<ThirdPartWeComRoom> roomList = weComThirdPartyService.getStaffRoomList(staff.getThirdStaffId());
|
|
|
+ List<ThirdPartWeComRoom> roomList = weComThirdPartyService.getStaffRoomList(staff.getId());
|
|
|
+ List<Integer> roomNums = roomList.stream()
|
|
|
+ .map(o -> {
|
|
|
+ try {
|
|
|
+ String roomName = o.getName();
|
|
|
+ if (!roomName.contains("票圈快讯")) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return Integer.parseInt(roomName.replace("票圈快讯", ""));
|
|
|
+ } catch (Exception e) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .sorted(Comparator.comparing(Integer::intValue).reversed())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ Integer maxRoomNum = CollectionUtils.isNotEmpty(roomNums) ? roomNums.get(0) : 0;
|
|
|
for (ThirdPartWeComRoom room : roomList) {
|
|
|
- addRoomUser(staff, room, staffUserList);
|
|
|
+ if (room.getAddUserStatus() != 1) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<Long> vids = new ArrayList<>();
|
|
|
+ List<ThirdPartWeComStaffUser> addUserList = new ArrayList<>();
|
|
|
+ Iterator<ThirdPartWeComStaffUser> iterator = staffUserList.iterator();
|
|
|
+ int size = memberMaxNums - room.getMemberCount();
|
|
|
+ while (iterator.hasNext() && size > 0) {
|
|
|
+ ThirdPartWeComStaffUser item = iterator.next();
|
|
|
+ vids.add(item.getUserId());
|
|
|
+ size--;
|
|
|
+ iterator.remove();
|
|
|
+ addUserList.add(item);
|
|
|
+ }
|
|
|
+ addRoomUser(staff, room, vids);
|
|
|
+ // 群成员添加存储
|
|
|
+ saveRoomUser(room, addUserList);
|
|
|
}
|
|
|
// 未加群客户创建新群
|
|
|
if (CollectionUtils.isNotEmpty(staffUserList)) {
|
|
|
- createNewRoom(staff, staffUserList, roomList.size());
|
|
|
+ createNewRoom(staff, staffUserList, maxRoomNum);
|
|
|
}
|
|
|
+ userDetailJob.syncRoomList(staff.getThirdUuid(), staff);
|
|
|
}
|
|
|
|
|
|
private void addRoomUser(ThirdPartWeComStaff staff,
|
|
|
ThirdPartWeComRoom room,
|
|
|
- List<ThirdPartWeComStaffUser> staffUserList) {
|
|
|
+ List<Long> vids) {
|
|
|
if (room.getAddUserStatus() != 1 || room.getMemberCount() >= memberMaxNums) {
|
|
|
return;
|
|
|
}
|
|
|
- List<Long> vids = new ArrayList<>();
|
|
|
- Iterator<ThirdPartWeComStaffUser> iterator = staffUserList.iterator();
|
|
|
- int size = memberMaxNums - room.getMemberCount();
|
|
|
- while (iterator.hasNext() && size > 0) {
|
|
|
- vids.add(iterator.next().getUserId());
|
|
|
- size--;
|
|
|
- iterator.remove();
|
|
|
- }
|
|
|
InvitationToRoomRequest request = new InvitationToRoomRequest();
|
|
|
request.setUuid(staff.getThirdUuid());
|
|
|
request.setRoomid(Long.parseLong(room.getThirdRoomId()));
|
|
|
request.setVids(vids);
|
|
|
apiClient.invitationToRoom(request);
|
|
|
- // 达到最大成员数,关闭添加开关
|
|
|
- if (size == 0) {
|
|
|
- room.setAddUserStatus(0);
|
|
|
- roomMapper.updateByPrimaryKeySelective(room);
|
|
|
- }
|
|
|
- // 达到发送消息最低成员数,开启发送消息开关
|
|
|
- if (room.getMemberCount() + vids.size() >= sendMsgStatusNums) {
|
|
|
- room.setSendStatus(1);
|
|
|
- roomMapper.updateByPrimaryKeySelective(room);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
private void createNewRoom(ThirdPartWeComStaff staff,
|
|
|
List<ThirdPartWeComStaffUser> staffUserList,
|
|
|
Integer roomNum) {
|
|
|
- for (List<ThirdPartWeComStaffUser> partition : Lists.partition(staffUserList, memberMaxNums)) {
|
|
|
- List<Long> vids = partition.stream().map(ThirdPartWeComStaffUser::getUserId).collect(Collectors.toList());
|
|
|
+ Iterator<ThirdPartWeComStaffUser> iterator = staffUserList.iterator();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ List<Long> vids = new ArrayList<>();
|
|
|
+ List<ThirdPartWeComStaffUser> addUserList = new ArrayList<>();
|
|
|
+ int size = staffUserList.size() > memberMaxNums ? memberMaxNums : staffUserList.size();
|
|
|
+ while (iterator.hasNext() && size > 0) {
|
|
|
+ ThirdPartWeComStaffUser item = iterator.next();
|
|
|
+ vids.add(item.getUserId());
|
|
|
+ size--;
|
|
|
+ iterator.remove();
|
|
|
+ addUserList.add(item);
|
|
|
+ }
|
|
|
+ // 群创建
|
|
|
CreateRoomWxRequest request = new CreateRoomWxRequest();
|
|
|
request.setUuid(staff.getThirdUuid());
|
|
|
request.setRoomName("票圈快讯" + (++roomNum));
|
|
|
request.setVids(vids);
|
|
|
CreateRoomWxResponse createRoomWxResponse = weComThirdPartyService.createRoom(request);
|
|
|
-
|
|
|
+ // 群管理设置 防骚扰
|
|
|
+ updateRoomManagement(staff, createRoomWxResponse);
|
|
|
+ // add room save
|
|
|
ThirdPartWeComRoom roomDetail = new ThirdPartWeComRoom();
|
|
|
roomDetail.setCorpId(staff.getCorpId());
|
|
|
roomDetail.setStaffId(staff.getId());
|
|
|
roomDetail.setThirdRoomId(createRoomWxResponse.getRoomid());
|
|
|
roomDetail.setThirdCreateUserId(createRoomWxResponse.getCreateid());
|
|
|
- roomDetail.setMemberCount(vids.size());
|
|
|
roomDetail.setName(createRoomWxResponse.getRoomname());
|
|
|
- roomDetail.setAddUserStatus(vids.size() == memberMaxNums ? 0 : 1);
|
|
|
- roomDetail.setSendStatus(vids.size() > sendMsgStatusNums ? 1 : 0);
|
|
|
roomDetail.setCreateTime(new Date());
|
|
|
roomDetail.setUpdateTime(new Date());
|
|
|
roomMapper.insertSelective(roomDetail);
|
|
|
+ // 群成员添加存储
|
|
|
+ saveRoomUser(roomDetail, addUserList);
|
|
|
+ // 循环添加群成员
|
|
|
+ while (true) {
|
|
|
+ GetRoomUserListRequest roomUserListRequest = new GetRoomUserListRequest(staff.getThirdUuid(),
|
|
|
+ Long.valueOf(createRoomWxResponse.getRoomid()));
|
|
|
+ List<GetRoomUserListResponse.Member> userList = weComThirdPartyService.getRoomUserList(roomUserListRequest);
|
|
|
+ roomDetail.setMemberCount(userList.size());
|
|
|
+ roomDetail.setAddUserStatus(userList.size() == memberMaxNums ? 0 : 1);
|
|
|
+ roomDetail.setSendStatus(userList.size() > sendMsgStatusNums ? 1 : 0);
|
|
|
+ roomMapper.updateByPrimaryKeySelective(roomDetail);
|
|
|
+ if (!iterator.hasNext() || userList.size() == memberMaxNums) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ vids = new ArrayList<>();
|
|
|
+ size = Math.min(staffUserList.size(), memberMaxNums - userList.size());
|
|
|
+ while (iterator.hasNext() && size > 0) {
|
|
|
+ ThirdPartWeComStaffUser item = iterator.next();
|
|
|
+ vids.add(item.getUserId());
|
|
|
+ size--;
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ addRoomUser(staff, roomDetail, vids);
|
|
|
+ // 群成员添加存储
|
|
|
+ saveRoomUser(roomDetail, addUserList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- userDetailJob.syncRoomUserList(staff.getThirdUuid(), createRoomWxResponse.getRoomid());
|
|
|
+ private void updateRoomManagement(ThirdPartWeComStaff staff, CreateRoomWxResponse createRoomWxResponse) {
|
|
|
+ SetRoomManagementRequest setRoomManagementRequest = new SetRoomManagementRequest();
|
|
|
+ setRoomManagementRequest.setUuid(staff.getThirdUuid());
|
|
|
+ setRoomManagementRequest.setRoomid(Long.parseLong(createRoomWxResponse.getRoomid()));
|
|
|
+ setRoomManagementRequest.setNewFlag(69206023);
|
|
|
+ apiClient.setRoomManagement(setRoomManagementRequest);
|
|
|
+ // 查询防骚扰规则 并配置所有规则
|
|
|
+ QueryCRMAntiSpamRuleRequest antiSpamRuleRequest = new QueryCRMAntiSpamRuleRequest();
|
|
|
+ antiSpamRuleRequest.setUuid(staff.getThirdUuid());
|
|
|
+ List<AntiSpamRuleResponse.AntiSpamRule> antiSpamRuleList = weComThirdPartyService.queryCRMAntiSpamRule(antiSpamRuleRequest);
|
|
|
+ if (CollectionUtils.isNotEmpty(antiSpamRuleList)) {
|
|
|
+ // 设置防骚扰规则
|
|
|
+ SetRoomAntiRequest setRoomAntiRequest = new SetRoomAntiRequest();
|
|
|
+ setRoomAntiRequest.setUuid(staff.getThirdUuid());
|
|
|
+ setRoomAntiRequest.setRoomid(Long.parseLong(createRoomWxResponse.getRoomid()));
|
|
|
+ setRoomAntiRequest.setAntiIds(antiSpamRuleList.stream().map(AntiSpamRuleResponse.AntiSpamRule::getId).collect(Collectors.toList()));
|
|
|
+ apiClient.setRoomAnti(setRoomAntiRequest);
|
|
|
+ }
|
|
|
+ // todo 设置管理员
|
|
|
+ //apiClient.addRoomAdmins();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveRoomUser(ThirdPartWeComRoom roomDetail,
|
|
|
+ List<ThirdPartWeComStaffUser> addUserList) {
|
|
|
+ if (CollectionUtils.isEmpty(addUserList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<ThirdPartWeComRoomUser> saveList = new ArrayList<>();
|
|
|
+ for (ThirdPartWeComStaffUser staffUser : addUserList) {
|
|
|
+ ThirdPartWeComRoomUser roomUser = new ThirdPartWeComRoomUser();
|
|
|
+ roomUser.setThirdRoomId(roomDetail.getThirdRoomId());
|
|
|
+ roomUser.setCreateTime(new Date());
|
|
|
+ roomUser.setUpdateTime(new Date());
|
|
|
+ roomUser.setUin(staffUser.getUserId());
|
|
|
+ saveList.add(roomUser);
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(saveList)) {
|
|
|
+ thirdPartWeComMapperExt.batchInsertThirdPartWeComRoomUser(saveList);
|
|
|
}
|
|
|
}
|
|
|
|