| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\client\models\v1;
- use app\constants\OptionSetting;
- use app\jobs\AlipayThirdOrderJob;
- use app\models\AgentGoodsInstallLog;
- use app\models\common\ExpressDetail;
- use app\models\Coupon;
- use app\models\DeliveryInfo;
- use app\models\DeliveryRules;
- use app\models\District;
- use app\models\FoodFlag;
- use app\models\FoodTableNumber;
- use app\models\Goods;
- use app\models\LevelOrder;
- use app\models\LocalDeliveryCourier;
- use app\models\LocalDeliveryCourierComment;
- use app\models\LocalDeliveryCourierTag;
- use app\models\Mch;
- use app\models\Md;
- use app\models\Option;
- use app\models\Order;
- use app\models\OrderComment;
- use app\models\OrderDetail;
- use app\models\OrderForm;
- use app\models\OrderGoodsCancel;
- use app\models\OrderRefund;
- use app\models\SaasUser;
- use app\models\Shop;
- use app\models\Store;
- use app\models\User;
- use app\models\UserCoupon;
- use app\models\VerifyCard;
- use app\models\OrderTransit;
- use app\models\VerifyCardAccount;
- use app\models\VerifyCardSale;
- use app\utils\Delivery\Delivery;
- use app\utils\Tools;
- use yii\base\Model;
- use yii\helpers\Json;
- use yii\helpers\Json as HelpersJson;
- use \app\models\AlipayAcitvityVoucherOrder;
- use app\utils\Notice\NoticeAction;
- use app\models\DeliveryMaiyatian;
- use app\models\DeliveryKeloop;
- use app\modules\admin\models\keloop\KeloopForm;
- class OrderDetailForm extends Model
- {
- public $store_id;
- public $user_id;
- public $order_id;
- public $order_no;
- public $order_user_id;
- public $delivery_type;
- public $latitude;
- public $longitude;
- public function rules()
- {
- return [
- [['order_id'], 'required'],
- ];
- }
- public function search()
- {
- if (!$this->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']
- ];
- }
- }
- }
|