import http from './http' import { TypeGroupInfo } from '../../types/types' import { TypeServerReplyMsg, TypeServerTimingMsg, TypeServerMsgContent, TypeServerWelcome, TypeServerWelConfig_item, TypeServerWorkTimes_item, TypeServerReceiveMsg } from '../../types/typesServer' import commonData from '../../store/data' const FormData = require('form-data') const fs = require('fs') import path from 'path' // 上报基础数据:企微数据、群列表 const reportBasicData = async (data): Promise => { try { await http.put(`/scrm/app/entwx/submit`, data) } catch (error) { console.log('ERROR: 上报基础数据失败') } } // 上报群成员数据 const reportMemberData = async (data): Promise => { try { await http.put(`/scrm/app/entwx/submit/member`, data) } catch (error) { console.log('ERROR: 上报群成员数据失败') } } // 保存消息至服务器 const saveMsg = async (msgData): Promise => { try { const response = await http.post(`/scrm/app/chat/submit`, msgData) return response.data.data } catch (error) { console.error('ERROR: 提交消息失败') return null } } // updateMsg const updateMsg = async (msgData): Promise => { try { await http.post(`/scrm/app/chat/submit/update`, msgData) } catch (error) { console.log('ERROR: 更新消息失败') } } // 获取坐班时间 const getWorkTime = async (entWxId): Promise => { try { const response = await http.get(`/scrm/app/entwx/online/v1/${entWxId}`) return response.data.data } catch (error) { console.log('ERROR: 获取坐班时间失败') return [] } } // 通知服务端开始坐班 const startBein = async (): Promise => { try { const selfwxid: string = commonData.get('selfwxid') await http.post(`/scrm/app/chat/notice/startBein/${selfwxid}`) } catch (error) { console.log('ERROR: 通知服务端开始坐班失败') } } // 获取要发送的消息 const getReplyMsg = async (data): Promise => { try { const response = await http.post(`/scrm/app/chat/pollingAnswer`, data) return response?.data?.data } catch (error) { console.error('ERROR: 获取要发送的消息失败') return [] } } // 发送消息到企微后的回调 const sendMsgCb = async (data): Promise => { // console.log('发送消息成功回调', data) try { await http.post(`/scrm/app/chat/polling/callback`, data) } catch (error) { console.log('ERROR: 发送消息成功回调失败') } } const sendMsgFailCb = async (data): Promise => { try { await http.post(`/scrm/app/chat/polling/fail/callback`, data) } catch (error) { console.log('ERROR: 发送消息失败回调失败') } } // 定时消息 ---- 获取要发送的消息 const getTimingSendMsg = async (sendId): Promise => { try { const response = await http.get(`/scrm/app/task/send/list?sendId=${sendId}`) return response?.data?.data || [] } catch (error) { console.error('ERROR: 获取要发送的定时消息失败') return [] } } // 定时消息 ---- 消息发送后回调 const cbTimingSendMsg = async (data): Promise => { try { await http.post(`/scrm/app/task/callback`, data) } catch (error) { console.error('Error: 定时消息回调失败') } } // 提交小程序信息 const submitMiniWx = async (data): Promise => { try { await http({ url: `/scrm/app/miniWx/submit`, method: 'post', data: data }) } catch (error) { console.error('Error: 提交小程序信息失败') } } // 提交视频号信息 const submitVideoChannel = async (data): Promise => { try { await http({ url: `/scrm/app/miniWx/video/submit`, method: 'post', data: data }) } catch (error) { console.error('Error: 提交视频号信息失败') } } // 在线心跳请求 const setOnLine = async (): Promise => { try { const selfwxid: string = commonData.get('selfwxid') await http({ url: `/scrm/entwx/status/online/${selfwxid}`, method: 'put' }) } catch (error) { console.error('Error: 在线心跳请求失败') } } // 在线心跳请求 const setOnLineV2 = async (): Promise => { try { const selfwxid: string = commonData.get('selfwxid') const _data = { entWxId: selfwxid, unsentQueueCount: commonData.get('waitMsgNum') || 0 // 未发队列count } await http({ url: `/scrm/entwx/status/online/v1`, method: 'put', data: _data }) } catch (error) { console.error('Error: 在线心跳请求失败') } } // 上报白名单备选消息 const putWLMsg = async (data): Promise => { try { await http.post(`/scrm/wl-backup`, data) } catch (error) { console.error('Error: 在上报白名单备选消息失败') } } // 上报入群信息并获取欢迎消息 const groupJoin = async (data): Promise => { try { const response = await http.post(`/scrm/app/group/join`, data) return response?.data?.data } catch (error) { console.error('Error: 上报入群信息并获取欢迎消息失败') } } // 获取当日入群成员列表(是否填写调查表)|| 获取当日问卷调查填写情况 const getJoinMemberList = async (data): Promise => { try { const response = await http.post(`/scrm/app/group/questionnaire`, data) return response?.data?.data } catch (error) { console.log('Error: 获取当日问卷调查填写情况失败') } } // 获取每日(19:30)发送的定时消息的内容 const getTimedWelConfig = async (): Promise => { try { const response = await http.post(`/scrm/app/group/questionnaire/config`) return response?.data?.data } catch (error) { console.log('Error: 获取每日(19:30)消息内容失败') return [] } } // 获取每日(19:30)是否发送灯塔欢迎语配置 const getTimedWelConfig_lh = async (cat): Promise<{ content: string }> => { try { const response = await http({ url: `/admin/med/config/cat/${cat}`, method: 'get' }) return response?.data?.data } catch (error) { console.log('Error: 获取每日(19:30) 是否发送灯塔欢迎语配置失败') return { content: '' } } } // 根据医生id&关键词获取灯塔视频 const getLighthouseVideo = async (data): Promise => { try { const response = await http.get(`/scrm/app/task/lgdata?drId=${data.drId}&keys=${data.keys}`) return response?.data?.data } catch (error) { console.log('Error: 获取灯塔视频失败') return [] } } // 查询群绑定的医生id const getDridByRoomId = async (roomId): Promise => { try { const response = await http.get(`/scrm/app/group/bindDr/${roomId}`) return response?.data?.data } catch (error) { console.log('Error: 获取医生失败') return {} } } // 查询群对应的欢迎语 TypeServerWelcome const getWelcomeByRoomId = async (roomId): Promise => { try { const response = await http.get(`/scrm/app/group/welcome/v1/${roomId}`) return response?.data?.data } catch (error) { console.log('Error: 获取欢迎语失败') return null } } // 获取默认医助 /app/group/defaultAcc const getDefaultAcc = async (): Promise<{ entWxId: string } | null> => { try { const response = await http.get(`/scrm/app/group/defaultAcc`) return response?.data?.data } catch (error) { console.log('Error: 获取默认医助失败') return null } } // // 上传本地图片 // const uploadImg = async (img_path: string): Promise => { // try { // const formData = new FormData() // formData.append('file', fs.createReadStream(img_path)) // const response = await http.post(`/admin/sys-file/upload/scrm`, formData, { // headers: { // ...formData.getHeaders() // } // }) // return response?.data?.data?.ossPath // } catch (error) { // console.log('Error: 上传图片失败', error) // return '' // } // } // 上传本地图片 export const uploadImg = async (img_path: string): Promise => { try { /* 1. 提前检查可读性 */ await fs.promises.access(img_path, fs.constants.R_OK) /* 2. 打开文件句柄并创建可读流 */ const fd = await fs.promises.open(img_path, 'r') const stream = fs.createReadStream(img_path, { fd: fd.fd, autoClose: false }) /* 3. 构造 FormData */ const form = new FormData() form.append('file', stream, path.basename(img_path)) /* 4. 上传 */ const { data } = await http.post('/admin/sys-file/upload/scrm', form, { headers: form.getHeaders(), maxBodyLength: Infinity // 大文件必备 }) /* 5. 成功后关闭句柄 */ await fd.close() return data?.data?.ossPath ?? '' } catch (error) { /* 6. 统一错误处理 */ console.log('图片上传失败') return '' } } export default { reportBasicData, reportMemberData, saveMsg, updateMsg, startBein, getReplyMsg, sendMsgCb, sendMsgFailCb, getWorkTime, getTimingSendMsg, cbTimingSendMsg, submitMiniWx, submitVideoChannel, setOnLine, setOnLineV2, putWLMsg, groupJoin, getJoinMemberList, getTimedWelConfig, getTimedWelConfig_lh, getLighthouseVideo, getDridByRoomId, getWelcomeByRoomId, getDefaultAcc, uploadImg }