WxDelivery.php 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types=1);
  12. namespace app\console\service;
  13. use app\console\library\Tools;
  14. use app\common\service\BaseService;
  15. use app\store\model\Express as ExpressModel;
  16. use app\store\model\Order;
  17. use app\store\model\OrderAddressSimple;
  18. use app\store\model\OrderGoods;
  19. use app\store\model\User;
  20. use app\store\service\wxApi\WxOrderLogistics;
  21. use think\facade\Log;
  22. /**
  23. * 服务类:每小时轮训已发货的订单录入到微信小程序发货后台
  24. * Class WxDelivery
  25. * @package app\console\service
  26. */
  27. class WxDelivery extends BaseService
  28. {
  29. /**
  30. * 本系统内已人工发货的订单到微信那边发货
  31. * @param int $storeId
  32. * @return array|bool
  33. * @throws \think\db\exception\DataNotFoundException
  34. * @throws \think\db\exception\DbException
  35. * @throws \think\db\exception\ModelNotFoundException
  36. */
  37. public function pullOrderStatus(int $storeId)
  38. {
  39. // 获取店内员工的预计佣金
  40. $orderGoodsModel = new OrderGoods();
  41. $orderGoodses = $orderGoodsModel->getNeedToWxDelivery();
  42. if (empty($orderGoodses)){
  43. Log::info('pullOrderStatus:No need to mp delivery');
  44. return true;
  45. }
  46. $orderIds = array_column($orderGoodses, 'order_id');
  47. $orderModel = new Order();
  48. $orders = $orderModel->getListByIds($orderIds);
  49. $express = ExpressModel::getAllList();
  50. $expressIndexById = array_column($express, null, 'express_id');
  51. $orderAddressModel = new OrderAddressSimple();
  52. $orderAddress = $orderAddressModel->batchByOrderIds($orderIds);
  53. $orderAddressIndexByOrderId = array_column($orderAddress,'phone','order_id');
  54. $userIds = array_column($orderGoodses, 'user_id');
  55. $users = User::getByUserIds($userIds);
  56. $userToOpenId = array_column($users, 'open_id', 'user_id');
  57. // 遍历整理数据
  58. foreach ($orderGoodses as $orderGoods) {
  59. $res = WxOrderLogistics::getOrderStatusByTransId($orders[$orderGoods['order_id']]['transaction_id']);
  60. //$res = ['errcode' => 0, 'errmsg' => 'ok', 'order' => ['order_state' => 1]];
  61. if ($res['errcode'] == 0 && $res['errmsg'] == 'ok') {
  62. if ($res['order']['order_state'] == 1) {//订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款。
  63. //$orderAddress = $orderAddressModel->findByOrderId($orderGoods['order_id']);
  64. $a = WxOrderLogistics::orderDeliveryByTransId($orders[$orderGoods['order_id']]['transaction_id'],
  65. $expressIndexById[$orderGoods['express_id']]['wx_delivery_id'], $orderGoods['express_no'], $orderGoods['goods_name'], $userToOpenId[$orderGoods['user_id']], '', $orderAddressIndexByOrderId[$orderGoods['order_id']]);
  66. //$a = ['errcode' => 0, 'errmsg' => 'ok'];
  67. if ($a['errcode'] == 0 && $a['errmsg'] == 'ok') {
  68. OrderGoods::update(['wx_delivery_status' => 20], ['order_goods_id' => $orderGoods['order_goods_id']]);
  69. }
  70. }
  71. }else{
  72. Log::info('order_goods:'.$orderGoods['order_goods_id'],['res' => $res]);
  73. }
  74. }
  75. // 记录日志
  76. Tools::taskLogs('WxDelivery', 'pullOrderStatus', [
  77. 'storeId' => $storeId,
  78. 'data' => ['order_ids'=>$orderIds]
  79. ]);
  80. return true;
  81. }
  82. //对于微信已发货的订单,如果订单状态是已签收,提醒确认收货,不提醒的话,默认十天订单结束
  83. }