web_chat.model.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. <?php
  2. /**
  3. * chat
  4. *
  5. *
  6. *
  7. *
  8. */
  9. defined('InShopNC') or exit('Access Invalid!');
  10. class web_chatModel extends Model{
  11. /**
  12. * get chat msg
  13. *
  14. * @param
  15. * @return array
  16. */
  17. public function getMsgList($condition = array(),$page = 10) {
  18. $result = $this->table('chat_msg')->where($condition)->page($page)->order('m_id')->select();
  19. return $result;
  20. }
  21. /**
  22. * add chat msg
  23. *
  24. * @param
  25. * @return array
  26. */
  27. public function addMsg($msg) {
  28. $msg['f_ip'] = getIp();
  29. $msg['r_state'] = '2';//state:1--read ,2--unread
  30. $msg['add_time'] = time();
  31. $m_id = $this->table('chat_msg')->insert($msg);
  32. if ($m_id > 0) {
  33. $msg['m_id'] = $m_id;
  34. unset($msg['r_state']);
  35. $this->table('chat_log')->insert($msg);
  36. $msg['m_id'] = $m_id;
  37. $msg['add_time'] = date('Y-m-d H:i:s',$msg['add_time']);
  38. $t_msg = $msg['t_msg'];
  39. $goods_id = 0;
  40. $goods_info = array();
  41. $pattern = '#'.SHOP_SITE_URL.'/index.php\?act=goods&amp;op=index&amp;goods_id=(\d+)$#';
  42. preg_match($pattern, $t_msg, $matches);
  43. if (intval($matches[1]) < 1) {//伪静态
  44. $pattern = '#'.SHOP_SITE_URL.'/item-(\d+)\.html$#';
  45. preg_match($pattern, $t_msg, $matches);
  46. }
  47. $goods_id = intval($matches[1]);
  48. if ($goods_id >= 1) {
  49. $goods_info = $this->getGoodsInfo($goods_id);
  50. $goods_id = intval($goods_info['goods_id']);
  51. }
  52. $msg['goods_id'] = $goods_id;
  53. $msg['goods_info'] = $goods_info;
  54. return $msg;
  55. } else {
  56. return 0;
  57. }
  58. }
  59. /**
  60. * member info
  61. *
  62. * @param
  63. * @return array
  64. */
  65. public function getMember($member_id) {
  66. if (intval($member_id) < 1) {
  67. return false;
  68. }
  69. $member = $this->getMemberInfo(array('member_id'=> $member_id));
  70. return $member;
  71. }
  72. /**
  73. * update chat msg
  74. *
  75. * @param
  76. * @return bool
  77. */
  78. public function updateMsg($condition,$data) {
  79. $m_id = $condition['m_id'];
  80. if (intval($m_id) < 1) {
  81. return false;
  82. }
  83. if (is_array($data)) {
  84. $result = $this->table('chat_msg')->where($condition)->update($data);
  85. return $result;
  86. } else {
  87. return false;
  88. }
  89. }
  90. /**
  91. * get chat log
  92. *
  93. * @param
  94. * @return array
  95. */
  96. public function getLogList($condition = array(),$page = 10) {
  97. $list = $this->table('chat_log')->where($condition)->page($page)->order('m_id desc')->select();
  98. if(!empty($list) && is_array($list)) {
  99. foreach($list as $k => $v) {
  100. $v['time'] = date("Y-m-d H:i:s",$v['add_time']);
  101. $list[$k] = $v;
  102. }
  103. }
  104. return $list;
  105. }
  106. /**
  107. * get friends
  108. *
  109. * @param
  110. * @return array
  111. */
  112. public function getFriendList($condition = array(),$page = 50,$member_list = array()) {
  113. $list = $this->table('sns_friend')->where($condition)->page($page)->order('friend_addtime desc')->select();
  114. if(!empty($list) && is_array($list)) {
  115. foreach($list as $k => $v) {
  116. $member = array();
  117. $u_id = $v['friend_tomid'];
  118. $member['u_id'] = $u_id;
  119. $member['u_name'] = $v['friend_tomname'];
  120. $member['avatar'] = getMemberAvatarForID($u_id);
  121. $member['friend'] = 1;
  122. $member_list[$u_id] = $member;
  123. }
  124. }
  125. return $member_list;
  126. }
  127. /**
  128. * 商家客服
  129. *
  130. * @param
  131. * @return array
  132. */
  133. public function getSellerList($condition = array(),$page = 50,$member_list = array()) {
  134. $model_seller = Model('seller');
  135. $list = $model_seller->getSellerList($condition,$page,'seller_id desc');
  136. if(!empty($list) && is_array($list)) {
  137. $member_ids = array();//会员编号数组
  138. foreach($list as $k => $v) {
  139. $member = array();
  140. $u_id = $v['member_id'];
  141. $member_ids[] = $u_id;
  142. $member['u_id'] = $u_id;
  143. $member['u_name'] = '';
  144. $member['seller_id'] = $v['seller_id'];
  145. $member['seller_name'] = $v['seller_name'];
  146. $member['avatar'] = getMemberAvatarForID($u_id);
  147. $member['seller'] = 1;
  148. $member_list[$u_id] = $member;
  149. }
  150. $model_member = Model('member');
  151. $condition = array();
  152. $condition['member_id'] = array('in', $member_ids);
  153. $m_list = $model_member->getMemberList($condition);
  154. if (!empty($m_list) && is_array($m_list)) {
  155. foreach ($m_list as $key => $value) {
  156. $u_id = $value['member_id'];//会员编号
  157. $member_list[$u_id]['u_name'] = $value['member_name'];
  158. }
  159. }
  160. }
  161. return $member_list;
  162. }
  163. /**
  164. * get recent msg
  165. *
  166. * @param
  167. * @return array
  168. */
  169. public function getRecentList($condition = array(),$limit = 5,$member_list = array()) {
  170. $list = $this->getMemberRecentList($condition, '', $limit);
  171. if(!empty($list) && is_array($list)) {
  172. foreach($list as $k => $v) {
  173. $member = array();
  174. $u_id = $v['t_id'];
  175. $member['u_id'] = $u_id;
  176. $member['u_name'] = $v['t_name'];
  177. $member['avatar'] = getMemberAvatarForID($u_id);
  178. $member['recent'] = 1;
  179. $member['time'] = date("Y-m-d H:i:s",$v['addtime']);
  180. if(empty($member_list[$u_id])) {
  181. $member_list[$u_id] = $member;
  182. } else {
  183. $member_list[$u_id]['recent'] = 1;
  184. $member_list[$u_id]['time'] = date("Y-m-d H:i:s",$v['addtime']);
  185. }
  186. }
  187. }
  188. return $member_list;
  189. }
  190. /**
  191. * get recent from msg
  192. *
  193. * @param
  194. * @return array
  195. */
  196. public function getRecentFromList($condition = array(),$limit = 5,$member_list = array()) {
  197. $list = $this->getMemberFromList($condition, '', $limit);
  198. if(!empty($list) && is_array($list)) {
  199. foreach($list as $k => $v) {
  200. $member = array();
  201. $u_id = $v['f_id'];
  202. $member['u_id'] = $u_id;
  203. $member['u_name'] = $v['f_name'];
  204. $member['avatar'] = getMemberAvatarForID($u_id);
  205. $member['recent'] = 1;
  206. $member['time'] = date("Y-m-d H:i:s",$v['addtime']);
  207. if(empty($member_list[$u_id])) {
  208. $member_list[$u_id] = $member;
  209. } else {
  210. $member_list[$u_id]['recent'] = 1;
  211. $member_list[$u_id]['time'] = date("Y-m-d H:i:s",$v['addtime']);
  212. }
  213. }
  214. }
  215. return $member_list;
  216. }
  217. /**
  218. * 收到消息的会员记录
  219. *
  220. * @param
  221. * @return array
  222. */
  223. public function getMemberRecentList($condition = array(), $page = '', $limit = '') {
  224. $list = array();
  225. $msg = $this->table('chat_msg')->field('count(DISTINCT t_id) as count')->where($condition)->find();
  226. if ($msg['count'] > 0) {
  227. $count = intval($msg['count']);
  228. $list = $this->table('chat_msg')->field('t_id,t_name,max(add_time) as addtime')->group('t_id')->where($condition)->limit($limit)->page($page, $count)->order('addtime desc')->select();
  229. }
  230. return $list;
  231. }
  232. /**
  233. * 发出消息的会员记录
  234. *
  235. * @param
  236. * @return array
  237. */
  238. public function getMemberFromList($condition = array(), $page = '', $limit = '') {
  239. $list = array();
  240. $msg = $this->table('chat_msg')->field('count(DISTINCT f_id) as count')->where($condition)->find();
  241. if ($msg['count'] > 0) {
  242. $count = intval($msg['count']);
  243. $list = $this->table('chat_msg')->field('f_id,f_name,max(add_time) as addtime')->group('f_id')->where($condition)->limit($limit)->page($page, $count)->order('addtime desc')->select();
  244. }
  245. return $list;
  246. }
  247. /**
  248. * 单个会员的消息记录
  249. *
  250. * @param
  251. * @return array
  252. */
  253. public function getLogFromList($condition = array(),$page = 10) {
  254. $list = array();
  255. $f_id = intval($condition['f_id']);
  256. if ($f_id > 0) {
  257. $t_id = intval($condition['t_id']);
  258. if ($t_id > 0) {
  259. $condition_sql = " ((f_id = '".$f_id."' and t_id = '".$t_id."') or (f_id = '".$t_id."' and t_id = '".$f_id."'))";
  260. } else {
  261. $condition_sql = " (f_id = '".$f_id."' or t_id = '".$f_id."')";
  262. }
  263. $add_time_from = trim($condition['add_time_from']);
  264. if (!empty($add_time_from)) {
  265. $add_time_from = strtotime($add_time_from);
  266. $condition_sql .= " and add_time >= '".$add_time_from."'";
  267. }
  268. $add_time_to = trim($condition['add_time_to']);
  269. if (!empty($add_time_to)) {
  270. $add_time_to = strtotime($add_time_to)+60*60*24;
  271. $condition_sql .= " and add_time <= '".$add_time_to."'";
  272. }
  273. $t_msg = trim($condition['t_msg']);
  274. if (!empty($t_msg)) {
  275. $condition_sql .= " and t_msg like '%".$t_msg."%'";
  276. }
  277. $list = $this->getLogList($condition_sql,$page);
  278. }
  279. return $list;
  280. }
  281. /**
  282. * 会员相关的信息
  283. *
  284. * @param
  285. * @return array
  286. */
  287. public function getMemberInfo($condition) {
  288. $model_member = Model('member');
  289. $member = $model_member->getMemberInfo($condition,'member_id,member_name,member_avatar');
  290. $member['store_name'] = '';
  291. $member['grade_id'] = '';
  292. $member['member_avatar'] = getMemberAvatar($member['member_avatar']);
  293. $model_seller = Model('seller');
  294. $seller = $model_seller->getSellerInfo(array('member_id'=> $member['member_id']));
  295. if (!empty($seller) && $seller['store_id'] > 0) {
  296. $store_info = $this->table('store')->field('store_id,store_name,grade_id')->where(array('store_id'=> $seller['store_id']))->find();
  297. if (is_array($store_info) && !empty($store_info)) {
  298. $member['store_id'] = $store_info['store_id'];
  299. $member['store_name'] = $store_info['store_name'];
  300. $member['seller_name'] = $seller['seller_name'];
  301. $member['grade_id'] = $store_info['grade_id'];
  302. }
  303. }
  304. return $member;
  305. }
  306. /**
  307. * 商品相关的信息
  308. *
  309. * @param
  310. * @return array
  311. */
  312. public function getGoodsInfo($goods_id) {
  313. $goods = array();
  314. $model_goods = Model('goods');
  315. $goods_id = intval($goods_id);
  316. $field = 'goods_id,store_id,goods_commonid,goods_name,goods_image,goods_price,goods_marketprice,goods_promotion_price';
  317. $goods = $model_goods->getGoodsInfoByID($goods_id,$field);
  318. if (is_array($goods) && !empty($goods)) {
  319. $goods['url'] = urlShop('goods','index',array('goods_id'=> $goods['goods_id']));
  320. $goods['pic'] = thumb($goods,60);
  321. }
  322. return $goods;
  323. }
  324. }