where('id', $params['rule_id']) ->first(); // 查询对应的商品链接 $logInfo = ChatGroupMassMsgBehavior::query() ->where('rule_id', $params['rule_id']) ->where('chat_id', $params['chat_id']) ->first(); # 处理附件内容中的素材ID $attachments = json_decode($massMsgInfo['attachments'], true); $attachments = MaterialService::mediaIdReplace($attachments, $params['corpid']); # 处理包含雷达的附件信息 $attachments = MaterialService::radarAttachment($attachments, $params['corpid'], $logInfo['sender_id'], 2, $params['rule_id']); # 处理附件内容中的链接 $attachments = MaterialService::itemUrlReplace($attachments, $logInfo['item_url']); $attachments = MaterialService::turnToH5($attachments); $data = [ 'text' => [ 'content' => $massMsgInfo['content'] ], 'attachments' => $attachments, 'status' => $logInfo['status'], ]; return $data; } catch (\Exception $e) { EmailQueue::rPush('客户群群发信息处理成链接类型消息体过程发生异常', $e->getTraceAsString(), [ 'song.shen@kuxuan-inc.com'], '猎羽'); Log::logError('客户群群发信息处理成链接类型消息体过程发生异常', [ 'file' => $e->getFile(), 'line' => $e->getLine(), 'msg' => $e->getMessage(), 'trace'=> $e->getTraceAsString(), ], 'ChatGroupMassMsgH5Trace'); $errno = 500; return []; } } public static function report($params, &$errno, $type, $errmsg) { if(1 != $type) {// 非发送成功的情况,记录日志 Log::logInfo('客户群群发上报记录', array_merge($params, ['type' => $type, 'errmsg' => $errmsg]), 'ChatGroupSendMassMsgReport'); return ; } $params['click_time'] = date('Y-m-d H:i:s'); $log = ChatGroupMassMsgBehavior::query() ->where('rule_id', $params['rule_id']) ->where('chat_id', $params['chat_id']) ->first(); if(empty($log)){ EmailQueue::rPush('客户群群发记录信息获取失败', json_encode([ 'params' => $params ], 256), 'song.shen@kuxuan-inc.com', '猎羽'); $errno = 500; return ; } if(1 == $log->status){ return ; } $res = ChatGroupMassMsgBehavior::query() ->where('rule_id', $params['rule_id']) ->where('chat_id', $params['chat_id']) ->update($params); # 检测群聊是否全部发送完成 $count = ChatGroupMassMsgBehavior::query() ->where('rule_id', $params['rule_id']) ->whereIn('status', [-1, 0]) ->count(); if(0 == $count) { $status = ChatGroupMassMsg::query()->where('id', $params['rule_id'])->value('enable'); if(4 != $status){ # 修改状态为发送完成 ChatGroupMassMsgRuleService::updateStatus($params['rule_id'], 4); } } return ; } public static function getRuleSendResult($datum) { $chatStat = ChatGroupMassMsgBehavior::query() ->selectRaw('count(1) as total, sum(if(status = 1, 1, 0)) as success, sum(if(status = 0, 1, 0)) as fail') ->where('corpid', $datum->corpid) ->where('rule_id', $datum->rule_id) ->first(); $senderTotal = ChatGroupMassMsgBehavior::query() ->selectRaw('count(distinct(sender_id)) as total') ->where('corpid', $datum->corpid) ->where('rule_id', $datum->rule_id) ->first(); $senderSuccess = ChatGroupMassMsgBehavior::query() ->selectRaw('count(distinct(sender_id)) as success') ->where('corpid', $datum->corpid) ->where('rule_id', $datum->rule_id) ->where('status', 1) ->first(); $senderFail = ChatGroupMassMsgBehavior::query() ->selectRaw('count(distinct(sender_id)) as fail') ->where('corpid', $datum->corpid) ->where('rule_id', $datum->rule_id) ->where('status', 0) ->first(); $data = [ 'send_chat_total' => $chatStat->total ?? 0, // 群聊总数 'send_chat_success' => $chatStat->success ?? 0, // 送达群聊 'send_chat_fail' => $chatStat->fail ?? 0, // 未送达群聊 'send_user_total' => $senderTotal->total ?? 0, // 群主总数 'send_user_success' => $senderSuccess->success ?? 0, // 已发送群主 'send_user_fail' => $senderFail->fail ?? 0, // 未发送群主 ]; return $data; } public static function welcomeTemplateAttachmentVerify($attachments) { $typeArr = array_keys($attachments); # 验证是否只选择了一种附件 if(count($typeArr) == 0 || count($typeArr) > 1) { return 2320; // 仅可选择一种附件类型 } # 每一种附件的格式分别去验证 $type = $typeArr[0]; switch ($type) { case 'image': if(empty($attachments[$type]['media_id'])) { return 2322; } break; case 'link': case 'promote': if(empty($attachments[$type]['title']) || empty($attachments[$type]['url'])) { return 2323; } break; case 'miniprogram': if(empty($attachments[$type]['title']) || empty($attachments[$type]['pic_media_id']) || empty($attachments[$type]['appid']) || empty($attachments[$type]['page'])) { return 2324; } break; case 'file': case 'video': if(empty($attachments[$type]['media_id'])) { return 2325; } break; default: return 2321;// 附件类型不合法 break; } } }