// +---------------------------------------------------------------------- declare (strict_types=1); namespace app\console\service; use app\console\library\Tools; use app\common\service\BaseService; use app\store\model\Express as ExpressModel; use app\store\model\Order; use app\store\model\OrderAddressSimple; use app\store\model\OrderGoods; use app\store\model\User; use app\store\service\wxApi\WxOrderLogistics; use think\facade\Log; /** * 服务类:每小时轮训已发货的订单录入到微信小程序发货后台 * Class WxDelivery * @package app\console\service */ class WxDelivery extends BaseService { /** * 本系统内已人工发货的订单到微信那边发货 * @param int $storeId * @return array|bool * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function pullOrderStatus(int $storeId) { // 获取店内员工的预计佣金 $orderGoodsModel = new OrderGoods(); $orderGoodses = $orderGoodsModel->getNeedToWxDelivery(); if (empty($orderGoodses)){ Log::info('pullOrderStatus:No need to mp delivery'); return true; } $orderIds = array_column($orderGoodses, 'order_id'); $orderModel = new Order(); $orders = $orderModel->getListByIds($orderIds); $express = ExpressModel::getAllList(); $expressIndexById = array_column($express, null, 'express_id'); $orderAddressModel = new OrderAddressSimple(); $orderAddress = $orderAddressModel->batchByOrderIds($orderIds); $orderAddressIndexByOrderId = array_column($orderAddress,'phone','order_id'); $userIds = array_column($orderGoodses, 'user_id'); $users = User::getByUserIds($userIds); $userToOpenId = array_column($users, 'open_id', 'user_id'); // 遍历整理数据 foreach ($orderGoodses as $orderGoods) { $res = WxOrderLogistics::getOrderStatusByTransId($orders[$orderGoods['order_id']]['transaction_id']); //$res = ['errcode' => 0, 'errmsg' => 'ok', 'order' => ['order_state' => 1]]; if ($res['errcode'] == 0 && $res['errmsg'] == 'ok') { if ($res['order']['order_state'] == 1) {//订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款。 //$orderAddress = $orderAddressModel->findByOrderId($orderGoods['order_id']); $a = WxOrderLogistics::orderDeliveryByTransId($orders[$orderGoods['order_id']]['transaction_id'], $expressIndexById[$orderGoods['express_id']]['wx_delivery_id'], $orderGoods['express_no'], $orderGoods['goods_name'], $userToOpenId[$orderGoods['user_id']], '', $orderAddressIndexByOrderId[$orderGoods['order_id']]); //$a = ['errcode' => 0, 'errmsg' => 'ok']; if ($a['errcode'] == 0 && $a['errmsg'] == 'ok') { OrderGoods::update(['wx_delivery_status' => 20], ['order_goods_id' => $orderGoods['order_goods_id']]); } } }else{ Log::info('order_goods:'.$orderGoods['order_goods_id'],['res' => $res]); } } // 记录日志 Tools::taskLogs('WxDelivery', 'pullOrderStatus', [ 'storeId' => $storeId, 'data' => ['order_ids'=>$orderIds] ]); return true; } //对于微信已发货的订单,如果订单状态是已签收,提醒确认收货,不提醒的话,默认十天订单结束 }