You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.9 KiB

5 years ago
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Amqp\Consumer;
  4. use App\Model\Order;
  5. use App\Model\SpeakerDevic;
  6. use App\Service\DeviceServiceInterface;
  7. use Hyperf\Amqp\Result;
  8. use Hyperf\Amqp\Annotation\Consumer;
  9. use Hyperf\Amqp\Message\ConsumerMessage;
  10. use Hyperf\DbConnection\Db;
  11. use PhpAmqpLib\Message\AMQPMessage;
  12. use Hyperf\Di\Annotation\Inject;
  13. // /**
  14. // * @Consumer(exchange="devicOrder", routingKey="devicOrder", queue="devicOrder", nums=4)
  15. // */
  16. class DevicOrderConsumer extends ConsumerMessage
  17. {
  18. /**
  19. * @Inject
  20. * @var DeviceServiceInterface
  21. */
  22. protected $deviceService;
  23. public function consumeMessage($data, AMQPMessage $message): string
  24. {
  25. try {
  26. $orderMainId = $message->getBody();
  27. $order = Order::query()
  28. ->select(['id', 'store_id', 'money'])
  29. ->where(['order_main_id' => $orderMainId, 'type' => 4, 'dm_state' => 2])
  30. ->first();
  31. if (is_null($order)||!$order) {
  32. return Result::ACK;
  33. }
  34. $deviceNames = SpeakerDevic::query()
  35. ->select(['device_name'])
  36. ->where(['store_id' => $order['store_id'], 'is_bind' => SpeakerDevic::IS_BIND_YES])
  37. ->get()
  38. ->toArray();
  39. if (empty($deviceNames)||!$deviceNames) {
  40. return Result::ACK;
  41. }
  42. $msg = "{\"msg\":\"到账".$order['money']."\"}";
  43. $res = $this->deviceService->pubMsgToStoreByDevName($deviceNames, $msg);
  44. if ($res == true) {
  45. return Result::ACK;
  46. } else {
  47. return Result::REQUEUE;
  48. }
  49. } catch (\Exception $e) {
  50. return Result::REQUEUE;
  51. }
  52. }
  53. public function isEnable(): bool
  54. {
  55. if(env('APP_ENV') == 'local') {
  56. return false;
  57. }
  58. return parent::isEnable();
  59. }
  60. }