DeliverJobs.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php namespace App\Jobs\Company\BatchDeliver;
  2. use App\Servers\Wechat\OpenPlat;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Contracts\Queue\ShouldQueue;
  5. use Illuminate\Foundation\Bus\Dispatchable;
  6. use Illuminate\Queue\InteractsWithQueue;
  7. use Illuminate\Queue\SerializesModels;
  8. use App\Facades\Servers\Logs\Log;
  9. use App\Models\Manager\Company as CompanyModel;
  10. use App\Models\Manager\Orders;
  11. use App\Models\Manager\OrdersProduct;
  12. use App\Models\Manager\Lottery\LiveRecord;
  13. use App\Models\OpenPlat\Component;
  14. use App\Models\Manager\CustomOpenid;
  15. use App\Models\Manager\OrdersAddr;
  16. use App\Servers\DB\DbService;
  17. use Illuminate\Support\Facades\DB;
  18. /**
  19. * 奖品发放
  20. */
  21. class DeliverJobs implements ShouldQueue
  22. {
  23. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  24. /** 奖品数据 **/
  25. protected $data;
  26. /**
  27. * 任务可尝试的次数
  28. *
  29. * @var int
  30. */
  31. public $tries = 3;
  32. /**
  33. * Create a new job instance.
  34. *
  35. * @return void
  36. */
  37. public function __construct($data)
  38. {
  39. $this->data = $data;
  40. }
  41. /**
  42. * Execute the job.
  43. *
  44. * @return void
  45. */
  46. public function handle()
  47. {
  48. // 获取数据
  49. $ordersData = $this->data;
  50. $orderId = $ordersData['order_id'];
  51. $companyId = $ordersData['company_id'];
  52. $expressId = $ordersData['express_id'];
  53. $expressNo = $ordersData['express_no'];
  54. $logisticsType = $ordersData['logistics_type'];
  55. try {
  56. // 切换数据库
  57. (new DbService())->getConnectionNameByCompanyId($ordersData['company_id']);
  58. // 中奖记录
  59. $LiveRecord = (new LiveRecord);
  60. $OrdersProduct = (new OrdersProduct);
  61. $Orders = (new Orders);
  62. $CompanyModel = (new CompanyModel);
  63. $Component = (new Component);
  64. $CustomOpenid = (new CustomOpenid);
  65. $OrdersAddr = (new OrdersAddr);
  66. $orderInfo = $Orders->query()->where('id','=',$orderId)->first()->toArray();
  67. if (!$orderInfo) Log::info('job_error/deliver_jobs', '发货失败,订单不存在',$ordersData);
  68. //获取订单产品详情
  69. $orderProducts = $OrdersProduct->query()->where('order_id','=',$orderId)->get()->toArray();
  70. if (!$orderProducts) Log::info('job_error/deliver_jobs', '发货失败,订单产品不存在',$ordersData);
  71. $productNames = array_column($orderProducts,'product_name');
  72. $item_desc = implode(';',$productNames);
  73. //查询商户是否开启同步发货
  74. $synchDelivery = $CompanyModel->query()->where('id','=',$companyId)->value('synch_delivery');
  75. if($orderInfo['is_pay'] == 1 && $orderInfo['port_type'] == 0 && $synchDelivery == 0){
  76. $receiverContact = '';
  77. //查询商户小程序APPID
  78. $map = [
  79. 'company_id' => $companyId,
  80. 'auth_type' => 2,
  81. ];
  82. $appId = $Component->query()->where($map)->value('authorizer_appid');
  83. //查询地址
  84. if ($expressId == 'SF'){
  85. $addressInfo = $OrdersAddr->query()->where(['order_id'=>$orderId])->first();
  86. if (!$addressInfo){
  87. Log::info('job_error/deliver_jobs', '发货失败,订单收货地址不存在',$ordersData);
  88. }
  89. if ($addressInfo['contact_phone']){
  90. $receiverContact = hide_phone($addressInfo['contact_phone']);
  91. }
  92. }
  93. $openMap = [
  94. 'custom_uid' => $orderInfo['custom_uid'],
  95. 'type' => 0,
  96. ];
  97. //查询客户openid
  98. $customOpenId = $CustomOpenid->query()->where($openMap)->value('openid');
  99. if (!$customOpenId){
  100. Log::info('job_error/deliver_jobs', '发货失败,缺少客户openid',$ordersData);
  101. }
  102. $deliverData = [
  103. 'order_number_type' => 2,
  104. 'mchid' => config('wechatpay.mini.mchid'),
  105. 'transaction_id' => $orderInfo['transaction_id'],
  106. 'delivery_mode' => 1,
  107. 'tracking_no' => $expressNo,
  108. "express_company" => $expressId,
  109. "item_desc" => $item_desc,
  110. 'consignor_contact' => '',
  111. 'receiver_contact' => $receiverContact,
  112. 'upload_time' => time(),
  113. 'openid' => $customOpenId,
  114. 'logistics_type' => $logisticsType,
  115. ];
  116. //同步到微信
  117. $result = (new OpenPlat())->deliver($appId,$deliverData);
  118. if( $result['code'] == 'error' ){
  119. // 回退数据
  120. Log::info('job_error/deliver_jobs', '发货失败', $result);
  121. }
  122. }
  123. // 返回结果
  124. return $result;
  125. } catch (Throwable $th) {
  126. Log::info('job_error/deliver_jobs', $th->getMessage(), $ordersData);
  127. }
  128. }
  129. }