uid;
// 获取所有相关通知
$notices = WxNotice::where('user_id', $uid)
->where('is_read', 0)
->whereIn('notice_type', [100, 0, 1, 7, 8, 101, 2, 3, 5, 102, 4, 6])
->orderByRaw('created_at DESC')
->get(['created_at', 'title', 'notice_type']);
// 初始化计数和内容
$noticeSystemCount = 0;
$noticeSystemText = '还没有新通知';
$noticeSystemDate = '';
$noticeLikeCollectCount = 0;
$noticeLikeCollectText = '还没有新的赞和收藏';
$noticeLikeCollectDate = '';
$noticeCommentCount = 0;
$noticeCommentText = '还没有新的评论和@';
$noticeCommentDate = '';
// 处理通知
foreach ($notices as $notice) {
if (in_array($notice->notice_type, [100, 0, 1, 7, 8])) {
$noticeSystemCount++;
if ($noticeSystemCount == 1) {
$noticeSystemText = $notice->title ?? '';
$noticeSystemDate = format_datetime($notice->created_at);
}
} elseif (in_array($notice->notice_type, [101, 2, 3, 5])) {
$noticeLikeCollectCount++;
if ($noticeLikeCollectCount == 1) {
$noticeLikeCollectText = $notice->title;
$noticeLikeCollectDate = format_datetime($notice->created_at);
}
} elseif (in_array($notice->notice_type, [102, 4, 6])) {
$noticeCommentCount++;
if ($noticeCommentCount == 1) {
$noticeCommentText = $notice->title;
$noticeCommentDate = format_datetime($notice->created_at);
}
}
}
// 获取圈子未读数
$noticeCircleCount = UserUtils::user_circle_unread_count($uid);
$noticeCircleText = '没有新的'.env('circle_call', '圈子').'动态';
if ($noticeCircleCount > 0) {
$noticeCircleText = '有'.$noticeCircleCount.'条笔记新发布';
}
// 准备返回数据
$list = [
['noticeSystemText' => $noticeSystemText, 'noticeSystemCount' => $noticeSystemCount, 'noticeSystemDate' => $noticeSystemDate],
['noticeLikeCollectText' => $noticeLikeCollectText, 'noticeLikeCollectCount' => $noticeLikeCollectCount, 'noticeLikeCollectDate' => $noticeLikeCollectDate],
['noticeCommentText' => $noticeCommentText, 'noticeCommentCount' => $noticeCommentCount, 'noticeCommentDate' => $noticeCommentDate],
['noticeCircleText' => $noticeCircleText, 'noticeCircleCount' => $noticeCircleCount, 'noticeCircleDate' => '']
];
$data = [
'common' => [
'isFollow' => (WxUser::where('id', $uid)->value('weixin_mp_openid') ? true : false),
'client_id' => GatewayUtils::uid2client_id($uid)
],
'list' => $list
];
return $this->success($data);
}
/**
* 通知详情页数据
* @param Request $request
* 系统通知:0,1, 7, 8
* 赞和收藏通知:2,3,5
* 评论和充电通知:4,6
* @return \Illuminate\Http\JsonResponse
*/
public function getDetailsMessages(Request $request)
{
$uid = $request->uid;
$type = $request->type;
$limit = $request->limit;
if(_empty_($limit)){
$limit = 10;
}else{
$limit = _between_($limit, 1, 100);
}
if ($type == 0) {
$list = WxNotice::where('user_id', $uid)
->whereIn('notice_type', [100,0, 1, 7, 8])
->orderByRaw('created_at DESC')
->paginate($limit);
} else if ($type == 1) {
$list = WxNotice::where('user_id', $uid)
->whereIn('notice_type', [101,2, 3, 5])
->orderByRaw('created_at DESC')
->paginate($limit);
} else if ($type == 2) {
$list = WxNotice::where('user_id', $uid)
->whereIn('notice_type', [102,4, 6])
->orderByRaw('created_at DESC')
->paginate($limit);
}
$list->map(function ($v)use($type) {
$v->icon = Settings::get('app_notice_type_icon_'.$v->icon_type, '');
if(_empty_($v->icon) && $v->icon_type != 1000){
$v->icon = Settings::get('app_notice_type_icon_1000', '');
}
return $v;
});
return $this->success($list);
}
/**
* 已读对应类通知
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function readMessages(Request $request)
{
$uid = $request->uid;
$type = $request->type;
if ($type == 0) {
$notice = WxNotice::where('user_id', $uid)
->whereIn('notice_type', [100, 0, 1, 7, 8])
->update(['is_read' => 1]);
return $this->success($notice);
} else if ($type == 1) {
$notice = WxNotice::where('user_id', $uid)
->whereIn('notice_type', [101, 2, 3, 5])
->update(['is_read' => 1]);
return $this->success($notice);
} else if ($type == 2) {
$notice = WxNotice::where('user_id', $uid)
->whereIn('notice_type', [102, 4, 6])
->update(['is_read' => 1]);
return $this->success($notice);
}
}
/**
* 查询用户聊天记录列表
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function getUserChatList(Request $request)
{
$uid = $request->uid;
if($uid && $uid > 0){
$data = WxChat::where([['user_id','=', $uid],['chat_state','=', 0]])
->orWhere([['object_id','=', $uid],['chat_state','=', 0]])
->where('expand_type','!=',9)
->orderBy('id', 'desc')->get();
// 二维数组去重
$res = array();
$data->map(function ($chat) use (&$res, $uid){
if($chat['object_id'] == $uid){
$relative_user_id = $chat['user_id'];
}else{
$relative_user_id = $chat['object_id'];
}
if(!isset($res[$relative_user_id])){
if($chat['chat_audio_url'] && $chat['chat_audio_length'] > 0){
$chat_content = '语音消息';
}else if($chat['chat_image']){
$chat_content = '图片消息';
}else if(_array_key($chat, 'refer_id', 0) > 0){
$chat_content = '转发笔记';
if($chat->expand_type != 1 || $chat->expand_id != $chat->refer_id){
ChatExpandTypeCheckJob::dispatch();
}
}else if(_array_key($chat, 'contact_apply_id', 0) > 0){
$chat_content = '联系信息申请';
if($chat->expand_type != 2 || $chat->expand_id != $chat->contact_apply_id){
ChatExpandTypeCheckJob::dispatch();
}
}else if(_array_key($chat, 'adoption_apply_id', 0) > 0){
$chat_content = '领养申请';
if($chat->expand_type != 3 || $chat->expand_id != $chat->adoption_apply_id){
ChatExpandTypeCheckJob::dispatch();
}
}else{
if($chat['expand_type'] > 0){
if($chat['expand_type'] == 1){
$chat_content = '转发笔记';
$chat['refer_id'] = $chat['expand_id'];
}else if($chat['expand_type'] == 2){
$chat_content = '联系信息申请';
$chat['contact_apply_id'] = $chat['expand_id'];
}else if($chat['expand_type'] == 3){
$chat_content = '领养申请';
$chat['adoption_apply_id'] = $chat['expand_id'];
}else if($chat['expand_type'] == 4){
$chat_content = '商品卡片';
$chat['shop_good_id'] = $chat['expand_id'];
}else if($chat['expand_type'] == 5){
$chat_content = '闲置商品';
$chat['used_good_id'] = $chat['expand_id'];
}else if($chat['expand_type'] == 8){
$chat_content = '选票活动';
$chat['voter_id'] = $chat['expand_id'];
}else if($chat['expand_type'] == 101){
$chat_content = '笔记审核推送';
}else if($chat['expand_type'] == 102){
$chat_content = '评论审核推送';
}else if($chat['expand_type'] == 103){
$chat_content = '组局审核推送';
}else if($chat['expand_type'] == 104){
$chat_content = '选票审核推送';
}else if($chat['expand_type'] == 105){
$chat_content = '选手审核推送';
}else if($chat['expand_type'] == 106){
$chat_content = '闲置审核推送';
}else if($chat['expand_type'] == 107){
$chat_content = env('circle_call', '圈子').'审核推送';
}else if($chat['expand_type'] == 108){
$chat_content = '学生认证审核推送';
}else if($chat['expand_type'] == 109){
$chat_content = '身份认证审核推送';
}else if($chat['expand_type'] == 110){
$chat_content = '俱乐部审核推送';
}else{
return $this->fail(200006, [], '数据库expand_type不合法');
}
}else {
$chat_content = $chat['chat_content'];
}
}
$assistant_user = (int)Settings::get('app_notice_assistant_user', 0);
//print_r($relative_user_id);exit;
$is_mobile = WxUser::where('id', $relative_user_id)->first(['is_member','is_online_status']);
//print_r($user_mobile_info);exit;
//print_r($is_mobile);exit;
$is_online = 0;
if (!empty($is_mobile->is_member) && $is_mobile->is_member == 1) {
if ($is_mobile['is_online_status'] == 1) {
$is_online = 1;
} else {
$is_online = 0;
}
} else {
$is_online = 0;
}
//print_r($is_online);exit;
if(_empty_($assistant_user) || $assistant_user < 0){
if ($is_online == 0) {
$chat_content = (UserUtils::is_user_online($relative_user_id) ? '[在线] ' : '[离线] ') . $chat_content;
}
}else{
if($relative_user_id == $assistant_user){
}else{
if ($is_online == 0) {
$chat_content = (UserUtils::is_user_online($relative_user_id) ? '[在线] ' : '[离线] ') . $chat_content;
}
}
}
$obj = [
'user' => WxUser::where('id', $relative_user_id)->first(FieldUtils::userInfoColums()),
'datetime' => format_datetime($chat['created_at']),
'chat_content' => _mini_emoji($chat_content, true),
'read_count' => ($chat['is_read'] == 0 && $chat['object_id'] == $uid) ? 1 : 0,
];
$res[$relative_user_id] = $obj;
}else{
if($chat['is_read'] == 0 && $chat['object_id'] == $uid){
$res[$relative_user_id]['read_count'] += 1;
}
}
});
return $this->success(array_values($res));
}else{
return $this->success([]);
}
}
/**
* 查询用户是否有未读信息
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function getSysMessageCount(Request $request)
{
$count = 0;
$uid = $request->uid;
if ($uid) {
$noticeCount = WxNotice::where([['user_id','=', $uid], ['is_read','=', 0]])->count();
$chatCount = WxChat::where([['object_id','=', $uid],['is_read','=', 0],['chat_state', '=', 0]])->where('expand_type','!=',9)->count();
$circleCount = UserUtils::user_circle_unread_count($uid);
$count = $noticeCount + $chatCount + $circleCount;
}
return $this->success($count);
}
/**
* 查询用户是否有未读付费咨询信息
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function getAskMessageCount(Request $request){
$count = 0;
$uid = $request->uid;
if ($uid) {
$count = WxChat::where([['object_id','=', $uid],['is_read','=', 0],['chat_state', '=', 0]])->where('expand_type',9)->count();
}
//作为答主,没回复的订单数量
$count_order = DB::table('ask_order')->where('blogger_user_id',$uid)->where('status',10)->count();
//最终数量
$count += $count_order;
return $this->success($count);
}
}