|
@@ -79,7 +79,7 @@ public class WeComMessageDataJob {
|
|
|
Map<String, String> pageMap = new HashMap<>();
|
|
|
|
|
|
//初始化操作
|
|
|
- private void init() {
|
|
|
+ private void init(List<Long> staffIds) {
|
|
|
//历史优质视频获取
|
|
|
String sql = String.format("SELECT * FROM loghubods.history_good_video_can_push_user_list where dt = %s;",
|
|
|
DateUtil.getBeforeDayDateString());
|
|
@@ -126,7 +126,12 @@ public class WeComMessageDataJob {
|
|
|
for (VideoParam videoParam : guaranteedParam.getVideoParamList()) {
|
|
|
if (videoParam.getStaffId() == null) {
|
|
|
LarkRobotUtil.sendMessage("保底视频获取异常,StaffId为空" + DateUtil.getThatDayDateString());
|
|
|
- throw new RuntimeException();
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (videoParam.getStaffId() != 0) {
|
|
|
+ if (!CollectionUtils.isEmpty(staffIds) && !staffIds.contains(videoParam.getStaffId())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
}
|
|
|
//默认组视频不做查询
|
|
|
if (videoParam.getStaffId() == 0L) {
|
|
@@ -146,13 +151,12 @@ public class WeComMessageDataJob {
|
|
|
List<MessageAttachment> messageAttachmentList = messageAttachmentMapper.selectByExample(example);
|
|
|
if (CollectionUtils.isEmpty(messageAttachmentList)) {
|
|
|
LarkRobotUtil.sendMessage("保底视频不存在,请查看videoId=" + videoId);
|
|
|
- throw new RuntimeException();
|
|
|
+ continue;
|
|
|
}
|
|
|
MessageAttachment messageAttachment = messageAttachmentList.get(0);
|
|
|
if (messageAttachment.getSendTime() != null
|
|
|
- && DateUtil.dateDifference(new Date(), messageAttachment.getSendTime()) < 180 * MILLISECOND_DAY) {
|
|
|
+ && DateUtil.dateDifference(new Date(), messageAttachment.getSendTime()) < 90 * MILLISECOND_DAY) {
|
|
|
LarkRobotUtil.sendMessage("保底视频半年内已发送,请查看videoId=" + videoId);
|
|
|
- throw new RuntimeException();
|
|
|
}
|
|
|
}
|
|
|
//重新组合视频id
|
|
@@ -197,7 +201,6 @@ public class WeComMessageDataJob {
|
|
|
if (StringUtils.isNotEmpty(param)) {
|
|
|
xxlJobParam = JSONObject.parseObject(param, XxlJobParam.class);
|
|
|
}
|
|
|
- init();
|
|
|
CorpExample corpExample = new CorpExample();
|
|
|
if (xxlJobParam.getCorpId() != null) {
|
|
|
corpExample.createCriteria().andIdEqualTo(xxlJobParam.getCorpId());
|
|
@@ -206,11 +209,15 @@ public class WeComMessageDataJob {
|
|
|
if (CollectionUtils.isEmpty(corps)) {
|
|
|
return ReturnT.SUCCESS;
|
|
|
}
|
|
|
+ List<Long> staffIds = new ArrayList<>();
|
|
|
+ if (xxlJobParam.getStaffId() != null) {
|
|
|
+ staffIds.add(xxlJobParam.getStaffId());
|
|
|
+ }
|
|
|
+ if (!CollectionUtils.isEmpty(xxlJobParam.getStaffIds())) {
|
|
|
+ staffIds.addAll(xxlJobParam.getStaffIds());
|
|
|
+ }
|
|
|
+ init(staffIds);
|
|
|
for (Corp corp : corps) {
|
|
|
- Long staffId = null;
|
|
|
- if (xxlJobParam.getStaffId() != null) {
|
|
|
- staffId = xxlJobParam.getStaffId();
|
|
|
- }
|
|
|
UserExample userExample = new UserExample();
|
|
|
userExample.createCriteria().andExternalUserIdIsNotNull().andCorpIdEqualTo(corp.getId());
|
|
|
if (xxlJobParam.getUserId() != null) {
|
|
@@ -229,7 +236,7 @@ public class WeComMessageDataJob {
|
|
|
//落库逻辑
|
|
|
List<SendMessage> allSeneMessageList = new ArrayList<>();
|
|
|
for (User user : userList) {
|
|
|
- List<SendMessage> sendMessageList = getSendMessage(user, staffId, corp.getId());
|
|
|
+ List<SendMessage> sendMessageList = getSendMessage(user, staffIds, corp.getId());
|
|
|
if (CollectionUtils.isEmpty(sendMessageList)) {
|
|
|
continue;
|
|
|
}
|
|
@@ -241,40 +248,54 @@ public class WeComMessageDataJob {
|
|
|
sendMessageMapper.insertList(allSeneMessageList);
|
|
|
}
|
|
|
}
|
|
|
- //组装好当天要发送的消息后 记录时间 删除保底数据
|
|
|
- saveGuaranteedVideoIdList();
|
|
|
+ //组装好当天要发送的消息后 记录时间
|
|
|
+ saveGuaranteedVideoIdList(staffIds);
|
|
|
return ReturnT.SUCCESS;
|
|
|
}
|
|
|
|
|
|
- private void saveGuaranteedVideoIdList() {
|
|
|
+ private void saveGuaranteedVideoIdList(List<Long> staffIds) {
|
|
|
String key = String.format(GUARANTEED_MINI_PROGRAM_KEY, DateUtil.getThatDayDateString());
|
|
|
GuaranteedParam guaranteedParam = (GuaranteedParam) redisTemplate.opsForValue().get(key);
|
|
|
if (guaranteedParam == null || CollectionUtils.isEmpty(guaranteedParam.getVideoParamList())) {
|
|
|
return;
|
|
|
}
|
|
|
- Set<Long> videoIdSet = new HashSet<>();
|
|
|
- for (VideoParam videoParam : guaranteedParam.getVideoParamList()) {
|
|
|
- if (CollectionUtils.isEmpty(videoParam.getVideoIds())) {
|
|
|
- continue;
|
|
|
+ if (CollectionUtils.isEmpty(staffIds)) {
|
|
|
+ Set<Long> videoIdSet = new HashSet<>();
|
|
|
+ for (VideoParam videoParam : guaranteedParam.getVideoParamList()) {
|
|
|
+ if (CollectionUtils.isEmpty(videoParam.getVideoIds())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ videoIdSet.addAll(videoParam.getVideoIds());
|
|
|
}
|
|
|
- videoIdSet.addAll(videoParam.getVideoIds());
|
|
|
- }
|
|
|
- List<Long> videoIdList = new ArrayList<>(videoIdSet);
|
|
|
- MessageAttachmentExample example = new MessageAttachmentExample();
|
|
|
- example.createCriteria().andMiniprogramVideoIdIn(videoIdList);
|
|
|
- MessageAttachment updateMessageAttachment = new MessageAttachment();
|
|
|
- updateMessageAttachment.setSendTime(new Date());
|
|
|
- messageAttachmentMapper.updateByExampleSelective(updateMessageAttachment, example);
|
|
|
- redisTemplate.delete(key);
|
|
|
+ List<Long> videoIdList = new ArrayList<>(videoIdSet);
|
|
|
+ MessageAttachmentExample example = new MessageAttachmentExample();
|
|
|
+ example.createCriteria().andMiniprogramVideoIdIn(videoIdList).andSendTimeIsNull();
|
|
|
+ MessageAttachment updateMessageAttachment = new MessageAttachment();
|
|
|
+ updateMessageAttachment.setSendTime(new Date());
|
|
|
+ messageAttachmentMapper.updateByExampleSelective(updateMessageAttachment, example);
|
|
|
+ } else {
|
|
|
+ for (VideoParam videoParam : guaranteedParam.getVideoParamList()) {
|
|
|
+ if (!CollectionUtils.isEmpty(staffIds) && staffIds.contains(videoParam.getStaffId())) {
|
|
|
+ if (CollectionUtils.isEmpty(videoParam.getVideoIds())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ MessageAttachmentExample example = new MessageAttachmentExample();
|
|
|
+ example.createCriteria().andMiniprogramVideoIdIn(videoParam.getVideoIds()).andStaffIdEqualTo(videoParam.getStaffId());
|
|
|
+ MessageAttachment updateMessageAttachment = new MessageAttachment();
|
|
|
+ updateMessageAttachment.setSendTime(new Date());
|
|
|
+ messageAttachmentMapper.updateByExampleSelective(updateMessageAttachment, example);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- private List<SendMessage> getSendMessage(User user, Long staffId, Long corpId) {
|
|
|
+ private List<SendMessage> getSendMessage(User user, List<Long> staffIds, Long corpId) {
|
|
|
StaffWithUserExample example = new StaffWithUserExample();
|
|
|
StaffWithUserExample.Criteria criteria = example.createCriteria();
|
|
|
criteria.andUserIdEqualTo(user.getId());
|
|
|
criteria.andIsDeleteEqualTo(0);
|
|
|
- if (staffId != null) {
|
|
|
- criteria.andStaffIdEqualTo(staffId);
|
|
|
+ if (!CollectionUtils.isEmpty(staffIds)) {
|
|
|
+ criteria.andStaffIdIn(staffIds);
|
|
|
}
|
|
|
List<StaffWithUser> staffWithUserList = staffWithUserMapper.selectByExample(example);
|
|
|
if (CollectionUtils.isEmpty(staffWithUserList)) {
|
|
@@ -406,27 +427,51 @@ public class WeComMessageDataJob {
|
|
|
return ReturnT.SUCCESS;
|
|
|
}
|
|
|
for (SendMessage sendMessage : groupList) {
|
|
|
- sendMessage.setIsSend(0);
|
|
|
- sendMessage.setCreateTime(DateUtil.getThatDayDate());
|
|
|
- List<String> sendUserList = sendMessageMapper.selectExternalUserId(sendMessage);
|
|
|
- boolean flag = pushMessage(sendUserList, sendMessage);
|
|
|
- if (flag) {
|
|
|
- SendMessage updateSendMessage = new SendMessage();
|
|
|
- updateSendMessage.setIsSend(1);
|
|
|
- SendMessageExample example = new SendMessageExample();
|
|
|
- example.createCriteria()
|
|
|
- .andVideoId1EqualTo(sendMessage.getVideoId1())
|
|
|
- .andVideoId2EqualTo(sendMessage.getVideoId2())
|
|
|
- .andVideoId3EqualTo(sendMessage.getVideoId3())
|
|
|
- .andStaffIdEqualTo(sendMessage.getStaffId())
|
|
|
- .andCreateTimeGreaterThan(DateUtil.getThatDayDate());
|
|
|
- sendMessageMapper.updateByExampleSelective(updateSendMessage, example);
|
|
|
+ pushAndUpdateMessage(sendMessage);
|
|
|
+ }
|
|
|
+ Map<Long, List<SendMessage>> groupedByStaffId = groupList.stream().collect(Collectors.groupingBy(SendMessage::getStaffId));
|
|
|
+ for (Map.Entry<Long, List<SendMessage>> entry : groupedByStaffId.entrySet()) {
|
|
|
+ SendMessageExample example = new SendMessageExample();
|
|
|
+ example.createCriteria().andStaffIdEqualTo(entry.getKey()).andIsSendEqualTo(0)
|
|
|
+ .andCreateTimeGreaterThan(DateUtil.getThatDayDate());
|
|
|
+ long l = sendMessageMapper.countByExample(example);
|
|
|
+ //增加重试
|
|
|
+ if (l > 0) {
|
|
|
+ List<SendMessage> retryGroupList = sendMessageMapper.getGroupList(DateUtil.getThatDayDate(), 0);
|
|
|
+ retryGroupList = retryGroupList.stream().filter(e -> Objects.equals(e.getStaffId(), entry.getKey()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ for (SendMessage sendMessage : retryGroupList) {
|
|
|
+ pushAndUpdateMessage(sendMessage);
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+ }
|
|
|
+ SendMessageExample example = new SendMessageExample();
|
|
|
+ example.createCriteria().andIsSendEqualTo(0).andCreateTimeGreaterThan(DateUtil.getThatDayDate());
|
|
|
+ long l = sendMessageMapper.countByExample(example);
|
|
|
+ if (l > 0) {
|
|
|
+ LarkRobotUtil.sendMessage("存在发送失败消息,请检查@薛一鸣");
|
|
|
}
|
|
|
return ReturnT.SUCCESS;
|
|
|
}
|
|
|
|
|
|
+ private void pushAndUpdateMessage(SendMessage sendMessage) {
|
|
|
+ sendMessage.setIsSend(0);
|
|
|
+ sendMessage.setCreateTime(DateUtil.getThatDayDate());
|
|
|
+ List<String> sendUserList = sendMessageMapper.selectExternalUserId(sendMessage);
|
|
|
+ boolean flag = pushMessage(sendUserList, sendMessage);
|
|
|
+ if (flag) {
|
|
|
+ SendMessage updateSendMessage = new SendMessage();
|
|
|
+ updateSendMessage.setIsSend(1);
|
|
|
+ SendMessageExample example = new SendMessageExample();
|
|
|
+ example.createCriteria()
|
|
|
+ .andVideoId1EqualTo(sendMessage.getVideoId1())
|
|
|
+ .andVideoId2EqualTo(sendMessage.getVideoId2())
|
|
|
+ .andVideoId3EqualTo(sendMessage.getVideoId3())
|
|
|
+ .andStaffIdEqualTo(sendMessage.getStaffId())
|
|
|
+ .andCreateTimeGreaterThan(DateUtil.getThatDayDate());
|
|
|
+ sendMessageMapper.updateByExampleSelective(updateSendMessage, example);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
private boolean pushMessage(List<String> sendUserList, SendMessage sendMessage) {
|
|
|
List<JSONObject> pushList = new ArrayList<>();
|
|
@@ -453,7 +498,8 @@ public class WeComMessageDataJob {
|
|
|
example.createCriteria().andMiniprogramVideoIdEqualTo(videoId);
|
|
|
List<MessageAttachment> messageAttachmentList = messageAttachmentMapper.selectByExample(example);
|
|
|
if (CollectionUtils.isEmpty(messageAttachmentList)) {
|
|
|
- throw new RuntimeException("附件信息查询异常");
|
|
|
+ log.error("附件信息查询异常");
|
|
|
+ return false;
|
|
|
}
|
|
|
MessageAttachment messageAttachment = messageAttachmentList.get(0);
|
|
|
JSONObject miniprogram = new JSONObject();
|
|
@@ -508,4 +554,17 @@ public class WeComMessageDataJob {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ @XxlJob("existGuaranteesJob")
|
|
|
+ public ReturnT<String> existGuarantees(String param) {
|
|
|
+ //保底视频获取
|
|
|
+ String key = String.format(GUARANTEED_MINI_PROGRAM_KEY, DateUtil.getNextDayDateString());
|
|
|
+ GuaranteedParam guaranteedParam = (GuaranteedParam) redisTemplate.opsForValue().get(key);
|
|
|
+ if (guaranteedParam == null
|
|
|
+ || CollectionUtils.isEmpty(guaranteedParam.getVideoParamList())) {
|
|
|
+ LarkRobotUtil.sendMessage("保底视频异常,请检查" + DateUtil.getNextDayDateString());
|
|
|
+ }
|
|
|
+ return ReturnT.SUCCESS;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|