import globalConfig from '../config/globalConfig' // 各功能 开关和间隔时间 设置; interval 默认单位:秒 import serverRequest from '../api/scrm/serverRequest' import servicesCommon from '../services/common' import commonData from '../store/data' import { AccInfoTypes, GroupItem, GroupsData, TypeGroupInfo } from '../types/types' import { delay } from '../utils/index' import { formatGroupMemberData } from '../utils/dataMapping/groupsMap' // 基础数据 ---- 获取数据和上报数据 async function fetchAndReportBasicData(): Promise { try { // 获取账户数据、群数据 await servicesCommon.getAccInfo() // 2.x 群数据需分页获取 const pageSize = 10000 let pageNum = 1 const groupsData: GroupsData = await fetchBasicData(pageNum, pageSize) await reportBasicData(groupsData) while (groupsData.total_page > pageNum) { pageNum++ const nextGroupsData: GroupsData = await fetchBasicData(pageNum, pageSize) await reportBasicData(nextGroupsData) } } catch (error) { console.log('Error in fetchAndReportBasicData:', error) } } async function fetchBasicData(pageNum, pageSize): Promise { const groupsData: GroupsData = await servicesCommon.getGroupsList(pageNum, pageSize) if (pageNum === 1) { commonData.set('globalGroupList', groupsData.list) } else { const _prev: GroupItem[] = commonData.get('globalGroupList') || [] commonData.set('globalGroupList', [..._prev, ...groupsData.list]) } return groupsData } async function reportBasicData(groupsData): Promise { const accInfo: AccInfoTypes = commonData.get('accInfo') const groupsList_page = groupsData.list const _groupsList: TypeGroupInfo[] = groupsList_page.map((v) => { return { entWxRoomCount: v.total, // 群成员数量 entWxRoomId: v.chat_room_id, // 群id entWxRoomName: v.nick_name, // 群名称 roomCreateTimeStr: v.create_time // 群创建时间 } }) // 上报群成员数量不为0的群 const nonEmptyGroups = _groupsList.filter((v) => (v.entWxRoomCount ?? 0) > 0) await serverRequest.reportBasicData({ entWxId: accInfo.user_id, entWxName: accInfo.nick_name, entWxAvatar: accInfo.avatar_url, entWxRoomCount: groupsData.total, scrmEntWxRoomList: nonEmptyGroups }) // 群成员数量为0的群, 通过servicesCommon.getGroupMembers获取群成员数量并上报 const zeroCountGroups = _groupsList.filter((v) => (v.entWxRoomCount ?? 0) === 0) if (zeroCountGroups.length > 0) { await fetchAndReportMemberData(zeroCountGroups, 'basic') } } // 上报群成员数据 async function fetchAndReportMemberData(groupsList, type?): Promise { // 排队,2秒执行一条 for (const item of groupsList) { if (!item.chat_room_id) { continue } const groupMemberData = await servicesCommon.getGroupMembers(item.chat_room_id) const memberList = formatGroupMemberData(groupMemberData, item) if (type === 'basic') { console.log('fetchAndReportMemberData-basic:', item.chat_room_id, memberList.length) // 上报群数据时,群成员数量为0的群通过servicesCommon.getGroupMembers获取群成员数量并上报 // 上报群数据 const accInfo: AccInfoTypes = commonData.get('accInfo') const selfwxid: string = commonData.get('selfwxid') const groupsData: GroupsData = commonData.get('groupsData') serverRequest.reportBasicData({ entWxId: selfwxid, entWxName: accInfo.nick_name, entWxAvatar: accInfo.avatar_url, entWxRoomCount: groupsData.total, scrmEntWxRoomList: [ { entWxRoomCount: memberList.length, // 群成员数量 entWxRoomId: item.chat_room_id, // 群id entWxRoomName: item.nickname, // 群名称 roomCreateTimeStr: item.create_time // 群创建时间 } ] }) } serverRequest.reportMemberData(memberList) const _interval = Math.ceil(Math.random() * 2500) + globalConfig.syncDataMember.intervalEach await delay(_interval) } } export default { fetchAndReportBasicData, fetchAndReportMemberData }