MessageLogic.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <?php
  2. /**
  3. * MessageLogic.php UTF-8
  4. * 消息逻辑处理
  5. *
  6. * @date : 2017/11/24 18:22
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huo\logic\message;
  13. use huo\model\common\CommonModel;
  14. use huo\model\message\MemMessageModel;
  15. use huo\model\message\MessageModel;
  16. class MessageLogic extends CommonModel {
  17. /**
  18. * 消息列表
  19. *
  20. * @param array $where
  21. * @param string $page
  22. * @param string $order
  23. *
  24. * @return array
  25. */
  26. public function getList($where = [], $page = '1,10', $order = '') {
  27. $_map = [];
  28. if (!empty($where['type'])) {
  29. $_map['type'] = $where['type'];
  30. }
  31. if (!empty($where['gameid'])) {
  32. $_map['app_id'] = $where['gameid'];
  33. }
  34. $_msg_ids = [];
  35. /* 获取已读消息列表 */
  36. if (!empty($where['mem_id']) && !empty($where['readed'])) {
  37. $_mem_map['mem_id'] = $where['mem_id'];
  38. $_mem_map['readed'] = 2;
  39. $_msg_ids = MemMessageModel::where($_mem_map)->column('message_id');
  40. $_map['id'] = ['in', $_msg_ids];
  41. } elseif (!empty($where['mem_id'])) {
  42. $_map['mem_id'] = ['in', '0,', $where['mem_id']];
  43. }
  44. $_order = $this->orderFilter($order);
  45. $_messages = MessageModel::where($_map)->page($page)->order($_order)->select()->toArray();
  46. $_list = [];
  47. foreach ($_messages as $_message) {
  48. $_data = [];
  49. $_data['id'] = $_message['id'];
  50. $_data['title'] = $_message['title'];
  51. $_data['gameid'] = $_message['app_id'];
  52. $_data['type'] = $_message['type'];
  53. $_data['create_time'] = $_message['create_time'];
  54. $_data['content'] = $_message['content'];
  55. $_data['readed'] = 1;
  56. if (in_array($_message['id'], $_msg_ids)) {
  57. $_data['readed'] = 2;
  58. }
  59. $_list[] = $_data;
  60. }
  61. return $_list;
  62. }
  63. /**
  64. * 获取消息数量
  65. *
  66. * @param $where
  67. *
  68. * @return int|string
  69. */
  70. public function getCnt($where) {
  71. $_map = [];
  72. if (!empty($where['type'])) {
  73. $_map['type'] = $where['type'];
  74. }
  75. if (!empty($where['gameid'])) {
  76. $_map['app_id'] = $where['gameid'];
  77. }
  78. if (!empty($where['mem_id']) && !empty($where['readed'])) {
  79. $_map['mm.status'] = 2;
  80. $_map['mm.mem_id'] = $where['mem_id'];
  81. /* 已看过的消息数量 */
  82. return MemMessageModel::where($_map)->count();
  83. } elseif (!empty($where['mem_id'])) {
  84. $_map['mem_id'] = ['in', '0,', $where['mem_id']];
  85. }
  86. return MessageModel::where($_map)->count();
  87. }
  88. /**
  89. * 添加消息
  90. *
  91. * @param int $mem_id
  92. * @param string $title
  93. * @param string $content
  94. * @param int $type
  95. * @param int $app_id
  96. *
  97. * @return bool
  98. */
  99. public function addMessage($mem_id, $title, $content, $type = 2, $app_id = 0) {
  100. $_msg_data['mem_id'] = $mem_id;
  101. $_msg_data['app_id'] = $app_id;
  102. $_msg_data['title'] = $title;
  103. $_msg_data['content'] = $content;
  104. $_msg_data['type'] = $type;
  105. $_msg_id = MessageModel::addMessage($_msg_data);
  106. if (false === $_msg_id) {
  107. return false;
  108. }
  109. if (!empty($mem_id)) {
  110. $_mm_data['mem_id'] = $mem_id;
  111. $_mm_data['message_id'] = $_msg_id;
  112. $_mm_data['type'] = $type;
  113. $_msg_id = MemMessageModel::addMessage($_mm_data);
  114. if (false === $_msg_id) {
  115. return false;
  116. }
  117. }
  118. return true;
  119. }
  120. /**
  121. * 获取消息详情
  122. *
  123. * @param int $msg_id
  124. * @param int $mem_id
  125. * @param bool $readed
  126. *
  127. * @return int
  128. */
  129. public function getDetail($msg_id = 0, $mem_id = 0, $readed = true) {
  130. if (empty($msg_id)) {
  131. return 2000;
  132. }
  133. $_message = MessageModel::get($msg_id);
  134. if (empty($_message)) {
  135. return 2000;
  136. }
  137. $_data['id'] = $_message->getAttr('id');
  138. $_data['title'] = $_message->getAttr('title');
  139. $_data['gameid'] = $_message->getAttr('app_id');
  140. $_data['type'] = $_message->getAttr('type');
  141. $_data['create_time'] = $_message->getAttr('create_time');
  142. $_data['content'] = $_message->getAttr('content');
  143. $_data['readed'] = 1;
  144. if (empty($mem_id) || false == $readed) {
  145. return $_data;
  146. }
  147. if (!empty($mem_id) && $readed) {
  148. $_map['mem_id'] = $mem_id;
  149. $_map['message_id'] = $msg_id;
  150. $_mem_message = MemMessageModel::get($_map);
  151. if (empty($_mem_message)) {
  152. $_mm_data['mem_id'] = $mem_id;
  153. $_mm_data['message_id'] = $msg_id;
  154. $_mm_data['type'] = $_message['type'];
  155. $_mm_data['status'] = 2;
  156. MemMessageModel::addMessage($_mm_data);
  157. } else if (1 == $_mem_message->getAttr('status')) {
  158. $_mem_message->setAttr('status', 2);
  159. $_mem_message->isUpdate(true)->save();
  160. }
  161. $_data['readed'] = 2;
  162. }
  163. return $_data;
  164. }
  165. public function adminList($where = [], $page = '1,10') {
  166. $_map = [];
  167. if (!empty($where['type'])) {
  168. $_map['type'] = $where['type'];
  169. }
  170. if (!empty($where['app_id'])) {
  171. $_map['app_id'] = $where['app_id'];
  172. }
  173. if (!empty($where['title'])) {
  174. $_map['title'] = ['like', "%{$where['title']}%"];
  175. }
  176. $_model = new MessageModel();
  177. $_count = $_model->where($_map)->count();
  178. if (empty($_count)) {
  179. return [
  180. 'count' => $_count,
  181. 'list' => [],
  182. ];
  183. }
  184. $_messages = $_model->with('mem,game')->where($_map)->page($page)->select();
  185. if ($_messages->isEmpty()) {
  186. return [
  187. 'count' => $_count,
  188. 'list' => [],
  189. ];
  190. }
  191. return [
  192. 'count' => $_count,
  193. 'list' => $_messages->toArray(),
  194. ];
  195. }
  196. public function adminDetail($msg_id) {
  197. return (new MessageModel())->with('mem,game')->where(['id' => $msg_id])->find();
  198. }
  199. public function updateData($data, $id) {
  200. return MessageModel::updateMessage($data, $id);
  201. }
  202. }