Browse Source

Merge branch 'dev-xym-addTag' of Server/growth-manager into master

xueyiming 3 months ago
parent
commit
2b9d2528b0

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

@@ -122,7 +122,7 @@ public class WeComUserServiceImpl implements WeComUserService {
                     StaffWithUser staffWithUser = new StaffWithUser();
                     staffWithUser.setStaffId(staffId);
                     staffWithUser.setUserId(userId);
-                    staffWithUserMapper.insert(staffWithUser);
+                    staffWithUserMapper.insertSelective(staffWithUser);
                 }
             } else {
                 WeComUser weComUser = weComUserList.get(0);
@@ -133,7 +133,7 @@ public class WeComUserServiceImpl implements WeComUserService {
                     StaffWithUser staffWithUser = new StaffWithUser();
                     staffWithUser.setStaffId(staff.getId());
                     staffWithUser.setUserId(weComUser.getId());
-                    staffWithUserMapper.insert(staffWithUser);
+                    staffWithUserMapper.insertSelective(staffWithUser);
                 } else {
                     StaffWithUser staffWithUser = staffWithUserList.get(0);
                     if (staffWithUser.getIsDelete() == 1) {
@@ -216,15 +216,20 @@ public class WeComUserServiceImpl implements WeComUserService {
     }
 
 
-    public JSONObject getUserDetail(String externalUserId, Long corpId) throws IOException {
-        String weComAccessToken = weComAccessTokenService.getWeComAccessToken(corpId);
-        String url = String.format(GET_WE_COM_EXTERNAL_CONTACT_GET + "?access_token=%s&external_userid=%s", weComAccessToken, externalUserId);
-        String res = httpPoolClient.get(url);
-        JSONObject jsonObject = JSONObject.parseObject(res);
-        Integer errcode = jsonObject.getInteger("errcode");
-        if (errcode == 0) {
-            return jsonObject;
+    public JSONObject getUserDetail(String externalUserId, Long corpId) {
+        try {
+            String weComAccessToken = weComAccessTokenService.getWeComAccessToken(corpId);
+            String url = String.format(GET_WE_COM_EXTERNAL_CONTACT_GET + "?access_token=%s&external_userid=%s", weComAccessToken, externalUserId);
+            String res = httpPoolClient.get(url);
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            Integer errcode = jsonObject.getInteger("errcode");
+            if (errcode == 0) {
+                return jsonObject;
+            }
+        } catch (Exception e) {
+            log.error("getUserDetail error", e);
         }
+
         return null;
     }
 

+ 3 - 0
common-module/src/main/java/com/tzld/piaoquan/growth/common/service/WeComUserService.java

@@ -1,5 +1,6 @@
 package com.tzld.piaoquan.growth.common.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.tzld.piaoquan.growth.common.model.bo.GroupSendWeComUserParam;
 import com.tzld.piaoquan.growth.common.model.po.Staff;
 import com.tzld.piaoquan.growth.common.model.po.WeComUser;
@@ -22,5 +23,7 @@ public interface WeComUserService {
 
     List<WeComUserVo> getWeComUserByNameAvatar(String name, String avatar);
 
+    JSONObject getUserDetail(String externalUserId, Long corpId);
+
     Page<WeComUserVo> getGroupSendWeComUser(GroupSendWeComUserParam param);
 }

+ 88 - 0
offline-module/src/main/java/com/tzld/piaoquan/offline/job/WeComHistoryDataJob.java

@@ -25,11 +25,13 @@ import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import static com.tzld.piaoquan.growth.common.common.constant.MessageConstant.MAX_VIDEO_NUM;
@@ -80,6 +82,92 @@ public class WeComHistoryDataJob {
     @Autowired
     private AttachmentWithMsgResultMapper attachmentWithMsgResultMapper;
 
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+
+    private static final String START_TIME_KEY = "start_time_key";
+
+    @XxlJob("saveHistoryMessageJob1")
+    public ReturnT<String> saveHistoryMessageJob1(String param) {
+        Long startTime = (Long) redisTemplate.opsForValue().get(START_TIME_KEY);
+        if (startTime == null) {
+            startTime = DateUtil.getBeforeDayStart(0);
+        }
+        Long endTime = System.currentTimeMillis() / 1000;
+        CorpExample example = new CorpExample();
+        List<Corp> corps = corpMapper.selectByExample(example);
+        if (CollectionUtils.isEmpty(corps)) {
+            return ReturnT.SUCCESS;
+        }
+        for (Corp corp : corps) {
+            selectGroupMsgList(startTime, endTime, corp.getId(), null);
+        }
+        for (Corp corp : corps) {
+            long notSentCount = newSelectAlertHistoryMessage(startTime, endTime, corp.getId(), corp.getName());
+            if (notSentCount == 0) {
+                redisTemplate.opsForValue().set(START_TIME_KEY, endTime, 1, TimeUnit.DAYS);
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    private long newSelectAlertHistoryMessage(Long startTime, Long endTime, Long corpId, String corpName) {
+        StaffExample staffExample = new StaffExample();
+        List<Staff> staffList = staffMapper.selectByExample(staffExample);
+        ArrayList<Integer> statusList = Lists.newArrayList(0, 1, 2, 3);
+        List<SendDetail> sendDetailList = new ArrayList<>();
+        for (Staff staff : staffList) {
+            SendDetail sendDetail = new SendDetail();
+            sendDetail.setRemark(staff.getRemark());
+            sendDetail.setStaffId(staff.getId());
+            List<Long> countList = new ArrayList<>();
+            for (Integer status : statusList) {
+                SendMsgResultExample example = new SendMsgResultExample();
+                example.createCriteria().andSendTimeBetween(new Date(startTime * 1000), new Date(endTime * 1000))
+                        .andStaffIdEqualTo(staff.getId())
+                        .andStatusEqualTo(status)
+                        .andIsDeleteEqualTo(0);
+                long l = sendMsgResultMapper.countByExample(example);
+                countList.add(l);
+            }
+            sendDetail.setSendCountList(countList);
+            sendDetailList.add(sendDetail);
+        }
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(corpName).append("\n");
+        long allCount = 0;
+        long notSend = 0;
+        for (SendDetail sendDetail : sendDetailList) {
+            List<Long> sendCountList = sendDetail.getSendCountList();
+            if (CollectionUtils.isEmpty(sendCountList)) {
+                continue;
+            }
+            stringBuilder.append(sendDetail.getRemark());
+            long count = sendCountList.get(0) + sendCountList.get(1) + sendCountList.get(2) + sendCountList.get(3);
+            allCount += count;
+            notSend += sendCountList.get(0);
+            if (count != 0 && sendCountList.get(0) > 0) {
+                LarkRobotUtil.sendMessage(sendDetail.getRemark() + "存在未发送记录,请检查");
+//                if (sendDetail.getStaffId() == 3) {
+//                    LarkRobotUtil.sendTipMessage(sendDetail.getRemark() + "存在未发送记录,请检查");
+//                } else {
+//                    LarkRobotUtil.sendNotPushMessage("<at user_id=\"all\">所有人</at> " + sendDetail.getRemark() + " 存在未发送记录,请检查");
+//                }
+            }
+            stringBuilder.append("总发送数量:").append(count).append("   ");
+            stringBuilder.append("未发送数量:").append(sendCountList.get(0)).append("   ");
+            stringBuilder.append("已发送数量:").append(sendCountList.get(1)).append("   ");
+            stringBuilder.append("不是好友发送失败数量:").append(sendCountList.get(2)).append("   ");
+            stringBuilder.append("已经收到其他群发消息失败发送数量:").append(sendCountList.get(3)).append("   ");
+            stringBuilder.append("\n");
+        }
+        if (allCount > 0) {
+            LarkRobotUtil.sendMessage(stringBuilder.toString());
+            LarkRobotUtil.sendTipMessage(stringBuilder.toString());
+        }
+        return notSend;
+    }
+
 
     @XxlJob("saveHistoryMessageJob")
     public ReturnT<String> selectHistoryMessageByDay(String param) {

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

@@ -238,10 +238,10 @@ public class WeComMessageDataJob {
         init(staffIds);
         for (Corp corp : corps) {
             WeComUserExample weComUserExample = new WeComUserExample();
-            weComUserExample.createCriteria().andExternalUserIdIsNotNull().andCorpIdEqualTo(corp.getId())
+            WeComUserExample.Criteria criteria = weComUserExample.createCriteria().andExternalUserIdIsNotNull().andCorpIdEqualTo(corp.getId())
                     .andGroupMsgDisabledNotEqualTo((byte) 2);
             if (xxlJobParam.getUserId() != null) {
-                weComUserExample.createCriteria().andIdEqualTo(xxlJobParam.getUserId());
+                criteria.andIdEqualTo(xxlJobParam.getUserId());
             }
             long count = weComUserMapper.countByExample(weComUserExample);
             int page = 1;

+ 88 - 38
offline-module/src/main/java/com/tzld/piaoquan/offline/job/WeComUserDataJob.java

@@ -148,7 +148,7 @@ public class WeComUserDataJob {
                         StaffWithUser staffWithUser = new StaffWithUser();
                         staffWithUser.setStaffId(staff.getId());
                         staffWithUser.setUserId(userId);
-                        staffWithUserMapper.insert(staffWithUser);
+                        staffWithUserMapper.insertSelective(staffWithUser);
                     }
                 }
                 String nextCursor = jsonObject.getString("next_cursor");
@@ -241,7 +241,6 @@ public class WeComUserDataJob {
 
     @XxlJob("statisticsUserCountJob")
     public ReturnT<String> statisticsUserCount(String param) throws IOException {
-        refreshTag();
         StaffExample staffExample = new StaffExample();
         List<Staff> staffList = staffMapper.selectByExample(staffExample);
         String date;
@@ -303,44 +302,9 @@ public class WeComUserDataJob {
                         newCount++;
                     }
                     count++;
-                    JSONArray tagIds = followInfo.getJSONArray("tag_id");
                     Long userId = weComUserMapper.selectIdByExternalUserId(externalUserId);
                     if (userId == null) {
-                        String name = externalContact.getString("name");
-                        String unionId = externalContact.getString("unionid");
-                        String avatar = externalContact.getString("avatar");
-                        Integer type = externalContact.getInteger("type");
-                        Integer gender = externalContact.getInteger("gender");
-                        WeComUser weComUser = new WeComUser();
-                        weComUser.setExternalUserId(externalUserId);
-                        weComUser.setName(name);
-                        weComUser.setType(type);
-                        weComUser.setUnionId(unionId);
-                        weComUser.setGender(gender);
-                        weComUser.setAvatar(avatar);
-                        weComUser.setCreatedAt(createAt);
-                        weComUserMapper.insertSelective(weComUser);
-                        userId = weComUser.getId();
-                        StaffWithUser staffWithUser = new StaffWithUser();
-                        staffWithUser.setStaffId(staff.getId());
-                        staffWithUser.setUserId(userId);
-                        staffWithUserMapper.insert(staffWithUser);
-                    }
-
-                    if (!tagIds.isEmpty()) {
-                        List<String> tagIdList = tagIds.toJavaList(String.class);
-                        for (String tagId : tagIdList) {
-                            TagExample example = new TagExample();
-                            example.createCriteria().andTagIdEqualTo(tagId);
-                            List<Tag> tags = tagMapper.selectByExample(example);
-                            if (!CollectionUtils.isEmpty(tags)) {
-                                Tag tag = tags.get(0);
-                                UserWithTag userWithTag = new UserWithTag();
-                                userWithTag.setUserId(userId);
-                                userWithTag.setTagId(tag.getId());
-                                addUserWithTag(userWithTag);
-                            }
-                        }
+                        addUser(externalContact, corpId, externalUserId, createAt, staff.getId());
                     }
                 }
                 String nextCursor = jsonObject.getString("next_cursor");
@@ -357,6 +321,68 @@ public class WeComUserDataJob {
         return result;
     }
 
+    @XxlJob("getUserTagJob")
+    public ReturnT<String> getUserTag(String param) {
+        try {
+            refreshTag();
+            XxlJobParam xxlJobParam = new XxlJobParam();
+            if (StringUtils.isNotEmpty(param)) {
+                xxlJobParam = JSONObject.parseObject(param, XxlJobParam.class);
+            }
+            CorpExample corpExample = new CorpExample();
+            CorpExample.Criteria corpCriteria = corpExample.createCriteria();
+            if (xxlJobParam.getCorpId() != null) {
+                corpCriteria.andIdEqualTo(xxlJobParam.getCorpId());
+            }
+            List<Corp> corps = corpMapper.selectByExample(corpExample);
+            for (Corp corp : corps) {
+                StaffExample staffExample = new StaffExample();
+                StaffExample.Criteria staffCriteria = staffExample.createCriteria();
+                staffCriteria.andCorpIdEqualTo(corp.getId());
+                if (xxlJobParam.getStaffId() != null) {
+                    staffCriteria.andIdEqualTo(xxlJobParam.getStaffId());
+                }
+                List<Staff> staffList = staffMapper.selectByExample(staffExample);
+                for (Staff staff : staffList) {
+                    List<String> existExternalUserIds = getUserList(staff.getCarrierId(), corp.getId());
+                    for (String externalUserId : existExternalUserIds) {
+                        JSONObject userDetail = weComUserService.getUserDetail(externalUserId, corp.getId());
+                        JSONObject externalContact = userDetail.getJSONObject("external_contact");
+                        JSONObject followInfo = userDetail.getJSONObject("follow_info");
+                        Long createAt = followInfo.getLong("createtime");
+                        JSONArray tagIds = followInfo.getJSONArray("tag_id");
+                        if (!tagIds.isEmpty()) {
+                            List<String> tagIdList = tagIds.toJavaList(String.class);
+                            for (String tagId : tagIdList) {
+                                TagExample example = new TagExample();
+                                example.createCriteria().andTagIdEqualTo(tagId);
+                                List<Tag> tags = tagMapper.selectByExample(example);
+                                if (!CollectionUtils.isEmpty(tags)) {
+                                    Long userId = weComUserMapper.selectIdByExternalUserId(externalUserId);
+                                    if (userId == null) {
+                                        userId = addUser(externalContact, corp.getId(), externalUserId, createAt, staff.getId());
+                                    }
+                                    Tag tag = tags.get(0);
+                                    UserWithTag userWithTag = new UserWithTag();
+                                    userWithTag.setUserId(userId);
+                                    userWithTag.setTagId(tag.getId());
+                                    addUserWithTag(userWithTag);
+                                }
+                            }
+                        }
+
+                    }
+                }
+            }
+        } catch (Exception e) {
+            LarkRobotUtil.sendMessage("insertStaffWithUserJob error" + e);
+            log.error("insertStaffWithUserJob error", e);
+        }
+
+        return ReturnT.SUCCESS;
+
+    }
+
 
     public void refreshTag() throws IOException {
         String weComAccessToken = weComAccessTokenService.getWeComAccessToken(1L);
@@ -412,4 +438,28 @@ public class WeComUserDataJob {
         }
     }
 
+    private Long addUser(JSONObject externalContact, Long corpId, String externalUserId, Long createAt, Long staffId) {
+        String name = externalContact.getString("name");
+        String unionId = externalContact.getString("unionid");
+        String avatar = externalContact.getString("avatar");
+        Integer type = externalContact.getInteger("type");
+        Integer gender = externalContact.getInteger("gender");
+        WeComUser weComUser = new WeComUser();
+        weComUser.setCorpId(corpId);
+        weComUser.setExternalUserId(externalUserId);
+        weComUser.setName(name);
+        weComUser.setType(type);
+        weComUser.setUnionId(unionId);
+        weComUser.setGender(gender);
+        weComUser.setAvatar(avatar);
+        weComUser.setCreatedAt(createAt);
+        weComUserMapper.insertSelective(weComUser);
+        Long userId = weComUser.getId();
+        StaffWithUser staffWithUser = new StaffWithUser();
+        staffWithUser.setStaffId(staffId);
+        staffWithUser.setUserId(userId);
+        staffWithUserMapper.insertSelective(staffWithUser);
+        return userId;
+    }
+
 }