Message.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?php
  2. namespace app\index\model;
  3. use\think\Model;
  4. use think\Session;
  5. use think\cache\driver\Redis;
  6. use think\Loader;
  7. use think\Cache;
  8. use think\DB;
  9. class Message extends Model
  10. {
  11. /**
  12. * 消息接收
  13. */
  14. public function getMessage()
  15. {
  16. $code = -2;
  17. // 接收参数.
  18. $systemKey = input('post.systemKey');
  19. $title = input('post.title');
  20. $content = htmlspecialchars(input('post.content'));
  21. $messageVerify = input('post.messageVerify');
  22. if(empty($systemKey)){
  23. return [
  24. 'code' => $code,
  25. 'msg' => lang('EP01008'),
  26. 'data' => [],
  27. ];
  28. }
  29. if(empty($title)){
  30. return [
  31. 'code' => $code,
  32. 'msg' => lang('EP01010'),
  33. 'data' => [],
  34. ];
  35. }
  36. if(empty($content)){
  37. return [
  38. 'code' => $code,
  39. 'msg' => lang('EP01011'),
  40. 'data' => [],
  41. ];
  42. }
  43. if(empty($messageVerify)){
  44. return [
  45. 'code' => $code,
  46. 'msg' => lang('EP01012'),
  47. 'data' => [],
  48. ];
  49. }
  50. $getData = [
  51. 'platform_code' => $systemKey,
  52. 'messageVerify' => $messageVerify,
  53. ];
  54. // 验证传参.
  55. $validate = Loader::validate('Message');
  56. if (!$validate->scene('getMessage')->check($getData)) {
  57. return [
  58. 'code' => $code,
  59. 'msg' => $validate->getError(),
  60. 'data' => [],
  61. ];
  62. }
  63. // 验证token.
  64. $MessageVerifyWhere['message_verify'] = $messageVerify;
  65. $messageVerify = model('MessageVerify')->selectMessageVerify($MessageVerifyWhere);
  66. $messageVerify = $messageVerify['data'];
  67. $nowTime = strtotime(date('Y-m-d H:i:s').'-10 min');
  68. if (!$messageVerify || $messageVerify['message_verify_time'] < $nowTime) {
  69. return [
  70. 'code' => $code,
  71. 'msg' => lang('EP01003'),
  72. 'data' => [],
  73. ];
  74. }
  75. // 删除该验证缓存.
  76. model('MessageVerify')->delMessageVerify($MessageVerifyWhere);
  77. // 查询平台信息.
  78. $platformWhere = [
  79. 'platform_code' => $systemKey,
  80. 'platform_status' => 1,
  81. ];
  82. $platform = model('Platform')
  83. ->field(['platform_id', 'platform_identity'])
  84. ->where($platformWhere)
  85. ->find();
  86. // 查询平台订阅用户.
  87. $userPlatformWhere = [
  88. 'platform_id' => $platform['platform_id'],
  89. 'user_status' => 1,
  90. ];
  91. $userPlatform = model('UserPlatform')
  92. ->field(['a.user_identity'])
  93. ->alias('a')
  94. ->join('user b', 'a.user_identity = b.user_identity')
  95. ->where($userPlatformWhere)
  96. ->select();
  97. $userPlatform = array_unique($userPlatform, SORT_REGULAR);
  98. DB::startTrans();
  99. // 消息入库.
  100. $messageIdentity = UUID();
  101. $addMessageData = [
  102. 'message_title' => $title,
  103. 'message_content' => $content,
  104. 'message_identity' => $messageIdentity,
  105. 'message_time' => time(),
  106. 'message_ip' => $_SERVER['REMOTE_ADDR'],
  107. 'platform_identity' => $platform['platform_identity'],
  108. ];
  109. $addMessage = $this->insert($addMessageData);
  110. // 消息订阅入库.
  111. $addError = false;
  112. foreach ($userPlatform as $v) {
  113. $addUsrMsgData = [
  114. 'message_identity' => $messageIdentity,
  115. 'user_identity' => $v['user_identity'],
  116. ];
  117. $addUserMessage = model('MessageUser')->insert($addUsrMsgData);
  118. if (empty($addUserMessage) === true) {
  119. $addError = true;
  120. }
  121. }
  122. if ($addError === false && empty($addMessage) === false) {
  123. DB::commit();
  124. return [
  125. 'code' => 1,
  126. 'msg' => lang('MC01006'),
  127. 'data' => [],
  128. ];
  129. } else {
  130. DB::rollback();
  131. return [
  132. 'code' => $code,
  133. 'msg' => lang('EC01004'),
  134. 'data' => [],
  135. ];
  136. }
  137. }//end getMessage()
  138. /**
  139. * 消息发送
  140. */
  141. public function sendMessage()
  142. {
  143. $userToken = input('get.userToken');
  144. // 获取用户信息.
  145. $getUserInfo = model('user')->currentUser($userToken);
  146. $getUserInfo = $getUserInfo['data'];
  147. // 消息取出.
  148. $where['user_identity'] = $getUserInfo['userId'];
  149. $getMessage = model('MessageUser')
  150. ->field(['b.message_id', 'message_title', 'message_content', 'message_time'])
  151. ->alias('a')
  152. ->join('message b', 'a.message_identity = b.message_identity')
  153. ->join('platform c', 'b.platform_identity = c.platform_identity', 'left')
  154. ->where($where)
  155. ->select();
  156. // 消息删除.
  157. //model('MessageUser')->where($where)->delete();
  158. return [
  159. 'code' => 1,
  160. 'msg' => lang('MC01005'),
  161. 'data' => $getMessage,
  162. ];
  163. }//end sendMessage()
  164. /**
  165. * 获取消息发送验证
  166. */
  167. public function sendMsgVerify()
  168. {
  169. $code = -2;
  170. // 接收参数.
  171. $platformCode = input('get.platformCode');
  172. if(empty($platformCode)){
  173. return [
  174. 'code' => $code,
  175. 'msg' => lang('EP01008'),
  176. 'data' => [],
  177. ];
  178. }
  179. $getData = ['platform_code' => $platformCode];
  180. // 验证传参.
  181. $validate = Loader::validate('Message');
  182. if (!$validate->scene('getMessage')->check($getData)) {
  183. return [
  184. 'code' => $code,
  185. 'msg' => $validate->getError(),
  186. 'data' => [],
  187. ];
  188. }
  189. // 查询平台信息.
  190. $platformWhere = [
  191. 'platform_code' => $platformCode,
  192. 'platform_status' => 1,
  193. ];
  194. $platform = model('Platform')
  195. ->field(['platform_id'])
  196. ->where($platformWhere)
  197. ->find();
  198. if (empty($platform) === true) {
  199. return [
  200. 'code' => $code,
  201. 'msg' => lang('EC01002'),
  202. 'data' => [],
  203. ];
  204. }
  205. // 生成验证.
  206. $messageVerify = randomPassword();
  207. $verifyData = [
  208. 'message_verify_time' => time(),
  209. 'message_verify' => $messageVerify,
  210. ];
  211. $addMessageVerify = model('MessageVerify')->addMessageVerify($verifyData);
  212. return [
  213. 'code' => 1,
  214. 'msg' => lang('MC01005'),
  215. 'data' => ['messageVerify' => $messageVerify],
  216. ];
  217. }//end sendMsgVerify()
  218. }