www.lightcourse.com/app/common/model/Message.php

380 lines
17 KiB
PHP

<?php
namespace app\common\model;
use think\facade\Db;
/**
* ============================================================================
* 联课教育商城系统
* ============================================================================
* 版权所有 2022 刻羽互动科技有限公司,并保留所有权利。
* 网站地址: http://www.o1h.cn
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
* 不允许对程序代码以任何形式任何目的的再发布。
* ============================================================================
* 数据层模型
*/
class Message extends BaseModel
{
public $page_info;
/**
* 站内信列表
* @access public
* @author o1h.cn
* @param array $condition 条件数组
* @param int $pagesize 分页页数
* @return array
*/
public function getMessageList($condition, $pagesize = '')
{
//得到条件语句
$where = $this->getCondition($condition,false);
$order = 'message_id DESC';
if($pagesize){
$message_list= Db::name('message')->where($where)->order($order)->paginate(['list_rows'=>$pagesize,'query' => request()->param()],false);
$this->page_info=$message_list;
$message=$message_list->items();
}else{
$message= Db::name('message')->where($where)->order($order)->select()->toArray();
}
return $message;
}
/**
* 站内信总数
* @access public
* @author o1h.cn
* @param array $condition 条件
* @return int
*/
public function getMessageCount($condition)
{
$where = $this->getCondition($condition,false);
return Db::name('message')->where($where)->count('message_id');
}
/**
* 获取未读信息数量
* @access public
* @author o1h.cn
* @param type $member_id 会员id
* @return int
*/
public function getNewMessageCount($member_id)
{
$special_condition = array();
$special_condition['to_member_id'] = "$member_id";
$special_condition['no_message_state'] = '2';
$special_condition['message_open_common'] = '0';
$special_condition['no_del_member_id'] = "$member_id";
$special_condition['no_read_member_id'] = "$member_id";
$countnum = $this->getMessageCount($special_condition);
return $countnum;
}
/**
* 站内信单条信息
* @access public
* @author o1h.cn
* @param array $condition 条件数组
* @param int $pagesize 分页页数
*/
public function getOneMessage($condition)
{
//得到条件语句
$where = $this->getCondition($condition);
$message_list=Db::name('message')->alias('message')->where($where)->select()->toArray();
if(!empty($message_list)){
return $message_list[0];
}else{
return null;
}
}
/**
* 站内信保存
* @access public
* @author o1h.cn
* @param type $data 参数内容
* @return boolean
*/
public function addMessage($data)
{
if ($data['member_id'] == '') {
return false;
}
$array = array();
$array['message_parent_id'] = isset($data['message_parent_id']) ? $data['message_parent_id'] : '0';
$array['from_member_id'] = isset($data['from_member_id']) ? $data['from_member_id'] : '0';
$array['from_member_name'] = isset($data['from_member_name']) ? $data['from_member_name'] : '';
$array['to_member_id'] = $data['member_id'];
$array['to_member_name'] = isset($data['to_member_name']) ? $data['to_member_name'] : '';
$array['message_body'] = trim($data['msg_content']);
$array['message_time'] = TIMESTAMP;
$array['message_update_time'] = TIMESTAMP;
$array['message_type'] = isset($data['message_type']) ? $data['message_type'] : '0';
$array['message_ismore'] = isset($data['message_ismore']) ? $data['message_ismore'] : '0';
$array['read_member_id'] = isset($data['read_member_id']) ? $data['read_member_id'] : '';
$array['del_member_id'] = isset($data['del_member_id']) ? $data['del_member_id'] : '';
return Db::name('message')->insertGetId($array);
}
/**
* 更新站内信
* @access public
* @author o1h.cn
* @param type $data 更新数据
* @param type $condition 条件
* @return boolean
*/
public function editCommonMessage($data, $condition)
{
if (empty($data)) {
return false;
}
//得到条件语句
$where = $this->getCondition($condition);
return Db::name('message')->alias('message')->where($where)->update($data);
}
/**
* 删除发送信息
* @access public
* @author o1h.cn
* @param type $condition 条件
* @param type $drop_type 删除类型
* @return boolean
*/
public function delCommonMessage($condition, $drop_type)
{
//得到条件语句
$where = $this->getCondition($condition);
//查询站内信列表
$field= 'message_id,from_member_id,to_member_id,message_state,message_open';
$message_list = Db::name('message')->alias('message')->where($where)->field($field)->select()->toArray();
unset($where);
if (empty($message_list)) {
return true;
}
$delmessage_id = array();
$updatemessage_id = array();
foreach ($message_list as $k => $v) {
if ($drop_type == 'msg_private') {
if ($v['message_state'] == 2) {
$delmessage_id[] = $v['message_id'];
}
elseif ($v['message_state'] == 0) {
$updatemessage_id[] = $v['message_id'];
}
}
elseif ($drop_type == 'msg_list') {
if ($v['message_state'] == 1) {
$delmessage_id[] = $v['message_id'];
}
elseif ($v['message_state'] == 0) {
$updatemessage_id[] = $v['message_id'];
}
}
elseif ($drop_type == 'sns_msg') {
$delmessage_id[] = $v['message_id'];
}
}
if (!empty($delmessage_id)) {
$delmessage_id_str = "'" . implode("','", $delmessage_id) . "'";
$where = $this->getCondition(array('message_id_in' => $delmessage_id_str));
Db::name('message')->where($where)->delete();
unset($where);
}
if (!empty($updatemessage_id)) {
$updatemessage_id_str = "'" . implode("','", $updatemessage_id) . "'";
$where = $this->getCondition(array('message_id_in' => $updatemessage_id_str));
if ($drop_type == 'msg_private') {
Db::name('message')->where($where)->update(array('message_state' => 1));
}
elseif ($drop_type == 'msg_list') {
Db::name('message')->where($where)->update(array('message_state' => 2));
}
}
return true;
}
/**
* 删除批量信息
* @access public
* @author o1h.cn
* @param type $condition 条件
* @param type $to_member_id 会员ID
* @return boolean
*/
public function delBatchMessage($condition, $to_member_id)
{
//得到条件语句
$where = $this->getCondition($condition);
//查询站内信列表
$message_list=Db::name('message')->alias('message')->where($where)->select()->toArray();
unset($where);
if (empty($message_list)) {
return true;
}
foreach ($message_list as $k => $v) {
$tmp_delid_str = '';
if (!empty($v['del_member_id'])) {
$tmp_delid_arr = explode(',', $v['del_member_id']);
if (!in_array($to_member_id, $tmp_delid_arr)) {
$tmp_delid_arr[] = $to_member_id;
}
foreach ($tmp_delid_arr as $delid_k => $delid_v) {
if ($delid_v == '') {
unset($tmp_delid_arr[$delid_k]);
}
}
$tmp_delid_arr = array_unique($tmp_delid_arr);//去除相同
sort($tmp_delid_arr);//排序
$tmp_delid_str = "," . implode(',', $tmp_delid_arr) . ",";
}
else {
$tmp_delid_str = ",{$to_member_id},";
}
if ($tmp_delid_str == $v['to_member_id']) {//所有用户已经全部阅读过了可以删除
Db::name('message')->where('message_id',$v['message_id'])->delete();
}
else {
Db::name('message')->where('message_id',$v['message_id'])->update(array('del_member_id' => $tmp_delid_str));
}
}
return true;
}
/**
* 获取条件
* @access public
* @author o1h.cn
* @param type $condition_array 条件数组
* @param bool $join 连接
* @return type
*/
private function getCondition($condition_array,$join=true)
{
$condition_sql = '1=1';
//站内信编号
if($join) {
if (isset($condition_array['message_id']) && $condition_array['message_id'] != '') {
$condition_sql .= " and message.message_id = '{$condition_array['message_id']}'";
}
//父站内信
if (isset($condition_array['message_parent_id']) && $condition_array['message_parent_id'] != '') {
$condition_sql .= " and message.message_parent_id = '{$condition_array['message_parent_id']}'";
}
//站内信类型
if (isset($condition_array['message_type']) && $condition_array['message_type'] != '') {
$condition_sql .= " and message.message_type = '{$condition_array['message_type']}'";
}
//站内信类型
if (isset($condition_array['message_type_in']) && $condition_array['message_type_in'] != '') {
$condition_sql .= " and message.message_type in (" . $condition_array['message_type_in'] . ")";
}
//站内信不显示的状态
if (isset($condition_array['no_message_state']) && $condition_array['no_message_state'] != '') {
$condition_sql .= " and message.message_state != '{$condition_array['no_message_state']}'";
}
//是否已读
if (isset($condition_array['message_open_common']) && $condition_array['message_open_common'] != '') {
$condition_sql .= " and message.message_open = '{$condition_array['message_open_common']}'";
}
//普通信件接收到的会员查询条件为
if (isset($condition_array['to_member_id_common']) && $condition_array['to_member_id_common'] != '') {
$condition_sql .= " and message.to_member_id='{$condition_array['to_member_id_common']}' ";
}
//接收到的会员查询条件为如果message_ismore为1时则to_member_id like'%memberid%',如果message_ismore为0时则to_member_id = memberid
if (isset($condition_array['to_member_id']) && $condition_array['to_member_id'] != '') {
$condition_sql .= " and (message.to_member_id ='all' or (message.message_ismore=0 and message.to_member_id='{$condition_array['to_member_id']}') or (message.message_ismore=1 and message.to_member_id like '%,{$condition_array['to_member_id']},%'))";
}
//发信人
if (isset($condition_array['from_member_id']) && $condition_array['from_member_id'] != '') {
$condition_sql .= " and message.from_member_id='{$condition_array['from_member_id']}' ";
}
if (isset($condition_array['from_to_member_id']) && $condition_array['from_to_member_id'] != '') {
$condition_sql .= " and (message.from_member_id='{$condition_array['from_to_member_id']}' or message.to_member_id ='all' or (message.message_ismore=0 and message.to_member_id='{$condition_array['from_to_member_id']}') or (message.message_ismore=1 and message.to_member_id like '%,{$condition_array['from_to_member_id']},%'))";
}
//未删除
if (isset($condition_array['no_del_member_id']) && $condition_array['no_del_member_id'] != '') {
$condition_sql .= " and message.del_member_id not like '%,{$condition_array['no_del_member_id']},%' ";
}
//未读
if (isset($condition_array['no_read_member_id']) && $condition_array['no_read_member_id'] != '') {
$condition_sql .= " and message.read_member_id not like '%,{$condition_array['no_read_member_id']},%' ";
}
//站内信编号in
if (isset($condition_array['message_id_in'])) {
if ($condition_array['message_id_in'] == '') {
$condition_sql .= " and message_id in('')";
}
else {
$condition_sql .= " and message_id in({$condition_array['message_id_in']})";
}
}
}else{
if (isset($condition_array['message_id']) && $condition_array['message_id'] != '') {
$condition_sql .= " and message_id = '{$condition_array['message_id']}'";
}
//父站内信
if (isset($condition_array['message_parent_id']) && $condition_array['message_parent_id'] != '') {
$condition_sql .= " and message_parent_id = '{$condition_array['message_parent_id']}'";
}
//站内信类型
if (isset($condition_array['message_type']) && $condition_array['message_type'] != '') {
$condition_sql .= " and message_type = '{$condition_array['message_type']}'";
}
//站内信类型
if (isset($condition_array['message_type_in']) && $condition_array['message_type_in'] != '') {
$condition_sql .= " and message_type in (" . $condition_array['message_type_in'] . ")";
}
//站内信不显示的状态
if (isset($condition_array['no_message_state']) && $condition_array['no_message_state'] != '') {
$condition_sql .= " and message_state != '{$condition_array['no_message_state']}'";
}
//是否已读
if (isset($condition_array['message_open_common']) && $condition_array['message_open_common'] != '') {
$condition_sql .= " and message_open = '{$condition_array['message_open_common']}'";
}
//普通信件接收到的会员查询条件为
if (isset($condition_array['to_member_id_common']) && $condition_array['to_member_id_common'] != '') {
$condition_sql .= " and to_member_id='{$condition_array['to_member_id_common']}' ";
}
//接收到的会员查询条件为如果message_ismore为1时则to_member_id like'%memberid%',如果message_ismore为0时则to_member_id = memberid
if (isset($condition_array['to_member_id']) && $condition_array['to_member_id'] != '') {
$condition_sql .= " and (to_member_id ='all' or (message_ismore=0 and to_member_id='{$condition_array['to_member_id']}') or (message_ismore=1 and to_member_id like '%,{$condition_array['to_member_id']},%'))";
}
//发信人
if (isset($condition_array['from_member_id']) && $condition_array['from_member_id'] != '') {
$condition_sql .= " and from_member_id='{$condition_array['from_member_id']}' ";
}
if (isset($condition_array['from_to_member_id']) && $condition_array['from_to_member_id'] != '') {
$condition_sql .= " and (from_member_id='{$condition_array['from_to_member_id']}' or (message_ismore=0 and to_member_id='{$condition_array['from_to_member_id']}') or (message_ismore=1 and to_member_id like '%,{$condition_array['from_to_member_id']},%'))";
}
//未删除
if (isset($condition_array['no_del_member_id']) && $condition_array['no_del_member_id'] != '') {
$condition_sql .= " and del_member_id not like '%,{$condition_array['no_del_member_id']},%' ";
}
//未读
if (isset($condition_array['no_read_member_id']) && $condition_array['no_read_member_id'] != '') {
$condition_sql .= " and read_member_id not like '%,{$condition_array['no_read_member_id']},%' ";
}
//站内信编号in
if (isset($condition_array['message_id_in'])) {
if ($condition_array['message_id_in'] == '') {
$condition_sql .= " and message_id in('')";
}
else {
$condition_sql .= " and message_id in({$condition_array['message_id_in']})";
}
}
}
return $condition_sql;
}
}