Message.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: lts
  5. * Date: 19/9/18
  6. * Time: 下午7:30
  7. */
  8. namespace app\common\constants;
  9. use think\Config;
  10. class Message
  11. {
  12. //region 消息中链接的类型
  13. #0=书籍,1=活动,2=继续阅读,3=菜单,4=其他'
  14. /**
  15. * 书籍
  16. */
  17. const MESSAGE_LINK_TYPE_BOOK = 0;
  18. /**
  19. * 活动
  20. */
  21. const MESSAGE_LINK_TYPE_ACTIVITY = 1;
  22. /**
  23. * 继续阅读
  24. */
  25. const MESSAGE_LINK_TYPE_RECENT = 2;
  26. /**
  27. * 菜单
  28. */
  29. const MESSAGE_LINK_TYPE_MENU = 3;
  30. /**
  31. * 没有url的文案
  32. */
  33. const MESSAGE_LINK_TYPE_NOURL = 4;
  34. /**
  35. * 其他
  36. */
  37. const MESSAGE_LINK_TYPE_OTHER = 5;
  38. /**
  39. * 自定义链接
  40. */
  41. const MESSAGE_LINK_TYPE_URL = 6;
  42. /**
  43. * 自定义活动
  44. */
  45. const MESSAGE_LINK_TYPE_CUSTOMIZE_ACTIVITY = 9;
  46. /**
  47. * 常用链接
  48. */
  49. const MESSAGE_LINK_TYPE_DAILY_LINK = 8;
  50. /**
  51. * 自动签到
  52. */
  53. const MESSAGE_LINK_TYPE_SIGN = 7;
  54. /**
  55. * 小程序
  56. */
  57. const MESSAGE_LINK_TYPE_MINI = 10;
  58. /**
  59. * 签到自动回复关键字
  60. */
  61. const MESSAGE_KEYWORD = '签到';
  62. const MESSAGE_LINK_TYPE_NAMES = [
  63. self::MESSAGE_LINK_TYPE_BOOK => '书籍',
  64. self::MESSAGE_LINK_TYPE_ACTIVITY => '活动',
  65. self::MESSAGE_LINK_TYPE_RECENT => '继续阅读',
  66. self::MESSAGE_LINK_TYPE_MENU => '菜单',
  67. self::MESSAGE_LINK_TYPE_NOURL => '没有url的文案',
  68. self::MESSAGE_LINK_TYPE_URL => '自定义链接',
  69. self::MESSAGE_LINK_TYPE_OTHER => '其他',
  70. self::MESSAGE_LINK_TYPE_CUSTOMIZE_ACTIVITY => '自定义活动',
  71. self::MESSAGE_LINK_TYPE_SIGN => '自动签到'
  72. ];
  73. #endregion
  74. #region 消息类型
  75. /**
  76. * 图文类型
  77. */
  78. const MESSAGE_TYPE_IMAGE_TEXT = 0;
  79. /**
  80. * 文字链类型
  81. */
  82. const MESSAGE_TYPE_LINK = 1;
  83. #endregion
  84. /**
  85. * 判断获取消息中链接的类型
  86. * @param $channelSchemeHost 渠道商的域名
  87. * @param $url
  88. * @return int
  89. */
  90. public static function getMessageLinkType($channelSchemeHost, $url)
  91. {
  92. $urlInfo = parse_url($url);
  93. $schemeHost = $urlInfo['scheme'] . '://' . $urlInfo['host'];
  94. $pathQuery = $urlInfo['path'];
  95. $pathQuery .= empty($urlInfo['query']) ? '' : '?' . $urlInfo['query'];
  96. $aQuery = explode('&', $urlInfo['query']);
  97. $referralId = 0;
  98. $bookId = 0;
  99. $type = 0;
  100. if (!empty($aQuery['referral_id'])) {
  101. $referralId = $aQuery['referral_id'];
  102. }
  103. if (!empty($aQuery['book_id'])) {
  104. $bookId = $aQuery['book_id'];
  105. }
  106. if ($channelSchemeHost != $schemeHost) {
  107. $type = self::MESSAGE_LINK_TYPE_OTHER;
  108. } elseif (!empty($bookId)) {
  109. //书籍和推广链接都归到"书籍类型"
  110. $type = self::MESSAGE_LINK_TYPE_BOOK;
  111. } elseif (strpos($pathQuery, Menu::MENU_URL_PATH_RECENT) !== false) {
  112. $type = self::MESSAGE_LINK_TYPE_RECENT;
  113. } elseif (Menu::pathQueryIsMenu($pathQuery) || !empty($referralId)) {
  114. $type = self::MESSAGE_LINK_TYPE_MENU;
  115. } elseif (strpos($pathQuery, '/s/') !== false) {
  116. $type = self::MESSAGE_LINK_TYPE_ACTIVITY;
  117. } else {
  118. $type = self::MESSAGE_LINK_TYPE_OTHER;
  119. }
  120. return [$type, $bookId, $referralId];
  121. }
  122. /**
  123. * 获取消息中链接的信息
  124. * @param $channelId 渠道商id
  125. * @param array $aMsgLinks 链接列表
  126. * @return array
  127. * 返回值属性:url type book_id referral_id book_name book_realname
  128. */
  129. public static function getMessageLinksInfo($channelId, array $aMsgLinks)
  130. {
  131. $adminConfigModel = model('AdminConfig');
  132. $configData = $adminConfigModel->getAdminInfoAll($channelId);
  133. $channelSchemeHost = Config::get('site.scheme') . '://' . $configData['appid'] .
  134. '.' . $configData['ophost_host'];
  135. $result = [];
  136. $referralIds = [];
  137. #region 初步获取连接的类型以及书籍id和推广链接id
  138. foreach ($aMsgLinks as $key => $msgLink) {
  139. list($type, $bookId, $referralId) = self::getMessageLinkType($channelSchemeHost, $msgLink);
  140. $result[$key] = [
  141. 'url' => $msgLink,
  142. 'type' => $type,
  143. 'book_id' => $bookId,
  144. 'referral_id' => $referralId,
  145. ];
  146. $referralIds[] = $referralId;
  147. }
  148. #endregion
  149. #region 通过推广链接id找到对应的书籍id
  150. $referralModel = model('Referral');
  151. $referralInfos = $referralModel->where(['id' => ['in', $referralIds]])
  152. ->field(['id', 'book_id'])->select();
  153. $refBookIds = [];
  154. foreach ($referralInfos as $referralInfo) {
  155. $refBookIds[$referralInfo['id']] = $referralInfo['book_id'];
  156. }
  157. foreach ($result as $item) {
  158. if (!empty($item['referral_id'])) {
  159. $item['book_id'] = $refBookIds[$item['referral_id']];
  160. }
  161. }
  162. #endregion
  163. #region 通过书籍id找到客显名和书籍名
  164. $bookIds = array_column($result, 'book_id');
  165. $bookModel = model('Book');
  166. $bookInfos = $bookModel->field(['id', 'name', 'realname'])->where(['id', ['in', $bookIds]]);
  167. $aBookInfos = [];
  168. foreach ($bookInfos as $bookInfo) {
  169. $aBookInfos[$bookInfo['id']] = [
  170. 'id' => $bookInfo['id'],
  171. 'name' => $bookInfo['name'],
  172. 'realname' => $bookInfo['realname']
  173. ];
  174. }
  175. foreach ($result as $item) {
  176. if (!empty($item['book_id'])) {
  177. $item['book_name'] = $aBookInfos[$item['book_id']]['name'];
  178. $item['book_realname'] = $aBookInfos[$item['book_id']]['realname'];
  179. $item['type'] = self::MESSAGE_LINK_TYPE_BOOK;
  180. }
  181. }
  182. #endregion
  183. return $result;
  184. }
  185. public static function getCustomMsgLinksInfo($channelId, array $aMsgLinks)
  186. {
  187. foreach ($aMsgLinks as $msgLink) {
  188. }
  189. }
  190. public static function getBooksInfo(array $bookIds)
  191. {
  192. if (empty($bookIds)) {
  193. return [];
  194. }
  195. #region 通过书籍id找到客显名和书籍名
  196. // $bookIds = array_column($result, 'book_id');
  197. $bookModel = model('Book');
  198. $bookInfos = $bookModel->field(['id', 'name', 'realname'])->whereIn('id', $bookIds)->select();
  199. $aBookInfos = [];
  200. foreach ($bookInfos as $bookInfo) {
  201. $aBookInfos[$bookInfo['id']] = [
  202. 'id' => $bookInfo['id'],
  203. 'name' => $bookInfo['name'],
  204. 'realname' => $bookInfo['realname']
  205. ];
  206. }
  207. return $aBookInfos;
  208. }
  209. /**
  210. * 获取最近阅读的全路径
  211. */
  212. public static function getRecentFullPath($channelId)
  213. {
  214. $recentUrl = getCurrentDomain($channelId, '/index/book/chapter');
  215. return $recentUrl;
  216. }
  217. /**
  218. * 获取继续阅读的全路径
  219. * @param int $channelId 渠道商id
  220. * @return string
  221. */
  222. public static function getKeepReadingFullPath($channelId)
  223. {
  224. $recentUrl = getCurrentDomain($channelId, Menu::MENU_URL_PATH_KEEPREADING);
  225. return $recentUrl;
  226. }
  227. }