WeSensitiveActHitServiceImpl.java 6.0 KB
Newer Older
L
leejoker 已提交
1 2
package com.linkwechat.wecom.service.impl;

L
leejoker 已提交
3
import com.alibaba.fastjson.JSONObject;
L
leejoker 已提交
4
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
L
leejoker 已提交
5
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
L
leejoker 已提交
6 7
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8
import com.linkwechat.common.constant.WeConstans;
L
leejoker 已提交
9 10
import com.linkwechat.common.utils.DateUtils;
import com.linkwechat.common.utils.SecurityUtils;
11 12
import com.linkwechat.common.utils.StringUtils;
import com.linkwechat.wecom.domain.WeCustomer;
L
leejoker 已提交
13
import com.linkwechat.wecom.domain.WeSensitiveAct;
L
leejoker 已提交
14
import com.linkwechat.wecom.domain.WeSensitiveActHit;
15 16
import com.linkwechat.wecom.domain.WeUser;
import com.linkwechat.wecom.mapper.WeCustomerMapper;
L
leejoker 已提交
17
import com.linkwechat.wecom.mapper.WeSensitiveActHitMapper;
18
import com.linkwechat.wecom.mapper.WeUserMapper;
L
leejoker 已提交
19
import com.linkwechat.wecom.service.IWeSensitiveActHitService;
L
leejoker 已提交
20 21
import com.linkwechat.wecom.service.IWeSensitiveActService;
import org.springframework.beans.factory.annotation.Autowired;
22
import org.springframework.scheduling.annotation.Async;
L
leejoker 已提交
23
import org.springframework.stereotype.Service;
24
import org.springframework.transaction.annotation.Transactional;
L
leejoker 已提交
25

26
import java.util.Date;
L
leejoker 已提交
27
import java.util.List;
28
import java.util.Objects;
L
leejoker 已提交
29
import java.util.stream.Collectors;
L
leejoker 已提交
30 31 32 33 34 35 36 37

/**
 * @author leejoker <1056650571@qq.com>
 * @version 1.0
 * @date 2021/1/13 9:05
 */
@Service
public class WeSensitiveActHitServiceImpl extends ServiceImpl<WeSensitiveActHitMapper, WeSensitiveActHit> implements IWeSensitiveActHitService {
L
leejoker 已提交
38 39
    @Autowired
    private IWeSensitiveActService weSensitiveActService;
40 41 42 43
    @Autowired
    private WeUserMapper weUserMapper;
    @Autowired
    private WeCustomerMapper weCustomerMapper;
L
leejoker 已提交
44

L
leejoker 已提交
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
    @Override
    public WeSensitiveActHit selectWeSensitiveActHitById(Long id) {
        return getById(id);
    }

    @Override
    public List<WeSensitiveActHit> selectWeSensitiveActHitList(WeSensitiveActHit weSensitiveActHit) {
        LambdaQueryWrapper<WeSensitiveActHit> lambda = Wrappers.lambdaQuery();
        lambda.orderByDesc(WeSensitiveActHit::getCreateTime);
        return list(lambda);
    }

    @Override
    public boolean insertWeSensitiveActHit(WeSensitiveActHit weSensitiveActHit) {
        weSensitiveActHit.setCreateBy(SecurityUtils.getUsername());
        weSensitiveActHit.setCreateTime(DateUtils.getNowDate());
        return saveOrUpdate(weSensitiveActHit);
    }
L
leejoker 已提交
63 64

    @Override
65 66
    @Async
    @Transactional
L
leejoker 已提交
67
    public void hitWeSensitiveAct(List<JSONObject> chatDataList) {
68
        List<WeSensitiveActHit> saveList = chatDataList.stream().filter(chatData -> {
L
leejoker 已提交
69
            String type = chatData.getString("msgtype");
70 71 72
            String roomId = chatData.getString("roomid");
            if (("card".equals(type) || "redpacket".equals(type))
                    && StringUtils.isEmpty(roomId)) {
L
leejoker 已提交
73 74 75 76 77 78 79 80 81
                return true;
            }
            return false;
        }).map(chatData -> {
            WeSensitiveActHit weSensitiveActHit = new WeSensitiveActHit();
            WeSensitiveAct weSensitiveAct = getSensitiveActType(chatData.getString("msgtype"));
            if (weSensitiveAct != null) {
                weSensitiveActHit.setSensitiveAct(weSensitiveAct.getActName());
                weSensitiveActHit.setSensitiveActId(weSensitiveAct.getId());
82 83 84 85 86 87 88 89
                weSensitiveActHit.setCreateTime(new Date(chatData.getLong("msgtime")));
                weSensitiveActHit.setCreateBy(SecurityUtils.getUsername());
                String operatorId = chatData.getString("from");
                String operatorTargetId = chatData.getJSONArray("tolist").getString(0);
                weSensitiveActHit.setOperatorId(operatorId);
                weSensitiveActHit.setOperateTargetId(operatorTargetId);
                setUserOrCustomerInfo(weSensitiveActHit);
                return weSensitiveActHit;
L
leejoker 已提交
90
            }
91 92 93
            return null;
        }).filter(Objects::nonNull).collect(Collectors.toList());
        saveOrUpdateBatch(saveList);
L
leejoker 已提交
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
    }

    private WeSensitiveAct getSensitiveAct(String type) {
        WeSensitiveAct weSensitiveAct = new WeSensitiveAct();
        weSensitiveAct.setActName(type);
        List<WeSensitiveAct> list = weSensitiveActService.selectWeSensitiveActList(weSensitiveAct);
        if (CollectionUtils.isNotEmpty(list)) {
            return list.get(0);
        }
        return null;
    }

    private WeSensitiveAct getSensitiveActType(String msgType) {
        String type;
        if ("card".equals(msgType)) {
            type = "发名片";
        } else if ("redpacket".equals(msgType)) {
            type = "发红包";
        } else {
            type = "拉黑/删除好友";
        }
        return getSensitiveAct(type);
    }
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143

    private void setUserOrCustomerInfo(WeSensitiveActHit weSensitiveActHit) {
        int operatorType = StringUtils.weCustomTypeJudgment(weSensitiveActHit.getOperatorId());
        int operatorTargetType = StringUtils.weCustomTypeJudgment(weSensitiveActHit.getOperateTargetId());
        weSensitiveActHit.setOperator(getUserOrCustomerName(operatorType, weSensitiveActHit.getOperatorId()));
        weSensitiveActHit.setOperateTarget(getUserOrCustomerName(operatorTargetType, weSensitiveActHit.getOperateTargetId()));
    }

    private String getUserOrCustomerName(int type, String userId) {
        //获取发送人信息
        if (WeConstans.ID_TYPE_USER.equals(type)) {
            //成员信息
            WeUser weUser = weUserMapper.selectOne(new LambdaQueryWrapper<WeUser>().eq(WeUser::getUserId, userId));
            if (weUser != null) {
                return weUser.getName();
            }
        } else if (WeConstans.ID_TYPE_EX.equals(type)) {
            //获取外部联系人信息
            WeCustomer weCustomer = weCustomerMapper.selectWeCustomerById(userId);
            if (weCustomer != null) {
                return weCustomer.getName();
            }
        } else if (WeConstans.ID_TYPE_MACHINE.equals(type)) {
            //拉去机器人信息暂不处理
        }
        return null;
    }
L
leejoker 已提交
144
}