|
@@ -2,7 +2,6 @@ package com.tzld.piaoquan.api.job.wecom.thirdpart;
|
|
|
|
|
|
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.*;
|
|
@@ -11,6 +10,8 @@ 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.growth.common.utils.DateUtil;
|
|
|
+import com.tzld.piaoquan.growth.common.utils.RedisUtils;
|
|
|
import com.xxl.job.core.biz.model.ReturnT;
|
|
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -38,21 +39,19 @@ public class WeComCreateRoomJob {
|
|
|
@Autowired
|
|
|
ThirdPartWeComMapperExt thirdPartWeComMapperExt;
|
|
|
|
|
|
- @Value("${create.room.send.msg.status.nums:20}")
|
|
|
- private Integer sendMsgStatusNums;
|
|
|
+ @Autowired
|
|
|
+ private RedisUtils redisUtils;
|
|
|
|
|
|
- @Value("${create.room.member.max.nums:40}")
|
|
|
+ @Value("${create.room.member.max.nums:39}")
|
|
|
private Integer memberMaxNums;
|
|
|
-
|
|
|
- @Value("${create.room.auto.send.msg:false}")
|
|
|
- private Boolean autoSendMsg;
|
|
|
-
|
|
|
- @Value("${create.room.daily.max.num:50}")
|
|
|
+ @Value("${create.room.daily.max.num:5}")
|
|
|
private Integer dailyMaxNum;
|
|
|
+ @Value("${create.room.daily.max.add.user.times:5}")
|
|
|
+ private Integer dailyMaxAddUserTimes;
|
|
|
|
|
|
private final static ExecutorService pool = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.SECONDS,
|
|
|
new LinkedBlockingQueue<>(1000),
|
|
|
- new ThreadFactoryBuilder().setNameFormat("AutoCreateRoomJob-%d").build(),
|
|
|
+ new ThreadFactoryBuilder().setNameFormat("WeComCreateRoomJob-%d").build(),
|
|
|
new ThreadPoolExecutor.AbortPolicy());
|
|
|
|
|
|
@XxlJob("autoCreateRoom")
|
|
@@ -89,7 +88,7 @@ public class WeComCreateRoomJob {
|
|
|
return;
|
|
|
}
|
|
|
// 已创建群添加群成员
|
|
|
- List<ThirdPartWeComRoom> roomList = weComThirdPartyService.getStaffRoomList(staff.getId());
|
|
|
+ List<ThirdPartWeComRoom> roomList = weComThirdPartyService.getAllStaffRoomList(staff.getId());
|
|
|
List<Integer> roomNums = roomList.stream()
|
|
|
.map(o -> {
|
|
|
try {
|
|
@@ -106,23 +105,6 @@ public class WeComCreateRoomJob {
|
|
|
.sorted(Comparator.comparing(Integer::intValue).reversed())
|
|
|
.collect(Collectors.toList());
|
|
|
Integer maxRoomNum = CollectionUtils.isNotEmpty(roomNums) ? roomNums.get(0) : 0;
|
|
|
- for (ThirdPartWeComRoom room : roomList) {
|
|
|
- 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, room, addUserList);
|
|
|
- }
|
|
|
// 获取当日新创建群 达到上限 不创建
|
|
|
Long roomCount = weComThirdPartyService.getTodayCreateRoomCount(staff.getId());
|
|
|
if (roomCount >= dailyMaxNum) {
|
|
@@ -132,17 +114,22 @@ public class WeComCreateRoomJob {
|
|
|
if (CollectionUtils.isNotEmpty(staffUserList)) {
|
|
|
createNewRoom(staff, staffUserList, maxRoomNum);
|
|
|
}
|
|
|
- userDetailJob.syncRoomList(staff.getThirdUuid(), staff);
|
|
|
+ userDetailJob.syncRoomList(staff);
|
|
|
}
|
|
|
|
|
|
private CommonResponse<String> addRoomUser(ThirdPartWeComStaff staff,
|
|
|
ThirdPartWeComRoom room,
|
|
|
List<Long> vids,
|
|
|
- ThirdPartWeComRoom roomDetail,
|
|
|
List<ThirdPartWeComStaffUser> addUserList) {
|
|
|
if (room.getAddUserStatus() != 1 || room.getMemberCount() >= memberMaxNums) {
|
|
|
return null;
|
|
|
}
|
|
|
+ String dateStr = DateUtil.getCurrentDateStr("yyyyMMdd");
|
|
|
+ String key = "addRoomUserTimes:" + dateStr + ":" + staff.getThirdStaffId() + ":" + room.getThirdRoomId();
|
|
|
+ int addRoomUserTimes = redisUtils.getInteger(key);
|
|
|
+ if (addRoomUserTimes >= dailyMaxAddUserTimes) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
InvitationToRoomRequest request = new InvitationToRoomRequest();
|
|
|
request.setUuid(staff.getThirdUuid());
|
|
|
request.setRoomid(Long.parseLong(room.getThirdRoomId()));
|
|
@@ -150,8 +137,9 @@ public class WeComCreateRoomJob {
|
|
|
CommonResponse<String> commonResponse = weComThirdPartyService.invitationToRoom(request);
|
|
|
if (Objects.nonNull(commonResponse)) {
|
|
|
// 群成员添加存储
|
|
|
- saveRoomUser(roomDetail, addUserList);
|
|
|
+ saveRoomUser(room, addUserList);
|
|
|
}
|
|
|
+ redisUtils.setIncrementValue(key, 1, 24 * 60 * 60L);
|
|
|
return commonResponse;
|
|
|
}
|
|
|
|
|
@@ -195,31 +183,6 @@ public class WeComCreateRoomJob {
|
|
|
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 && autoSendMsg ? 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();
|
|
|
- }
|
|
|
- CommonResponse<String> commonResponse = addRoomUser(staff, roomDetail, vids, roomDetail, addUserList);
|
|
|
- if (Objects.isNull(commonResponse)) {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
//}
|
|
|
}
|
|
|
|
|
@@ -245,7 +208,7 @@ public class WeComCreateRoomJob {
|
|
|
//apiClient.addRoomAdmins();
|
|
|
}
|
|
|
|
|
|
- private void saveRoomUser(ThirdPartWeComRoom roomDetail,
|
|
|
+ private void saveRoomUser(ThirdPartWeComRoom room,
|
|
|
List<ThirdPartWeComStaffUser> addUserList) {
|
|
|
if (CollectionUtils.isEmpty(addUserList)) {
|
|
|
return;
|
|
@@ -253,7 +216,7 @@ public class WeComCreateRoomJob {
|
|
|
List<ThirdPartWeComRoomUser> saveList = new ArrayList<>();
|
|
|
for (ThirdPartWeComStaffUser staffUser : addUserList) {
|
|
|
ThirdPartWeComRoomUser roomUser = new ThirdPartWeComRoomUser();
|
|
|
- roomUser.setThirdRoomId(roomDetail.getThirdRoomId());
|
|
|
+ roomUser.setThirdRoomId(room.getThirdRoomId());
|
|
|
roomUser.setCreateTime(new Date());
|
|
|
roomUser.setUpdateTime(new Date());
|
|
|
roomUser.setUin(staffUser.getUserId());
|
|
@@ -264,4 +227,58 @@ public class WeComCreateRoomJob {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @XxlJob("autoAddRoomUser")
|
|
|
+ public ReturnT<String> autoAddRoomUserJob(String param) {
|
|
|
+ List<ThirdPartWeComStaff> activeStaffList = weComThirdPartyService.getActiveStaffList();
|
|
|
+ CountDownLatch cdl = new CountDownLatch(activeStaffList.size());
|
|
|
+ for (ThirdPartWeComStaff staff : activeStaffList) {
|
|
|
+ if (staff.getAutoCreateRoom() != 1) {
|
|
|
+ cdl.countDown();
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ pool.execute(() -> {
|
|
|
+ try {
|
|
|
+ addStaffRoomUser(staff);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("addStaffRoomUser error", e);
|
|
|
+ } finally {
|
|
|
+ cdl.countDown();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ cdl.await();
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ log.error("autoAddRoomUserJob error", e);
|
|
|
+ }
|
|
|
+ return ReturnT.SUCCESS;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addStaffRoomUser(ThirdPartWeComStaff staff) {
|
|
|
+ // 获取所有未加群客户
|
|
|
+ List<ThirdPartWeComStaffUser> staffUserList = thirdPartWeComMapperExt.getNoGroupStaffUserList(staff.getThirdStaffId());
|
|
|
+ if (CollectionUtils.isEmpty(staffUserList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<ThirdPartWeComRoom> roomList = weComThirdPartyService.getStaffRoomList(staff.getId());
|
|
|
+ for (ThirdPartWeComRoom room : roomList) {
|
|
|
+ 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, addUserList);
|
|
|
+ }
|
|
|
+ userDetailJob.syncRoomList(staff);
|
|
|
+ }
|
|
|
+
|
|
|
}
|