MessageSubscribe.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. namespace crmeb\subscribes;
  3. use app\admin\model\wechat\WechatMessage;
  4. use app\models\store\StoreOrder;
  5. use app\models\store\StoreProduct;
  6. use app\models\store\StoreProductReply;
  7. use app\models\user\User;
  8. use app\models\user\UserExtract;
  9. use app\models\user\WechatUser;
  10. use crmeb\repositories\CustomerRepository;
  11. use crmeb\repositories\ShortLetterRepositories;
  12. use crmeb\services\workerman\ChannelService;
  13. /**
  14. * 用户消息事件
  15. * Class MessageSubscribe
  16. * @package crmeb\subscribes
  17. */
  18. class MessageSubscribe
  19. {
  20. public function handle()
  21. {
  22. }
  23. /** 后台订单下单,评论,支付成功,后台消息提醒
  24. * @param $event
  25. */
  26. public function onAdminNewPush($event)
  27. {
  28. try {
  29. $data['ordernum'] = StoreOrder::where('paid', 1)->where('status', 0)
  30. ->where('shipping_type', 1)->where('refund_status', 0)
  31. ->where('is_del', 0)->count();
  32. $store_stock = sys_config('store_stock');
  33. if ($store_stock < 0) $store_stock = 2;
  34. $data['inventory'] = StoreProduct::where('stock', '<=', $store_stock)->where('is_show', 1)->where('is_del', 0)->count();//库存
  35. $data['commentnum'] = StoreProductReply::where('is_reply', 0)->count();
  36. $data['reflectnum'] = UserExtract::where('status', 0)->count();//提现
  37. $data['msgcount'] = intval($data['ordernum']) + intval($data['inventory']) + intval($data['commentnum']) + intval($data['reflectnum']);
  38. ChannelService::instance()->send('ADMIN_NEW_PUSH', $data);
  39. } catch (\Exception $e) {
  40. }
  41. }
  42. /**
  43. * 微信消息前置操作
  44. * @param $event
  45. */
  46. public function onWechatMessageBefore($event)
  47. {
  48. list($message) = $event;
  49. WechatUser::saveUser($message->FromUserName);
  50. $event = isset($message->Event) ?
  51. $message->MsgType . (
  52. $message->Event == 'subscribe' && isset($message->EventKey) ? '_scan' : ''
  53. ) . '_' . $message->Event : $message->MsgType;
  54. WechatMessage::setMessage(json_encode($message), $message->FromUserName, strtolower($event));
  55. }
  56. /**
  57. * 用户取消关注公众号前置操作
  58. * @param $event
  59. */
  60. public function onWechatEventUnsubscribeBefore($event)
  61. {
  62. list($message) = $event;
  63. WechatUser::unSubscribe($message->FromUserName);
  64. }
  65. /**
  66. * 下发送短信事件
  67. * @param array $event
  68. */
  69. public function onShortMssageSend($event)
  70. {
  71. //$actions 可为数组
  72. list($order_id, $actions) = $event;
  73. try {
  74. if (is_array($actions)) {
  75. foreach ($actions as $action) {
  76. $actionName = 'onMssageSend' . $action;
  77. if (method_exists($this, $actionName)) $this->$actionName($order_id);
  78. }
  79. } else {
  80. $actionName = 'onMssageSend' . $actions;
  81. if (method_exists($this, $actionName)) $this->$actionName($order_id);
  82. }
  83. } catch (\Exception $e) {
  84. errlog('短信下发事件发生系统错误,错误原因:' . $e->getMessage());
  85. }
  86. }
  87. /**
  88. * 支付成功短信提醒
  89. * @param string $order_id
  90. */
  91. public function onMssageSendPaySuccess($order_id)
  92. {
  93. $storeInfo = StoreOrder::where(['order_id' => $order_id, 'paid' => 1, 'refund_status' => 0])->find();
  94. if (!$storeInfo) return;
  95. $switch = sys_config('lower_order_switch') ? true : false;
  96. //模板变量
  97. $pay_price = $storeInfo->pay_price;
  98. ShortLetterRepositories::send($switch, $storeInfo->user_phone, compact('order_id', 'pay_price'), 'PAY_SUCCESS_CODE', '用户支付成功发送短信失败,订单号为:' . $order_id);
  99. }
  100. /**
  101. * 发货短信提醒
  102. * @param string $order_id
  103. */
  104. public function onMssageSendDeliver($order_id)
  105. {
  106. $storeInfo = StoreOrder::where(['order_id' => $order_id, 'paid' => 1, 'refund_status' => 0, 'status' => 1])->find();
  107. if (!$storeInfo) return;
  108. $switch = sys_config('deliver_goods_switch') ? true : false;
  109. //模板变量
  110. $nickname = User::where('uid', $storeInfo->uid)->value('nickname');
  111. $store_name = StoreOrder::getProductTitle($storeInfo->cart_id);
  112. ShortLetterRepositories::send($switch, $storeInfo->user_phone, compact('order_id', 'store_name', 'nickname'), 'DELIVER_GOODS_CODE', '用户发货发送短信失败,订单号为:' . $order_id);
  113. }
  114. /**
  115. * 确认收货短信提醒
  116. * @param string $order_id
  117. */
  118. public function onMssageSendReceiving($order_id)
  119. {
  120. $storeInfo = StoreOrder::where(['order_id' => $order_id, 'paid' => 1, 'refund_status' => 0, 'status' => 2])->find();
  121. if (!$storeInfo) return;
  122. $switch = sys_config('confirm_take_over_switch') ? true : false;
  123. //模板变量
  124. $store_name = StoreOrder::getProductTitle($storeInfo->cart_id);
  125. ShortLetterRepositories::send($switch, $storeInfo->user_phone, compact('store_name', 'order_id'), 'TAKE_DELIVERY_CODE', '用户确认收货发送短信失败,订单号为:' . $order_id);
  126. }
  127. /**
  128. * 用户下单管理员短信提醒
  129. * @param string $order_id
  130. */
  131. public function onMssageSendAdminPlaceAnOrder($order_id)
  132. {
  133. $storeInfo = StoreOrder::where(['order_id' => $order_id, 'paid' => 0, 'refund_status' => 0, 'status' => 0])->find();
  134. if (!$storeInfo) return;
  135. $switch = sys_config('admin_lower_order_switch') ? true : false;
  136. $switch && CustomerRepository::getAdminNoticeAuth(function ($userInfo) use ($storeInfo) {
  137. //模板变量
  138. $admin_name = $userInfo->nickname;
  139. $order_id = $storeInfo->order_id;
  140. ShortLetterRepositories::send(true, $userInfo->phone, compact('admin_name', 'order_id'), 'ADMIN_PLACE_ORDER_CODE', '用户下单成功管理员发送短信通知失败,订单号为:' . $storeInfo->order_id);
  141. });
  142. }
  143. /**
  144. * 支付成功管理员短信提醒
  145. * @param string $order_id
  146. */
  147. public function onMssageSendAdminPaySuccess($order_id)
  148. {
  149. $storeInfo = StoreOrder::where(['order_id' => $order_id, 'paid' => 1, 'refund_status' => 0, 'status' => 0])->find();
  150. if (!$storeInfo) return;
  151. $switch = sys_config('admin_pay_success_switch') ? true : false;
  152. $switch && CustomerRepository::getAdminNoticeAuth(function ($userInfo) use ($storeInfo) {
  153. //模板变量
  154. $admin_name = $userInfo->nickname;
  155. $order_id = $storeInfo->order_id;
  156. ShortLetterRepositories::send(true, $userInfo->phone, compact('admin_name', 'order_id'), 'ADMIN_PAY_SUCCESS_CODE', '用户支付成功管理员发送短信通知失败,订单号为:' . $storeInfo->order_id);
  157. });
  158. }
  159. /**
  160. * 用户确认收货管理员短信提醒
  161. * @param string $order_id
  162. */
  163. public function onMssageSendAdminConfirmTakeOver($order_id)
  164. {
  165. $storeInfo = StoreOrder::where(['order_id' => $order_id, 'paid' => 1, 'refund_status' => 0, 'status' => 2])->find();
  166. if (!$storeInfo) return;
  167. $switch = sys_config('admin_confirm_take_over_switch') ? true : false;
  168. $switch && CustomerRepository::getAdminNoticeAuth(function ($userInfo) use ($storeInfo) {
  169. //模板变量
  170. $admin_name = $userInfo->nickname;
  171. $order_id = $storeInfo->order_id;
  172. ShortLetterRepositories::send(true, $userInfo->phone, compact('admin_name', 'order_id'), 'ADMIN_TAKE_DELIVERY_CODE', '用户确认收货成功管理员发送短信通知失败,订单号为:' . $storeInfo->order_id);
  173. });
  174. }
  175. /**
  176. * 用户发起退款管理员短信提醒
  177. * @param string $order_id
  178. */
  179. public function onMssageSendAdminRefund($order_id)
  180. {
  181. $storeInfo = StoreOrder::where(['order_id' => $order_id, 'paid' => 1, 'refund_status' => 1])->find();
  182. if (!$storeInfo) return;
  183. $switch = sys_config('admin_refund_switch') ? true : false;
  184. $switch && CustomerRepository::getAdminNoticeAuth(function ($userInfo) use ($storeInfo) {
  185. //模板变量
  186. $admin_name = $userInfo->nickname;
  187. $order_id = $storeInfo->order_id;
  188. ShortLetterRepositories::send(true, $userInfo->phone, compact('admin_name', 'order_id'), 'ADMIN_RETURN_GOODS_CODE', '用户退款管理员发送短信通知失败,订单号为:' . $storeInfo->order_id);
  189. });
  190. }
  191. }