ExpressOrder.php 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace app\command;
  3. use app\model\saas\SaasOrder;
  4. use app\model\saas\SaasOrderExpress;
  5. use Symfony\Component\Console\Command\Command;
  6. use Symfony\Component\Console\Input\InputInterface;
  7. use Symfony\Component\Console\Output\OutputInterface;
  8. use Webman\RedisQueue\Redis;
  9. use yzh52521\EasyHttp\Http;
  10. class ExpressOrder extends Command
  11. {
  12. protected static string $defaultName = 'express:order';
  13. protected static string $defaultDescription = '更新订单物流信息';
  14. protected function execute(InputInterface $input, OutputInterface $output): int
  15. {
  16. try {
  17. $output->writeln("开始更新快递信息====>" . getDateFull());
  18. $nextPage = 1;
  19. while (is_numeric($nextPage)) {
  20. $resp = (new SaasOrderExpress)->where(["status" => 0])->with(['orders'])->page($nextPage,10)->select();
  21. if ($resp->isEmpty()) {
  22. $output->writeln("没有任务啦==".getDateFull());
  23. $nextPage = null;
  24. return true;
  25. }
  26. // $orderMode = (new SaasOrder);
  27. foreach ($resp as $item) {
  28. [$state,$expressData] = $this->getExpressData($item['express_sn'],$item['mobile']);
  29. if ($state && $item['orders']['is_error'] == 0) {
  30. if (in_array($expressData['logisticsStatusDesc'],['派件中',"已签收"])) { // 核销订单
  31. $output->writeln("订单进入核销=={$item['order_sn']}=={$item['express_sn']}==".getDateFull());
  32. (new SaasOrderExpress)->where("id",$item['id'])->update(['status' => 1,'last_at' => getDateFull(),'last_msg' => $expressData['theLastMessage'],'content' => json_encode($expressData['logisticsTraceDetailList'])]);
  33. Redis::send("order-done",['order' => $item['order_sn']]);
  34. } else {
  35. (new SaasOrderExpress)->where("id",$item['id'])->update(['last_msg' => $expressData['theLastMessage'],'last_at' => getDateFull(),'content' => json_encode($expressData['logisticsTraceDetailList'])]);
  36. $output->writeln("查询物流成功=={$item['order_sn']}=={$expressData['logisticsStatusDesc']}==".getDateFull());
  37. }
  38. } else {
  39. $output->writeln("查询快递信息失败=={$item['order_sn']}=={$item['express_sn']}==".getDateFull());
  40. }
  41. }
  42. $nextPage = $nextPage+1;
  43. $output->writeln("进入下一页=={$nextPage}==".getDateFull());
  44. }
  45. } catch (\Throwable $throwable) {
  46. echo getDateFull()."===更新快递信息报错\n";
  47. echo $throwable->getFile()."\n";
  48. echo $throwable->getLine()."\n";
  49. }
  50. return self::SUCCESS;
  51. }
  52. protected function getExpressData(string $expressNo = "",string $mobile = ""): array
  53. {
  54. $url = "https://kzexpress.market.alicloudapi.com/api-mall/api/express/query";
  55. $param = [
  56. "expressNo" => $expressNo,
  57. "mobile" => substr($mobile,-4)
  58. ];
  59. $resp = Http::withHeaders([
  60. "Authorization" => "APPCODE ".sConf("wechat.kd_code")
  61. ])->post($url,$param)->array();
  62. if ($resp['code'] <> 200) {
  63. return [0,''];
  64. }
  65. return [1,$resp['data']];
  66. }
  67. }