validate()) { return ['code' => 1, 'msg' => $this->getErrorSummary(false)[0]]; } $order = Order::findOne([ // 'store_id' => $this->store_id,//解决供应链两个用户不用店铺问题 'id' => $this->order_id, // 'user_id' => $this->user_id, 'is_delete' => 0, 'is_recycle'=> 0, ]); if (!$order) { return [ 'code' => 1, 'msg' => '订单不存在', ]; } $res = \queue_push(new AlipayThirdOrderJob(['order_id' => $this->order_id]), 5); $status = ""; if ($order->is_pay == 0) { $status = '订单未付款'; } elseif ($order->is_pay == 1 && $order->trade_status == Order::ORDER_FLOW_NO_SEND) { $status = '订单待发货'; } elseif ($order->trade_status == Order::ORDER_FLOW_SEND) { $status = '订单已发货'; } elseif ($order->trade_status == Order::ORDER_FLOW_CONFIRM) { $status = '订单已完成'; } $goods_list = OrderDetail::find()->alias('od') ->where(['od.order_id' => $order->id, 'od.is_delete' => 0])->asArray()->all(); $num = 0; $book = []; $sum_goods_price = 0; $is_can_confirm = true; // 获取联动2+1商品条件 $holderLevelOption = \app\utils\Share\BonusPool::getShareHolderLevelOption($this->store_id); $coupon_cards = []; foreach ($goods_list as $i => $item) { $sum_goods_price += $item['total_price']; if ($order->order_type == 1 || $order->order_type == 2) { $attr = Json::decode($item['attr']); if ($order->order_type == 1) { if (count($attr) > 1) { $date_data = current($attr)['date'] . '/' . end($attr)['date']; } else { $date_data = $attr[0]['date']; } $book = [ 'date' => $date_data ]; } else{ $book['date'] = $attr['date'] . ' ' . $attr['time']; } } $goods = HelpersJson::decode($item['goods_info']); $orderComment = OrderComment::findOne(['store_id' => $this->store_id, 'order_id' => $order->id, 'goods_id' => $item['goods_id']]); $newItem = []; $goods_model = Goods::findOne($item['goods_id']); $cards = []; // if (!empty($goods_model->verify_card_id)) { // $ids = explode(',', $goods_model->verify_card_id); // $cards = Tools::getVerifyList($ids, $order, $goods_model); // } else { // $cards = []; // } //获取已经取消多少件 $newItem['cancel_num'] = OrderGoodsCancel::getCancelGoodsOrderQuery( $order->id, 'SUM(num)', 'order_detail_id', $item['id'])->scalar() ?: 0; //获取可取消数量 $newItem['max_cancel_num'] = bcsub($item['num'], $newItem['cancel_num']); $newItem['is_can_cancel'] = OrderGoodsCancel::is_activity_goods($order->id, $item['goods_id']); //如果是营销活动产品就不给取消 if (!$newItem['is_can_cancel']) { $newItem['max_cancel_num'] = 0; } //取消信息 $cancel_info = []; $cancel_info['num'] = OrderGoodsCancel::find()->where([ 'order_id' => $order->id, 'order_detail_id' => $item['id'] ])->sum('num') ?: 0; $cancel_info['cancel_list'] = OrderGoodsCancel::find()->where([ 'order_id' => $order->id, 'order_detail_id' => $item['id'], ])->orderBy('id desc') ->select('status, num, refund_price, created_at, updated_at') ->asArray() ->all(); foreach ($cancel_info['cancel_list'] as &$cancel_item) { $cancel_item['status_text'] = OrderGoodsCancel::$status_text[$cancel_item['status']]; $cancel_item['status'] = intval($cancel_item['status']); if ($cancel_item['status'] === OrderGoodsCancel::STATUS_PAY) { $cancel_item['status'] = 1; } if ($cancel_item['status'] === OrderGoodsCancel::STATUS_PAY_FAIL) { $cancel_item['status'] = 0; } if ($cancel_item['status'] === OrderGoodsCancel::STATUS_CANCEL) { $cancel_item['status'] = 2; } $cancel_item['created_at'] = date('Y-m-d H:i:s', $cancel_item['created_at']); if (in_array($cancel_item['status'], [OrderGoodsCancel::STATUS_PASS, OrderGoodsCancel::STATUS_REFUSE])) { $cancel_item['created_at'] = date('Y-m-d H:i:s', $cancel_item['updated_at']); } } $newItem['cancel_info'] = $cancel_info ?: null; $newItem['cancel_num'] = OrderGoodsCancel::find()->where([ 'order_detail_id' => $item['id'], 'status' => [ OrderGoodsCancel::STATUS_PAY, OrderGoodsCancel::STATUS_PASS, OrderGoodsCancel::STATUS_PAY_FAIL ] ])->sum('num') ?: 0; $newItem['cancel_text'] = ''; if ($newItem['cancel_num'] > 0) { $newItem['cancel_text'] = '已退款' .$newItem['cancel_num'] .'件'; if ($newItem['cancel_num'] >= $item['num']) { $newItem['cancel_text'] = '已退款'; } } if ($order->get_verify_id) { $get_verify_id = explode(',', $order->get_verify_id); $VerifyCardSale = VerifyCardSale::find()->alias('vcs')->where(['and', [ 'vcs.id' => $get_verify_id, 'vcs.is_delete' => 0, 'vcs.is_trans_send' => 0, // 'vca.status' => 0, 'vc.status' => 0 ], [ '>', 'vcs.left_num', 0 ] // ,[ // '>', 'vcs.end_time', time() // ] ]) ->leftJoin(['vc' => VerifyCard::tableName()], 'vcs.verify_card_id = vc.id') ->leftJoin(['vca' => VerifyCardAccount::tableName()], 'vcs.account_id = vca.id') ->select('vca.account, vc.begin_time, vc.bg_pic_url, vc.business_status, vc.business_type, vc.content , vc.created_at, vc.date_type, vc.end_time, vc.expire_day, vc.freight_id, vcs.id, vc.is_business , vc.is_give, vc.money, vc.name, vc.num, vca.password, vc.pic_url, vc.price, vcs.id sale_id, vcs.status sale_status , vc.savingsType, vc.sort, vc.status, vc.total_num, vc.total_price, vc.type, vcs.use_num, vc.video_ids , vcs.video_status, vcs.goods_id, vcs.verify_card_id')->orderBy('vcs.verify_card_id ASC')->asArray()->all(); if ($VerifyCardSale) { // $verify_card_id = 0; // $arr = []; // $card_index = 0; foreach ($VerifyCardSale as &$card_item) { $card_item['num'] = 1; // if (intval($verify_card_id) !== intval($card_item['verify_card_id'])) { // $arr[$card_index] = $card_item; // $verify_card_id = $card_item['verify_card_id']; // ++$card_index; // } else { // $arr[$card_index - 1]['num'] += 1; // } } $cards = $VerifyCardSale; } } else { $cards = []; } if ((int)$this->user_id !== (int)$order->user_id) { $cards = []; } if ($order->get_coupon_id) { $get_coupon_id = explode(',', $order->get_coupon_id); if ($get_coupon_id) { $coupon = UserCoupon::find()->alias('uc')->leftJoin(['c' => Coupon::tableName()], 'uc.coupon_id=c.id') ->where(['uc.id' => $get_coupon_id, 'uc.is_use' => 0])->select('c.name, uc.id, uc.begin_time, uc.end_time, c.discount_type, c.min_price, c.sub_price, c.discount, c.discount_max_price, c.desc')->asArray()->all(); foreach ($coupon as &$coupon_item) { $coupon_item['discount_type'] = (int)$coupon_item['discount_type']; $coupon_item['discount'] = (int)$coupon_item['discount']; $coupon_item['begin_time'] = date('Y-m-d', $coupon_item['begin_time']); $coupon_item['end_time'] = date('Y-m-d', $coupon_item['end_time']); } $coupon_cards = $coupon; } } if ($order->pay_type == 2 && intval($order->is_pay) === 0) { $is_can_confirm = false; } //是否需要上门安装 $install_log = AgentGoodsInstallLog::findOne(['order_detail_id' => $item['id'], 'order_type' => AgentGoodsInstallLog::ORDER_TYPE_NORMAL]); $newItem['goods_install'] = 0; if ($install_log->is_need_install && (int)$install_log->status >= 1) { $newItem['goods_install'] = (int)$install_log->status; } //判断是否可点击确认收货 $is_can_confirm_sub = ((bool)AgentGoodsInstallLog::findOne(['order_detail_id' => $item['id'], 'status' => [0, 1], 'is_need_install' => 1, 'order_type' => AgentGoodsInstallLog::ORDER_TYPE_NORMAL])); if ($is_can_confirm_sub) { $is_can_confirm = false; } $newItem['integral_price'] = $item->integral_price; $newItem['verify_card'] = $cards; $newItem['is_comment'] = (!$orderComment && $order->is_pay == Order::IS_PAY_TRUE && $order->trade_status == Order::ORDER_FLOW_CONFIRM) ? 1 : 0; $newItem['goods_id'] = $item['goods_id']; $newItem['order_detail_id'] = $item['id']; $newItem['name'] = $item['goods_name'] ?: $goods['name']; $newItem['total_price'] = $item['total_price']; $newItem['num'] = $item['num']; $newItem['attr'] = json_decode($item['attr']); $newItem['food_ext_goods'] = (array)json_decode($item['food_ext_goods'], true); $num += intval($item['num']); $newItem['goods_pic'] = $item['pic'] ?: $goods['cover_pic']; if ($item['is_refund'] == 1) { $newItem['is_order_refund'] = 1; } else { $newItem['is_order_refund'] = 0; } if ($order->is_pay == 1 && ($order->trade_status == Order::ORDER_FLOW_CONFIRM) && $order->order_type != 4 && intval($order->is_sale) === 0) { $newItem['order_refund_enable'] = 1; } else { $newItem['order_refund_enable'] = 0; } $holderLevelConditionDay = null; foreach ($holderLevelOption as $holderLevelOptionItem) { if (\in_array($item['goods_id'], $holderLevelOptionItem['goods_ids'])) { $holderLevelConditionDay = $holderLevelOptionItem['day']; break; } } if ($order->trade_status == Order::ORDER_FLOW_CONFIRM && intval($order->is_sale) === 0) { // if ($holderLevelConditionDay === null) { // $after_sale_time = Option::get(OptionSetting::STORE_AFTER_SALE_TIME, $this->store_id); // } else { // $after_sale_time = $holderLevelConditionDay; // } // if ((time() - $order->confirm_time) > $after_sale_time['value'] * 86400) {//超过可售后时间 $newItem['order_refund_enable'] = 1; // } } if($item['is_level'] == 1 && ($order->discount && $order->discount < 10)){ $newItem['is_level'] = 1; } // 商品配送方式信息 $newItem['delivery_type'] = $item['delivery_type']; $newItem['shop'] = []; if ($item['delivery_type'] == OrderDetail::GOODS_DELIVERY_SHOP) { $shop_info = Shop::find()->where(['id' => $item['shop_id']])->asArray()->one(); $newItem['shop']['address'] = $shop_info['address']; $newItem['shop']['id'] = $shop_info['id']; $newItem['shop']['name'] = $shop_info['name']; $newItem['shop']['mobile'] = $shop_info['mobile']; } $newItem['order_form']['is_form'] = $goods['is_form']; $newItem['order_form']['name'] = $goods['form_name']; $newItem['order_form']['list'] = OrderForm::find()->where(['order_id' => $order->id, 'goods_id' => $item['goods_id']])->asArray()->all(); foreach ($newItem['order_form']['list'] as &$form_item) { $form_item['default'] = $form_item['value']; if ($form_item['type'] == "checkbox" || $form_item['type'] == "radio") { $list = explode(',', $form_item['value']); $list_arr = []; foreach ($list as &$list_item) { $arr = []; $arr['name'] = $list_item; $arr['checked'] = true; array_push($list_arr, $arr); } $form_item['default_list'] = $list_arr; } $form_item['name'] = $form_item['key']; unset($form_item['key']); } //是否是云仓转单信息 if($item['order_transit_id']>0){ $transitInfo = OrderTransit::find()->where(['id'=>$item['order_transit_id'],'is_delete'=>0])->one(); if($transitInfo->attributes['send_type'] == 1){ //正常物流 $newItem['cloudInfo']['send_type'] = $transitInfo->attributes['send_type']; $newItem['cloudInfo']['express_name'] = $transitInfo->attributes['express_name']; $newItem['cloudInfo']['express_no'] = $transitInfo->attributes['express_no']; // 查询物流信息 $model = new ExpressDetail(); $model->express = $order->express; $model->express_no = $order->express_no; $model->receive_mobile = $order->mobile; $model->store_id = $this->store_id; $res = $model->search(); $express_detail = []; if ($res['code'] != 0) { $express_detail['list'] = []; $express_detail['status'] = 0; $express_detail['status_text'] = '未知'; } else { $express_detail = $res['data']; } $newItem['cloudInfo']['express_detail'] = $express_detail; }elseif($transitInfo->attributes['send_type'] == 2){ //同城配送 $newItem['cloudInfo']['send_type'] = $transitInfo->attributes['send_type']; }else{ $newItem['cloudInfo'] = false; //未发货 } }else{ $newItem['cloudInfo'] = false; //不是可转单 } //配送时间逻辑 $delivery_rules = DeliveryRules::find()->where(['id' => $goods_model->delivery_rules_id, 'is_delete' => 0, 'status' => 1, 'store_id' => get_store_id()])->select('type, times, days, name')->asArray()->one(); if ($delivery_rules) { $days = "下单" . $delivery_rules['days'] . "天后"; $delivery_rules['times'] = (int)$delivery_rules['type'] === 1 ? $days : date("m月d日 H:i:s", $delivery_rules['times']); $delivery_rules['type'] .= ''; } $newItem['delivery_rules'] = $delivery_rules ?: null; $newList[] = $newItem; } if ($order->before_update_price) { if ($order->before_update_price < $order->pay_price) { $before_update = "加价"; $money = $order->pay_price - $order->before_update_price; } else { $before_update = "优惠"; $money = $order->before_update_price - $order->pay_price; } } else { $before_update = ""; $money = ""; } if(!$order->integral){ $order->integral = 0; } // 查询物流信息 $model = new ExpressDetail(); $model->express = $order->express; $model->express_no = $order->express_no; $model->receive_mobile = $order->mobile; $model->store_id = $this->store_id; $res = $model->search(); $express_detail = []; if ($res['code'] != 0) { $express_detail['list'] = []; $express_detail['status'] = 0; $express_detail['status_text'] = '未知'; } else { $express_detail = $res['data']; } $deliveryInfo = null; $deliveryKeloop = null; if ($order->is_delivery == 1 && intval($order->trade_status) !== -1) { $deliveryInfo = DeliveryInfo::find()->where(['order_no' => $order->order_no])->asArray()->one(); if ($deliveryInfo) { $deliveryInfo['rider'] = [ 'real_name' => '-', 'avatar' => null, 'star' => '0.00', 'mobile' => null ]; $deliveryInfo['is_can_comment'] = 0; $deliveryInfo['order_star'] = 0; $deliveryInfo['order_status'] = '待接单'; $deliveryInfo['comment_tags'] = []; $rider = LocalDeliveryCourier::find()->where(['id' => $deliveryInfo['rider_id']]) ->select('id, real_name, avatar, star, mobile')->asArray()->one(); if (!empty($rider)) { $rider['star'] *= 5; $deliveryInfo['rider'] = $rider; if($deliveryInfo['local_status'] == DeliveryInfo::LOCAL_STATUS_SENDING) { $deliveryInfo['order_status'] = '配送中'; } elseif($deliveryInfo['local_status'] == DeliveryInfo::LOCAL_STATUS_WAITING) { $deliveryInfo['order_status'] = '待取货'; } elseif($deliveryInfo['local_status'] == DeliveryInfo::LOCAL_STATUS_CONFIRM) { $deliveryInfo['order_status'] = '已送达'; $comment = LocalDeliveryCourierComment::findOne(['d_order_id' => $deliveryInfo['id'], 'rider_id' => $deliveryInfo['rider_id']]); if (!$comment) { $deliveryInfo['is_can_comment'] = 1; $courierTag = LocalDeliveryCourierTag::find()->where(['is_delete' => 0, 'is_show' => 1]) ->select('id, star, tag')->asArray()->all(); $star_key = array_column($courierTag, 'star'); sort($star_key); $tag_arr = []; foreach ($star_key as $key) { $tag_arr[$key] = []; foreach ($courierTag as $tag) { if ($tag['star'] == $key) { $tag_arr[$key][] = $tag; } } } $deliveryInfo['comment_tags'] = $tag_arr; } else { $deliveryInfo['order_star'] = $comment->star; } } } } $keloopOrderInfo = null; $deliveryKeloop = DeliveryKeloop::find()->where(['order_no' => $order->order_no])->asArray()->one(); if ($deliveryKeloop) { $deliveryKeloop['delivery_status_name'] = KeloopForm::$order_status_list[$deliveryKeloop['delivery_status']] ?? ''; $keloopOrderInfo = KeloopForm::getOrderInfo($order->store_id, $deliveryKeloop['trade_no']); } } $final_pay_type = []; $pay_type_list = []; $is_open_friend_pay = false; $pay_type_list_json = Option::get(OptionSetting::STORE_PAYMENT, get_store_id(), 'pay', Option::get(OptionSetting::STORE_PAYMENT, get_store_id(), 'store')['value']); if (!empty($pay_type_list_json)) { $pay_type_list_arr = Json::decode($pay_type_list_json['value']); $user_pay_list_json = Option::get('payment_' . $this->user_id, get_store_id(), 'user')['value']; if ($user_pay_list_json) { $user_pay_list_arr = Json::decode($user_pay_list_json); if (!empty($pay_type_list_arr)) { foreach ($pay_type_list_arr as $key => &$value) { if (isset($user_pay_list_arr[$key]) && $user_pay_list_arr[$key]['value'] == 0 && $value['value'] == 1) { $value['value'] = 0; } } } } if (!isset($pay_type_list_arr)) { $pay_type_list_arr = [ 'wechat'=> [ 'text' => '微信支付', 'value' => 1 ], 'alipay' => [ 'text' => '支付宝支付', 'value' => 1 ], 'huodao' => [ 'text' => '货到付款', 'value' => 1 ], 'friend' => [ 'text' => '朋友代付', 'value' => 1, ], ]; } foreach ($pay_type_list_arr as $index => $pay_type) { if ($index == 'friend' && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => '朋友代付', 'payment' => 7, ]; $is_open_friend_pay = true; } if (!is_alipay_platform() && $index == 'wechat' && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => '微信支付', 'payment' => 1, ]; } if ((is_alipay_platform() || is_h5()) && $index == 'alipay' && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => '支付宝支付', 'payment' => 4, ]; } if (is_toutiao_platform()) { $pay_type_list[] = [ 'name' => '线上支付', 'payment' => 5, ]; } if ($index == 'huodao' && $pay_type['value'] == 1 && $order->pay_type != Order::PAY_TYPE_COD) { $pay_type_list[] = [ 'name' => '货到付款', 'payment' => 2, ]; } if ((is_app_platform() || is_wechat_platform()) && $index == Order::PAY_TYPE_KEY_ADAPAY_WX && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => Order::PAY_TYPE_NAME_ADAPAY_WX, 'payment' => Order::PAY_TYPE_ADAPAY_WX, ]; } if ((is_wechat_platform()) && $index == Order::PAY_TYPE_KEY_WX_B2B && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => Order::PAY_TYPE_NAME_WX_B2B, 'payment' => Order::PAY_TYPE_WX_B2B, ]; } if ((is_app_platform() || is_alipay_platform()) && $index == Order::PAY_TYPE_KEY_ADAPAY_ALIPAY && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => Order::PAY_TYPE_NAME_ADAPAY_ALIPAY, 'payment' => Order::PAY_TYPE_ADAPAY_ALIPAY, ]; } if ($index == Order::PAY_TYPE_KEY_ADAPAY_QUICKPAY_FRONTPAY && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => Order::PAY_TYPE_NAME_ADAPAY_QUICKPAY_FRONTPAY, 'payment' => Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY, ]; } if ((is_wechat_platform()) && $index == Order::PAY_TYPE_KEY_HUIFU_V2_JSPAY_WX && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => Order::PAY_TYPE_NAME_HUIFU_V2_JSPAY_WX, 'payment' => Order::PAY_TYPE_HUIFU_V2_JSPAY_WX, ]; } if ($index == Order::PAY_TYPE_KEY_ALLINPAY_WX && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => Order::PAY_TYPE_NAME_ALLINPAY_WX, 'payment' => Order::PAY_TYPE_ALLINPAY_WX, ]; } if ($index == Order::PAY_TYPE_KEY_OFFLINE && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => Order::PAY_TYPE_NAME_OFFLINE, 'payment' => Order::PAY_TYPE_OFFLINE, ]; } if ($index == Order::PAY_TYPE_KEY_MONTH && $pay_type['value'] == 1) { $pay_type_list[] = [ 'name' => Order::PAY_TYPE_NAME_MONTH, 'payment' => Order::PAY_TYPE_MONTH, ]; } } } // 判断是否开启好友代付 if ($order->food_flag_id > 0) { if ($order->md_id > 0) { $md = Md::findOne($order->md_id); $food_payment = $md->food_payment; } else if($order['mch_id'] > 0){ $mchModel = Mch::findOne($order['mch_id']); $food_payment = $mchModel->food_payment; } else { $store = Store::findOne($order->store_id); $food_payment = $store->food_payment; } if (!empty($food_payment)) { $pay_type_list = []; $food_pay_type = Json::decode($food_payment); foreach ($food_pay_type as &$value) { if ($value['key'] == 'friend') { $value['payment'] = 7; if(!$value['name']){ $value['name'] = "朋友代付"; } } if ($value['key'] == 'alipay') { $value['payment'] = 4; if(!$value['name']){ $value['name'] = "支付宝支付"; } } if ($value['key'] == 'wechat') { $value['payment'] = 1; if(!$value['name']){ $value['name'] = "微信支付"; } } if ($value['key'] == 'huodao') { $value['payment'] = 2; if(!$value['name']){ $value['name'] = "货到付款"; } } } foreach ($food_pay_type as $k => $val) { if ($val['payment'] == 4 && is_wechat_platform() || ($val['payment'] == 4 && intval($val['value']) === 0)) { unset($food_pay_type[$k]); } if ($val['payment'] == 1 && is_alipay_platform() || ($val['payment'] == 1 && intval($val['value']) === 0)) { unset($food_pay_type[$k]); } if ($val['payment'] == 7 && intval($val['value']) === 0) { unset($food_pay_type[$k]); } if ($val['payment'] == 2 && intval($val['value']) === 0) { unset($food_pay_type[$k]); } if ($val['payment'] == 5 && intval($val['value']) === 0) { unset($food_pay_type[$k]); } } $food_pay_type = array_values($food_pay_type); $final_pay_type = $food_pay_type; } } else { $final_pay_type = $pay_type_list; } // 订单人信息 $user = User::findOne($order->user_id); $user_info = [ 'name' => $user->nickname, 'avatar' => $user->avatar_url ]; if($user->binding){ $saas_user = SaasUser::findOne(['mobile' => $user->binding]); }else{ if($user->alipay_open_id){ $saas_user = SaasUser::findOne(['ali_user_id' => $user->alipay_open_id]); } } if($saas_user){ $user_info = [ 'name' => $saas_user->name, 'avatar' => $saas_user->avatar ]; } // 代付人信息 $pay_user_info = []; if ($order->pay_user_id > 0) { $pay_saas_user = SaasUser::findOne(['mobile' => User::findOne($order->pay_user_id)->binding]); $pay_user_info = [ 'name' => $pay_saas_user->name, 'mobile' => $pay_saas_user->mobile ]; } // 门店信息 $md_info = []; if ($order->md_id > 0) { $md = Md::findOne($order->md_id); $md_info = [ 'name' => $md->name, 'address' => District::findOne($md->province)->name . District::findOne($md->city)->name . District::findOne($md->district)->name . $md->address, 'latitude' => $md->latitude, 'longitude' => $md->longitude, 'mobile' => $md->mobile, 'distance' => Tools::getDistance($md->latitude, $md->longitude, get_params('latitude'), get_params('longitude')) ]; }else if ($order->mch_id > 0) { $mchInfo = (new \app\modules\admin\models\MchForm(['mch_id' => $order->mch_id, 'lat' => get_params('latitude'), 'lng' => get_params('longitude')]))->mchInfo(); $md_info = [ 'name' => $mchInfo['data']->name, 'address' => District::findOne($mchInfo['data']->province_id)->name . District::findOne($mchInfo['data']->city_id)->name . District::findOne($mchInfo['data']->district_id)->name . $mchInfo['data']->address, 'latitude' => $mchInfo['data']->latitude, 'longitude' => $mchInfo['data']->longitude, 'mobile' => $mchInfo['data']->tel, 'distance' => $mchInfo['dis'], ]; } else { $store = Store::findOne($order->store_id); $province_name = District::findOne($store->province_id)->name; $city_name = District::findOne($store->city_id)->name; $district_name = District::findOne($store->district_id)->name; $lat = ''; $long = ''; $coordinate = explode(',', $store->coordinate); if ($coordinate) { $lat = $coordinate[0]; $long = $coordinate[1]; } $md_info = [ 'name' => $store->name, 'address' => $province_name .$city_name . $district_name . $store->address, 'latitude' => $lat, 'longitude' => $long, 'mobile' => $store->contact_tel, 'distance' => Tools::getDistance($lat, $long, get_params('latitude'), get_params('longitude')) ]; } $food_num = null; $food_type = 0; if (!empty($order->food_flag_id)) { $FoodFlag = FoodFlag::findOne($order->food_flag_id); $FoodNum = FoodTableNumber::findOne($FoodFlag->table_num); $food_num = $FoodNum->num; $food_type = $FoodFlag->type; } $LevelOrderPrice = 0; if ($order->level_order_id) { $LevelOrder = LevelOrder::findOne($order->level_order_id); $LevelOrderPrice = $LevelOrder->pay_price; } $diy_shop_name = Option::get(OptionSetting::DIY_SHOP_NAME, get_store_id(), 'pay', Option::get(OptionSetting::DIY_SHOP_NAME, get_store_id(), 'store', '自提配送')['value'] ?: '自提配送')['value']; $diy_express_name = Option::get(OptionSetting::DIY_EXPRESS_NAME, get_store_id(), 'pay', Option::get(OptionSetting::DIY_EXPRESS_NAME, get_store_id(), 'store', '快递配送')['value'] ?: '快递配送')['value']; $diy_delivery_name = Option::get(OptionSetting::DIY_DELIVERY_NAME, get_store_id(), 'pay', Option::get(OptionSetting::DIY_DELIVERY_NAME, get_store_id(), 'store', '同城配送')['value'] ?: '同城配送')['value']; $allinpayConf = \app\utils\Allinpay\Allinpay::conf($this->store_id); $allinpay_app_wx_mini_id_type = $allinpayConf['app_wx_gh_id_type']; $allinpay_app_wx_mini_id = $allinpayConf['app_wx_gh_id']; $adapayConf = \app\utils\Adapay\Adapay::conf($this->store_id); //小程序版本 0-正式版; 1-测试版; 2-体验版 $app_wx_mini_id_type = $adapayConf['app_wx_gh_id_type']; //微信开放平台 --- 绑定的微信小程序的 --- 原始id $app_wx_mini_id = $adapayConf['app_wx_gh_id']; $app_alipay_mini_id = $adapayConf['app_alipay_mini_id']; $app_user_code = 'app_user_code_' . md5(microtime(true)); cache()->set($app_user_code, $this->user_id, 60 * 3); ($order->pay_type == Order::PAY_TYPE_OFFLINE) && $payOffLine = \app\models\OrderPayOffline::getPayByOrderId($order->store_id, $order->id); $tencent_map_key = Option::get('tencent_map_key', 0, 'saas', '')['value']; if ($this->store_id > 0) { $tencent_map_key = Option::get(OptionSetting::TENCENT_MAP_KEY, $this->store_id, 'pay', Option::get(OptionSetting::TENCENT_MAP_KEY, $this->store_id, 'store', '')['value'] ?: $tencent_map_key)['value']; } $orderTransit = OrderTransit::findOne(['order_id' => $order->id, 'is_delete' => 0]); if($orderTransit){ $supplierStbz = \app\models\Supplier::findOne(['cloud_supplier_id' => $orderTransit->cloud_supplier_id, 'is_stbz' => 1]); } if($orderTransit && $supplierStbz){ $token = get_merchant_token(0, $order->store_id); $stbzRrfund = (new \app\modules\alliance\models\purchase\order\OrderListForm)->stbzRrfundOrderHandle($token, $orderTransit->cloud_order_id, 1); } $hideBtn = self::hideBtn($order); return [ 'code' => 0, 'msg' => 'success', 'template_id' => NoticeAction::getSendTamplateId(['order_cancel', 'order_send'], is_h5() ? 'wxaapi' : 'miapp'), 'stbzRrfund' => $stbzRrfund, 'data' => [ 'order' => $order, 'hideBtn' => $hideBtn, 'givingGiftsOrderData' => \app\modules\admin\models\givingGifts\GivingGiftsForm::givingGiftsOrderData($order), 'payOffLine' => $payOffLine ?? [], 'app_user_code' => $app_user_code, 'allinpay_app_wx_mini_id' => $allinpay_app_wx_mini_id, 'allinpay_app_wx_mini_id_type' => $allinpay_app_wx_mini_id_type, 'app_wx_mini_id' => $app_wx_mini_id, 'app_wx_mini_id_type' => $app_wx_mini_id_type, 'app_alipay_mini_id' => $app_alipay_mini_id, 'activity_cut_price_order_id' => $order->activity_cut_price_order_id, 'alipay_activity_voucher' => AlipayAcitvityVoucherOrder::getByOrder($order->alipay_trade_no), 'verify_card' => $cards ?? [], 'coupon_card' => $coupon_cards, 'shop_name' => $order->md_id > 0 || !empty($md_info['name']) ? $md_info['name'] : '平台自营', 'pay_user_info' => $pay_user_info, 'pay_user_id' => $order->pay_user_id, 'pay_type_list' => $final_pay_type, 'pay_type_list_default' => Option::get(OptionSetting::STORE_PAYMENT_DEFAULT, $order->store_id, 'pay', Option::get(OptionSetting::STORE_PAYMENT_DEFAULT, $order->store_id, 'store')['value'])['value'], 'is_delivery' => $order->is_delivery, 'express_detail' => $express_detail ?? [], 'order_id' => $order->id, 'is_pay' => $order->is_pay, 'status' => $status, 'express' => $order->express, 'express_no' => $order->express_no, 'name' => $order->name, 'mobile' => $order->mobile, 'address' => $order->address, 'order_no' => $order->order_no, 'rand_discount' => $order->rand_discount, 'level_diff_price' => $order->level_diff_price, 'addtime' => date('Y-m-d H:i:s', $order->created_at), 'total_price' => doubleval(sprintf('%.2f', $order->total_price)), 'express_price' => doubleval(sprintf('%.2f', $order->express_price)), 'tax_price' => doubleval(sprintf('%.2f', $order->tax_price)), 'invoice' => \app\models\OrderInvoice::findOne(['order_id' => $order['id'], 'is_delete' => 0]), 'goods_total_price' => doubleval(sprintf('%.2f', $sum_goods_price)), 'coupon_sub_price' => $order->coupon_sub_price ?? 0, 'pay_price' => sprintf("%1.2f", $order->pay_price), 'num' => $num, 'level_card_price' => $LevelOrderPrice, 'md_info' => $md_info, 'goods_list' => $newList, 'is_offline' => $order->is_offline, 'diy_express_name' => intval($order->is_offline) === 1 ? $diy_shop_name : (intval($order->is_delivery) === 1 ? $diy_delivery_name : $diy_express_name), 'content' => $order->content ? $order->content : "", 'before_update' => $before_update, 'money' => $money, 'discount' => $order->discount, 'user_coupon_id' => $order->user_coupon_id, 'words' => $order->words, 'pay_type' => $order->pay_type, 'integral'=> json_decode($order->integral), 'apply_delete' => $order->apply_delete, 'trade_status' => $order->trade_status, 'type' => $order->type, 'order_type' => $order->order_type, 'book' => $book, 'book_man_info' => json_decode($order->book_info, true) ?? [], 'book_info' => OrderForm::findAll(['order_id' => $order->id]), 'cancel_reason' => Delivery::$validReason, 'delivery_info' => $deliveryInfo, 'delivery_keloop' => $deliveryKeloop, 'keloopOrderInfo' => $keloopOrderInfo, 'flag_id' => $order->food_flag_id, 'food_code' => $order->food_code, 'food_num' => $food_num, 'food_type' => $food_type, 'food_book_ext' => $order->food_book_ext ? Json::decode($order->food_book_ext) : [], 'open_friend_pay' => intval($is_open_friend_pay), 'user_info' => $user_info, 'integral_price' => $order->integral_price, 'balance' => $order->balance, 'is_can_confirm' => $is_can_confirm, 'tencent_map_key' => $tencent_map_key, //20240816订单详情增加联盟券显示 'take_price' => $order->take_price, 'send_price' => $order->send_price, 'integral_appreciation_price' => $order->integral_appreciation_price ], ]; } public static function hideBtn($order) { $hide = [ 'hideBtnCancel' => 0, 'hideBtnRefund' => 0, ]; $LocalPublicRankingTask = \app\models\LocalPublicRankingTask::findOne(['order_id' => $order['id']]); if($LocalPublicRankingTask){ $hide['hideBtnCancel'] = 1; $hide['hideBtnRefund'] = 1; } return $hide; } //点金计划订单详情 public function goldplan($orderNo = '') { try{ $order = Order::findOne([ 'order_no' => $orderNo, ]); if(!$order){ throw new \Exception('订单信息不存在'); } $store = Store::findOne($order->store_id); $price = $order->pay_price; // $deliveryInfo = null; // if ($order->is_delivery == 1) { // $deliveryInfo = DeliveryInfo::find()->where(['order_no' => $order->order_no])->one(); // $deliveryInfo && $price += $deliveryInfo->fee; // } return [ 'code' => 0, 'msg' => 'ok', 'data' => [ 'store' => [ 'name' => $store->name, 'logo' => $store->logo, ], 'order' => [ 'order_no_last' => substr($orderNo, -4), 'is_pay' => $order->is_pay, 'pay_price' => sprintf('%.2f', $price), ], ], ]; } catch (\Exception $ex) { \Yii::error($ex); return [ 'code' => 1, 'msg' => '系统错误,' . $ex->getMessage(), ]; } } /** * @description: 地图-导航收货人地址 * @return Array */ public function map(): array { $order = Order::findOne([ 'store_id' => $this->store_id, 'id' => $this->order_id, 'is_delete' => 0, 'is_recycle' => 0, ]); if (!$order) { return [ 'code' => 1, 'msg' => '订单不存在', ]; } $tencent_map_key = Option::get('tencent_map_key', 0, 'saas', '')['value']; if ($this->store_id > 0) { $tencent_map_key = Option::get(OptionSetting::TENCENT_MAP_KEY, $this->store_id, 'pay', Option::get(OptionSetting::TENCENT_MAP_KEY, $this->store_id, 'store', '')['value'] ?: $tencent_map_key)['value']; } $url = 'https://apis.map.qq.com/ws/geocoder/v1/?'; $params = [ 'key' => $tencent_map_key, 'address' => $order->address, ]; $url .= http_build_query($params); $json = file_get_contents($url); $result = json_decode($json, true); if ($result['status'] == 0) { $rider = [ 'lat' => 0, 'lng' => 0, 'distance' => 0 ]; $deliveryInfo = DeliveryInfo::findOne(['order_no' => $order->order_no, 'is_delete' => 0]); if ($deliveryInfo) { if ($deliveryInfo['last_latitude'] > 0 && $deliveryInfo['last_longitude'] > 0) { $distance = Tools::getDistance($deliveryInfo['last_latitude'], $deliveryInfo['last_longitude'], $result['result']['location']['lat'], $result['result']['location']['lng']); $rider = [ 'lat' => floatval($deliveryInfo['last_latitude']), 'lng' => floatval($deliveryInfo['last_longitude']), 'distance' => $distance ]; } } $deliveryInfo = DeliveryKeloop::findOne(['order_no' => $order->order_no, 'is_delete' => 0]); if ($deliveryInfo && $order->trade_status == Order::ORDER_FLOW_SEND) { $getCourierTag = KeloopForm::getCourierTag($deliveryInfo->store_id, $deliveryInfo->trade_no); $rider['$getCourierTag'] = $getCourierTag; if (!$getCourierTag['code']) { $lng = $getCourierTag['data']['longitude']; $lat = $getCourierTag['data']['latitude']; $distance = Tools::getDistance($lat, $lng, $result['result']['location']['lat'], $result['result']['location']['lng']); $rider = [ 'lat' => floatval($lat), 'lng' => floatval($lng), 'distance' => $distance ]; } $keloopOrderInfo = KeloopForm::getOrderInfo($deliveryInfo->store_id, $deliveryInfo->trade_no); $rider['$keloopOrderInfo'] = $keloopOrderInfo; if(!$keloopOrderInfo['code']){ if($keloopOrderInfo['data']['pre_deliver_times'] && $keloopOrderInfo['data']['status'] == KeloopForm::DELIVERY_STATUS_DELIVERING){ $rider['distance'] .= ' -预计' . date('H时i分送达', $keloopOrderInfo['data']['pre_deliver_times']); } } } return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'location' => $result['result']['location'], 'title' => $result['result']['title'], 'rider' => $rider, 'tencent_map_key' => $tencent_map_key ] ]; } else { return [ 'code' => 0, 'msg' => 'error', 'data' => $result['message'] ]; } } }