WechatNewsCategory.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\adminapi\controller\v1\application\wechat;
  12. use app\adminapi\controller\AuthController;
  13. use crmeb\services\app\WechatService;
  14. use think\facade\App;
  15. use app\services\wechat\WechatNewsCategoryServices;
  16. use app\services\article\ArticleServices;
  17. use think\facade\Log;
  18. /**
  19. * 图文信息
  20. * Class WechatNewsCategory
  21. * @package app\admin\controller\wechat
  22. *
  23. */
  24. class WechatNewsCategory extends AuthController
  25. {
  26. /**
  27. * 构造方法
  28. * Menus constructor.
  29. * @param App $app
  30. * @param WechatNewsCategoryServices $services
  31. */
  32. public function __construct(App $app, WechatNewsCategoryServices $services)
  33. {
  34. parent::__construct($app);
  35. $this->services = $services;
  36. }
  37. /**
  38. * 图文消息列表
  39. * @return mixed
  40. */
  41. public function index()
  42. {
  43. $where = $this->request->getMore([
  44. ['page', 1],
  45. ['limit', 20],
  46. ['cate_name', '']
  47. ]);
  48. $list = $this->services->getAll($where);
  49. return app('json')->success($list);
  50. }
  51. /**
  52. * 图文详情
  53. * @param $id
  54. * @return mixed
  55. */
  56. public function read($id)
  57. {
  58. $info = $this->services->get($id);
  59. /** @var ArticleServices $services */
  60. $services = app()->make(ArticleServices::class);
  61. $new = $services->articlesList($info['new_id']);
  62. if ($new) $new = $new->toArray();
  63. $info['new'] = $new;
  64. return app('json')->success(compact('info'));
  65. }
  66. /**
  67. * 删除图文
  68. * @param $id
  69. * @return mixed
  70. */
  71. public function delete($id)
  72. {
  73. if (!$this->services->delete($id))
  74. return app('json')->fail(100008);
  75. else
  76. return app('json')->success(100002);
  77. }
  78. /**
  79. * 新增或编辑保存
  80. * @return mixed
  81. */
  82. public function save()
  83. {
  84. $data = $this->request->postMore([
  85. ['list', []],
  86. ['id', 0]
  87. ]);
  88. try {
  89. $id = [];
  90. $countList = count($data['list']);
  91. if (!$countList) return app('json')->fail(400243);
  92. /** @var ArticleServices $services */
  93. $services = app()->make(ArticleServices::class);
  94. foreach ($data['list'] as $k => $v) {
  95. if ($v['title'] == '') return app('json')->fail(400244);
  96. if ($v['author'] == '') return app('json')->fail(400245);
  97. if ($v['content'] == '') return app('json')->fail(400246);
  98. if ($v['synopsis'] == '') return app('json')->fail(400247);
  99. $v['status'] = 1;
  100. $v['add_time'] = time();
  101. if ($v['id']) {
  102. $idC = $v['id'];
  103. $services->save($v);
  104. unset($v['id']);
  105. $data['list'][$k]['id'] = $idC;
  106. $id[] = $idC;
  107. } else {
  108. $res = $services->save($v);
  109. unset($v['id']);
  110. $id[] = $res['id'];
  111. $data['list'][$k]['id'] = $res['id'];
  112. }
  113. }
  114. $countId = count($id);
  115. if ($countId != $countList) {
  116. if ($data['id']) return app('json')->fail(100007);
  117. else return app('json')->fail(100022);
  118. } else {
  119. $newsCategory['cate_name'] = $data['list'][0]['title'];
  120. $newsCategory['new_id'] = implode(',', $id);
  121. $newsCategory['sort'] = 0;
  122. $newsCategory['add_time'] = time();
  123. $newsCategory['status'] = 1;
  124. if ($data['id']) {
  125. $this->services->update($data['id'], $newsCategory, 'id');
  126. return app('json')->success(100001);
  127. } else {
  128. $this->services->save($newsCategory);
  129. return app('json')->success(100021);
  130. }
  131. }
  132. } catch (\Exception $e) {
  133. return app('json')->fail(100101);
  134. }
  135. }
  136. /**
  137. * 发送消息
  138. */
  139. public function push()
  140. {
  141. $data = $this->request->postMore([
  142. ['id', 0],
  143. ['user_ids', '']
  144. ]);
  145. if (!$data['id']) return app('json')->fail(100100);
  146. $list = $this->services->getWechatNewsItem($data['id']);
  147. $wechatNews = [];
  148. if ($list) {
  149. if (is_array($list['new']) && count($list['new'])) {
  150. $wechatNews['title'] = $list['new'][0]['title'];
  151. $wechatNews['image_input'] = $list['new'][0]['image_input'];
  152. $wechatNews['date'] = date('m月d日', time());
  153. $wechatNews['description'] = $list['new'][0]['synopsis'];
  154. $wechatNews['id'] = $list['new'][0]['id'];
  155. }
  156. }
  157. if ($data['user_ids'] != '') {//客服消息
  158. $wechatNews = $this->services->wechatPush($wechatNews);
  159. $message = WechatService::newsMessage($wechatNews);
  160. $errorLog = [];//发送失败的用户
  161. $user = $this->services->getWechatUser($data['user_ids'], 'nickname,subscribe,openid', 'uid');
  162. if ($user) {
  163. foreach ($user as $v) {
  164. if ($v['subscribe'] && $v['openid']) {
  165. try {
  166. WechatService::staffService()->message($message)->to($v['openid'])->send();
  167. } catch (\Exception $e) {
  168. Log::error($v['nickname'] . '发送失败,原因' . $e->getMessage());
  169. $errorLog[] = $v['nickname'] . '发送失败';
  170. }
  171. } else {
  172. $errorLog[] = $v['nickname'] . '没有关注发送失败(不是微信公众号用户)';
  173. }
  174. }
  175. } else return app('json')->fail(100031);
  176. if (!count($errorLog)) return app('json')->success(100030);
  177. else return app('json')->success(100030);
  178. }
  179. }
  180. /**
  181. * 发送消息图文列表
  182. * @return mixed
  183. */
  184. public function send_news()
  185. {
  186. $where = $this->request->getMore([
  187. ['cate_name', ''],
  188. ['page', 1],
  189. ['limit', 10]
  190. ]);
  191. return app('json')->success($this->services->list($where));
  192. }
  193. }