NoticeService.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace addons\ReservationService\common\services;
  3. use addons\ReservationService\common\enums\ReservationServiceEnum;
  4. use addons\ReservationService\common\logic\SmsMessage;
  5. use addons\ReservationService\common\models\ReservationServiceNotice;
  6. use common\enums\RabbitMqEnum;
  7. use common\enums\StatusEnum;
  8. use common\models\mall\Mall;
  9. use Overtrue\EasySms\PhoneNumber;
  10. use common\helpers\sms\Sms;
  11. class NoticeService
  12. {
  13. public function task()
  14. {
  15. $mall_ids = [];
  16. foreach (Mall::getEnableMallIds() as $mall_id) {
  17. // 判断是否开启当前插件
  18. $config = \Yii::$app->services->setting->addons->get($mall_id, ReservationServiceEnum::ADDONS_NAME, 'basic');
  19. if (!empty($config['is_enable'])) {
  20. $mall_ids[] = $mall_id;
  21. }
  22. }
  23. if (!empty($mall_ids)) {
  24. foreach (ReservationServiceNotice::find()->where(['mall_id' => $mall_ids])
  25. ->andWhere(['<=', 'send_at', time()])
  26. ->andWhere(['status' => StatusEnum::ENABLED])->each() as $item) {
  27. $item->status = StatusEnum::DISABLED;
  28. if ($item->save()) {
  29. // 入列
  30. \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, [
  31. 'id' => $item->id,
  32. ],
  33. self::class, 'async_handle');
  34. }
  35. }
  36. }
  37. }
  38. /**
  39. * @param array $params
  40. * @return bool|void
  41. */
  42. public function async_handle(array $params)
  43. {
  44. if (empty($params)) return;
  45. $data = ReservationServiceNotice::getOne([
  46. ['id' => $params['id']]
  47. ]);
  48. if (empty($data)) return;
  49. try {
  50. $sms = new Sms($data->mall_id, $data->gateway);
  51. $message = new SmsMessage($data->content);
  52. // 接受角色不一样,有可能是买家,有可能是团长
  53. $mobile = new PhoneNumber($data->mobile, $data->area_code);
  54. if ($message->mall_sms != 'qcloud') {
  55. $resp = $sms->easySms->send($mobile, $message);
  56. } else {
  57. $resp = $sms->easySms->send($data->mobile, $message);
  58. }
  59. $data->status = StatusEnum::DELETE;
  60. } catch (\Throwable $e) {
  61. $err = [
  62. 'file' => $e->getFile(),
  63. 'msg' => $e->getMessage(),
  64. 'line' => $e->getLine()
  65. ];
  66. }
  67. $data->res = [
  68. 'resp' => $resp ?? [],
  69. 'err' => $err ?? [],
  70. ];
  71. if (!$data->save() || !empty($err)) {
  72. \Yii::error(__METHOD__ . " -> " . $data->getErrorMessage());
  73. return false;
  74. }
  75. return true;
  76. }
  77. }