details, 'goods_id'); // 因为自提订单没有属性选择。所以默认获取第一个商品属性 $goodsAttr = GoodsAttr::find() ->where(['goods_id' => $goodsIds, 'status' => StatusEnum::ENABLED]) ->select(['id', 'goods_id', 'price', 'original_price', 'cost_price', 'sign_id', 'pic_url']) ->with(['goods' => function ($query) { $query->select(['id', 'goods_name', 'original_price', 'cost_price', 'cover_pic']); }])->asArray()->groupBy('goods_id')->orderBy('id asc')->indexBy('goods_id')->all(); // 获取当前订单的省市区名称 $region_name = Region::find()->where(['id' => [$order->province_id, $order->city_id, $order->district_id]]) ->orderBy('id asc')->select('name')->column(); $amount = 0; // 订单总金额 $returnOrderDetail = []; foreach ($order->details as $detail) { if (empty($goodsAttr[$detail->goods_id])) continue; // 计算商品总价 $amount += $detail->num * $goodsAttr[$detail->goods_id]['price'] ?? 0; $returnOrderDetail[] = [ 'id' => $detail->id, 'order_id' => $detail->order_id, 'user_id' => $detail->user_id, 'mall_id' => $detail->mall_id, 'mch_id' => 0, 'store_id' => 0, 'goods_id' => $detail->goods_id, 'goods_name' => $goodsAttr[$detail->goods_id]['goods']['goods_name'], 'goods_attr_id' => $goodsAttr[$detail->goods_id]['id'], 'goods_attr_name' => $goodsAttr[$detail->goods_id]['name'], 'sign_id' => $goodsAttr[$detail->goods_id]['sign_id'], 'attr_groups_format'=> null, 'price' => $goodsAttr[$detail->goods_id]['price'], 'cost_price' => $goodsAttr[$detail->goods_id]['cost_price'], 'original_goods_price' => $goodsAttr[$detail->goods_id]['goods']['original_price'], 'goods_price' => bcmul($amount, 1, 2), 'num' => $detail->num, 'adjust_money' => 0, 'pic_url' => !empty($goodsAttr[$detail->goods_id]['pic_url']) ? $goodsAttr[$detail->goods_id]['pic_url'] : $goodsAttr[$detail->goods_id]['goods']['cover_pic'], 'marketing_id' => 0, 'marketing_type' => 0, 'order_type' => StatusEnum::ENABLED, 'give_score' => 0, 'order_status' => OrderStatusEnum::PAY, 'shipping_status' => 0, 'is_feedback' => 0, 'remark' => '', 'is_evaluate' => 0, 'refund_balance_money' => 0, 'is_virtual' => 0, 'status' => StatusEnum::ENABLED, 'extra_info' => null, 'created_at' => $detail->created_at, 'updated_at' => $detail->updated_at, ]; } // 设置返回订单数据 $returnOrder = [ 'id' => $order->id, 'mch_id' => 0, 'store_id' => 0, 'mall_id' => $order->mall_id, 'user_id' => $order->user_id, 'order_no' => "cs_{$order->id}", 'out_trade_no' => '', 'mobile' => $order->mobile, 'province' => $order->province_id, 'city' => $order->city_id, 'area' => $order->district_id, 'town' => 0, 'community' => 0, 'address' => $order->address, 'region_name' => implode(" ", $region_name), 'zip' => '', 'receiver_name' => $order->name, 'remark' => $order->remark, 'seller_remark' => '', 'shipping_type' => ShippingTypeEnum::LOGISTICS, 'shipping_money' => 0, 'reduce_shipping_money' => 0, 'refund_money' => 0, 'pay_money' => $amount, 'goods_price' => $amount, 'original_goods_price' => $amount, 'ip' => '', 'coupon_id' => 0, 'coupon_money' => 0, 'score' => 0, 'score_money' => 0, 'order_status' => OrderStatusEnum::PAY, 'pay_status' => StatusEnum::ENABLED, 'shipping_status' => 0, 'review_status' => 0, 'is_feedback' => 0, 'payment_type' => '', 'marketing_id' => 0, 'marketing_type' => '', 'invoice_id' => 0, 'status' => StatusEnum::ENABLED, 'is_comment' => 0, 'is_recycle' => 0, 'is_virtual' => 0, 'is_new_user' => 0, 'pay_time' => $order->created_at, 'shipping_time' => 0, 'sign_time' => 0, 'consign_time' => 0, 'finish_time' => 0, 'close_time' => 0, 'extra_info' => null, 'order_source' => '', 'created_at' => $order->created_at, 'updated_at' => $order->updated_at, ]; $returnOrder['detail'] = $returnOrderDetail; return $returnOrder; } /** * @param array $params * @param array $express * @return bool|string */ public static function syncLogistics(array $params, array $express) { $id = intval($params['id']); $order = CloudStockAgentOrder::findOne(['id' => $id]); if (empty($order)) return true; $params['send_status'] = CloudStockEnum::SEND_STATUS_1; $ret = CloudStockAgentOrder::setData($order->mall_id, $params, $express); return $ret !== false ? true : CloudStockAgentOrder::getStaticError(); } }