274 lines
9.3 KiB
PHP
274 lines
9.3 KiB
PHP
<?php
|
||
/**
|
||
* tpshop
|
||
* ============================================================================
|
||
* 版权所有 2015-2027 深圳搜豹网络科技有限公司,并保留所有权利。
|
||
* 网站地址: http://www.tp-shop.cn
|
||
* ----------------------------------------------------------------------------
|
||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
|
||
* 不允许对程序代码以任何形式任何目的的再发布。
|
||
* 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
|
||
* ============================================================================
|
||
* Author: yhj
|
||
* Date: 2018-6-27
|
||
*/
|
||
|
||
namespace app\common\logic;
|
||
|
||
use app\common\model\UserMessage;
|
||
use think\Db;
|
||
|
||
/**
|
||
* 消息类
|
||
* Class CatsLogic
|
||
* @package app\common\logic
|
||
*/
|
||
class Message
|
||
{
|
||
protected $userId;
|
||
protected $user;
|
||
|
||
/**
|
||
* Message constructor.
|
||
* @param int $userId
|
||
*/
|
||
public function __construct($userId = 0)
|
||
{
|
||
|
||
if(empty($userId)){
|
||
$user_info = session('user');
|
||
$this->userId = $user_info['user_id'];
|
||
}else{
|
||
$this->userId = $userId;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取用户未查看的消息个数 pc和手机用
|
||
* @return array
|
||
*/
|
||
public function getUserMessageCount(){
|
||
$where = array(
|
||
'user_id' => $this->userId,
|
||
'is_see' => 0,
|
||
'deleted' => 0,
|
||
'category' => 0
|
||
);
|
||
// 通知消息未查看数
|
||
$data['message_notice_no_read'] = db("user_message")->where($where)->count();
|
||
// 活动消息未查看数
|
||
$where['category'] = 1;
|
||
$data['message_activity_no_read'] = db("user_message")->where($where)->count();
|
||
// 物流消息未查看数
|
||
$where['category'] = 2;
|
||
$data['message_logistics_no_read'] = db("user_message")->where($where)->count();
|
||
// 私信未查看数
|
||
$where['category'] = 3;
|
||
$data['message_private_no_read'] = db("user_message")->where($where)->count();
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 未查看的消息总数 pc和手机用
|
||
* @return int|string
|
||
*/
|
||
public function getUserMessageNoReadCount(){
|
||
$this->checkPublicMessage();
|
||
$where = array(
|
||
'user_id' => $this->userId,
|
||
'is_see' => 0,
|
||
'deleted' => 0
|
||
);
|
||
$message_no_read = db("user_message")->where($where)->count();
|
||
return $message_no_read;
|
||
}
|
||
|
||
/**
|
||
* 按发送时间排序
|
||
* @param $rec_id | $rec_id = db("user_message")->where($where)->column('rec_id');
|
||
* @param $type | 消息类型
|
||
* @return array
|
||
*/
|
||
public function sortMessageListBySendTime($rec_id,$type)
|
||
{
|
||
if (empty($rec_id)) return [];
|
||
switch ($type){
|
||
case 0:
|
||
$name = 'MessageNotice';
|
||
break;
|
||
case 1:
|
||
$name = 'MessageActivity';
|
||
break;
|
||
case 2:
|
||
$name = 'MessageLogistics';
|
||
break;
|
||
default :
|
||
$name = 'MessageLogistics';
|
||
break;
|
||
}
|
||
$userMessage = new UserMessage();
|
||
$list = $userMessage->with($name)->select($rec_id);
|
||
$data = [];
|
||
foreach ($list as $user){
|
||
$data[] = $user->appendRelationAttr($name,['send_time','send_time_text','finished', 'order_text','mobile_url','home_url','start_time'])->toArray();
|
||
}
|
||
$data = array_sort($data,'send_time');
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 获取用户通知消息详情 pc和手机用
|
||
* @param $rec_id | UserMessage.rec_id
|
||
* @param $type | 消息类型
|
||
* @return array|false|\PDOStatement|string|\think\Model
|
||
*/
|
||
public function getMessageDetails($rec_id, $type){
|
||
$where = ['rec_id'=>$rec_id];
|
||
$userMessage = new UserMessage();
|
||
$data = $userMessage->where($where)->find();
|
||
if ($data && $data['is_see'] == 0) {
|
||
$this->setMessageForRead($data['rec_id']);
|
||
}
|
||
switch ($type){
|
||
case 0:
|
||
$name = 'MessageNotice';
|
||
$category_name = '通知消息';
|
||
break;
|
||
case 1:
|
||
$name = 'MessageActivity';
|
||
$category_name = '活动消息';
|
||
break;
|
||
case 2:
|
||
$name = 'MessageLogistics';
|
||
$category_name = '物流消息';
|
||
break;
|
||
default :
|
||
$name = 'MessageLogistics';
|
||
$category_name = '物流消息';
|
||
break;
|
||
}
|
||
$data['message_title'] = $data->$name->message_title;
|
||
$data['send_time_text'] = $data->$name->send_time_text;
|
||
$data['message_content'] = htmlspecialchars_decode($data->$name->message_content);
|
||
$data['category_name'] = $category_name;
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 查询系统全体消息,如有将其插入用户信息表
|
||
* pc和移动用
|
||
*/
|
||
public function checkPublicMessage()
|
||
{
|
||
$user_info = session('user');
|
||
$this->checkUserMessage($user_info['user_id']);
|
||
}
|
||
|
||
|
||
/**
|
||
* 查询系统全体消息,如有将其插入用户信息表,也用于api接口
|
||
* @param $user_id
|
||
*/
|
||
public function checkUserMessage($user_id)
|
||
{
|
||
static $fun = false;
|
||
if ($fun) return; // 防止重复调用
|
||
$fun = true;
|
||
$user_info = Db::name('users')->where('user_id', $user_id)->find();
|
||
if ($user_info) {
|
||
// 通知
|
||
$user_message = Db::name('user_message')->where(array('user_id' => $user_info['user_id'], 'category' => 0))->select();
|
||
$message_where = array(
|
||
'message_type' => 1,
|
||
'send_time' => array('gt', $user_info['reg_time']),
|
||
);
|
||
if (!empty($user_message)) {
|
||
$user_id_array = get_arr_column($user_message, 'message_id');
|
||
$message_where['message_id'] = array('NOT IN', $user_id_array);
|
||
}
|
||
$message_notice_no_read = Db::name('message_notice')->field('message_id')->order('send_time ASC')->where($message_where)->select();
|
||
foreach ($message_notice_no_read as $key) {
|
||
DB::name('user_message')->insert(['user_id' => $user_info['user_id'], 'message_id' => $key['message_id'], 'category' => 0]);
|
||
}
|
||
|
||
// 活动
|
||
$user_message = Db::name('user_message')->where(array('user_id' => $user_info['user_id'], 'category' => 1))->select();
|
||
$message_where = array(
|
||
//'send_time' => array('gt', $user_info['reg_time']),
|
||
'end_time' => array('gt', time()) // 只要活动没有结束
|
||
);
|
||
if (!empty($user_message)) {
|
||
$user_id_array = get_arr_column($user_message, 'message_id');
|
||
$message_where['message_id'] = array('NOT IN', $user_id_array);
|
||
}
|
||
$message_activity_no_read = Db::name('message_activity')->field('message_id')->order('send_time ASC')->where($message_where)->select();
|
||
foreach ($message_activity_no_read as $key) {
|
||
DB::name('user_message')->insert(['user_id' => $user_info['user_id'], 'message_id' => $key['message_id'], 'category' => 1]);
|
||
}
|
||
|
||
// 优惠券过期消息
|
||
$messageFactory = new MessageFactory();
|
||
$messageLogic = $messageFactory->makeModule(['category' => 0]);
|
||
$messageLogic->couponWillExpire($user_id);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/**
|
||
* 设置用户消息已读
|
||
* @param $rec_id |数组多条|指定某个|空的则全部
|
||
* @return array
|
||
*/
|
||
public function setMessageForRead($rec_id)
|
||
{
|
||
if (!empty($this->userId)) {
|
||
$data['is_see'] = 1;
|
||
$set_where['user_id'] = $this->userId;
|
||
|
||
if (strpos($rec_id, ',')) {
|
||
$rec_id = explode(',', $rec_id);
|
||
$set_where['rec_id'] = ['in',$rec_id];
|
||
} elseif (!empty($rec_id)) {
|
||
$set_where['rec_id'] = $rec_id;
|
||
}
|
||
$result = db('user_message')->where($set_where)->update($data);
|
||
if ($result) {
|
||
return ['status'=>1,'msg'=>'操作成功'];
|
||
}
|
||
}
|
||
return ['status'=>-1,'msg'=>'操做失败'];
|
||
}
|
||
|
||
/**
|
||
* 删除消息
|
||
* @param $rec_id |数组多条|指定某个|空的则全部
|
||
* @param $type |0通知|1活动|2物流
|
||
* @return array
|
||
*/
|
||
public function deletedMessage($rec_id, $type)
|
||
{
|
||
if (!empty($this->userId)) {
|
||
$data['deleted'] = 1;
|
||
$set_where['user_id'] = $this->userId;
|
||
if (strpos($rec_id, ',')) {
|
||
$rec_id = explode(',', $rec_id);
|
||
$set_where['rec_id'] = ['in',$rec_id];
|
||
} elseif (!empty($rec_id)) {
|
||
$set_where['rec_id'] = $rec_id;
|
||
} else{
|
||
if (empty($rec_id)) {
|
||
// 手机端清空消息
|
||
$set_where['category'] = $type;
|
||
}
|
||
}
|
||
$result = db('user_message')->where($set_where)->update($data);
|
||
if ($result) {
|
||
return ['status'=>1,'msg'=>'操作成功'];
|
||
}
|
||
}
|
||
return ['status'=>-1,'msg'=>'操做失败'];
|
||
}
|
||
|
||
} |