serve_tab; $title = $request->title; if (empty($title)) return $this->failure('请输入商品名'); $sub_title = $request->sub_title; if (empty($sub_title)) return $this->failure('商品简介不能为空'); $icon = $request->icon; $pay_type = $request->pay_type ?? 'wechat'; $price = $request->price; if (!is_numeric($price) || $price < 0) return $this->failure('请输入正确的价格'); $sku = $request->sku; $banners = $request->banners; // if(empty($banners)) return $this->failure('请上传至少一张商品轮播图'); $describe = $request->describe; if (empty($describe)) return $this->failure('请输入商品详细描述'); $is_show = $request->is_show ?? 0; $await_checkoutTextArray[] = $title; $await_checkoutTextArray[] = $sub_title; // $await_checkoutTextArray[] = $describe; //敏感词汇过滤 $result = \CommonUtilsService::checkoutTextArrayV3($await_checkoutTextArray); if ($result['code'] == 1) { return $this->failure($result['cause']); } //内容安全-图片 $result = \CommonUtilsService::imageContentCecurity([$request->icon]); if ($result && isset($result['result']) && $result['result']) { return $this->failure('图片' . $result['result'] . ',请换一张照片'); } $openid = MerchantAccount::where('id', $request->account_id)->value('openid'); $shop = new MerchantShop(); $shop->merchant_id = $request->account_id; $shop->title = $title; $shop->sub_title = $sub_title; $shop->icon = $icon; $shop->pay_type = $pay_type; $shop->price = $price; $shop->sku = json_encode($sku); // $shop->banners = json_encode($banners); if (!empty($request->banners)) $shop->banners = json_encode($banners); $shop->describe = $describe; $shop->is_show = $is_show; $shop->save(); $jump_url = urlencode(env('APP_URL') . '/pu/#/mallDetail/' . $shop->id); $url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $request->account_id . '&serve_tab=' . $serve_tab . '&url=' . $jump_url . '&from_openid=' . $openid; // $share_qrcode = $this->getPreviewQrcode($url); // $share_qrcode = Redis::get('ShopDetail_S '.$shop->id); // if(!$share_qrcode){ $share_qrcode = $this->getPreviewQrcode($url); // Redis::setex('ShopDetail_S '.$shop->id,60*60*24*30,$share_qrcode); // $share_qrcode = Redis::get('ShopDetail_S '.$shop->id); // } $shop->share_qrcode = $share_qrcode; $shop->save(); $rule = MEarningRule::where('m_id', $request->account_id) ->where('name', 'shop') ->where('type_id', 0) ->first(); if ($request->has('ratio') && $request->ratio >= 0) { if ($request->ratio > 1.0) { return $this->failure('利润分成比例不能大于100%'); } $MEarningRule = new MEarningRule(); $MEarningRule->m_id = $request->account_id; $MEarningRule->forzen_time = $rule?$rule->forzen_time : 1; $MEarningRule->name = 'shop'; $MEarningRule->ratio = $request->ratio; $MEarningRule->type_id = $shop->id; $MEarningRule->first_sharer = $rule?$rule->first_sharer:0.3; $MEarningRule->last_sharer = $rule?$rule->last_sharer:0.5; $MEarningRule->other_sharer = $rule?$rule->other_sharer:0.2; $MEarningRule->save(); } //保存后删除草稿箱缓存 if (Cache::has('drafts_shop_merchant_id_' . $request->account_id)) Cache::forget('drafts_shop_merchant_id_' . $request->account_id); return $this->success('ok', ['id' => $shop->id]); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 商户商品列表 * * * @param Request $request * @return JsonResponse|string */ public function platShops(Request $request){ try { $keyword = $request->keyword; $is_show = $request->is_show ?? 2; $merchant_id = $request->account_id; $shops = MerchantShop::where('merchant_id', $merchant_id); if ($is_show != 2) { $shops = $shops->where('is_show', $is_show); } if ($keyword) { $shops = $shops->where('title', 'like', '%' . $keyword . '%'); } $shops = $shops->orderBy('is_show', 'desc')->orderBy('is_top', 'desc')->orderBy('top_time', 'desc') ->orderBy('id', 'desc')->paginate(); foreach ($shops as $shop) { $member_count = TouristOrder::where('type', 'shop')->where('type_id', $shop->id)->where('pay_status', '<>', 0)->count(); $shop->member_count = $member_count; $pv = Redis::zscore('shop', $shop->id); $shop->pv = $pv ?: 0; } return $this->success('ok', $shops); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 编辑商品 * @param Request $request * @param $id * @return JsonResponse|string */ public function updateShop(Request $request,$id){ try { $shop = MerchantShop::find($id); $await_checkoutTextArray = []; // if(!is_numeric($request->price) || $request->price < 0) return $this->failure('请输入正确的价格'); if ($request->title && $request->title != $shop->title) { $shop->title = $request->title; $await_checkoutTextArray[] = $request->title; } if ($request->has('sub_title')) { $shop->sub_title = $request->sub_title; } if ($request->icon && $request->icon != $shop->icon) { $shop->icon = $request->icon; } if ($request->pay_type && $request->pay_type != $shop->pay_type) { $shop->pay_type = $request->pay_type; if ($request->pay_type == 'free') { $shop->sku = null; $shop->price = 0.00; } } if ($request->price && $request->price != $shop->price) { $shop->price = $request->price; } // $shop->price = $request->price??0; if ($request->has('sku') && json_encode($request->sku) != $shop->sku) { $shop->sku = json_encode($request->sku); } if ($request->banners && json_encode($request->banners) != $shop->banners) { $shop->banners = json_encode($request->banners); } if ($request->describe && $request->describe != $shop->describe) { $shop->describe = $request->describe; // $await_checkoutTextArray[] = $request->describe; } //敏感词汇过滤 $result = \CommonUtilsService::checkoutTextArrayV3($await_checkoutTextArray); if ($result['code'] == 1) { return $this->failure($result['cause']); } //内容安全-图片 $result = \CommonUtilsService::imageContentCecurity([$request->icon]); if ($result && isset($result['result']) && $result['result']) { return $this->failure('图片' . $result['result'] . ',请换一张照片'); } if ($request->has('is_show')) { $shop->is_show = $request->is_show; } if ($request->has('is_top')) { $shop->is_top = $request->is_top; $shop->top_time = $request->is_top ? date('Y-m-d H:i:s') : null; } if ($request->has('ratio') && $request->ratio >= 0.0) { if ($request->ratio > 1.0) { return $this->failure('利润分成不可以大于1'); } $MEarningRule = MEarningRule::where('m_id', $request->account_id)->where('type_id', $id) ->where('name', 'shop') ->first(); $rule = MEarningRule::where('m_id', $request->account_id) ->where('name', 'shop') ->where('type_id', 0) ->first(); if ($MEarningRule === null) { $MEarningRule = new MEarningRule(); $MEarningRule->forzen_time = $rule?$rule->forzen_time : 1; $MEarningRule->m_id = $request->account_id; $MEarningRule->name = 'shop'; $MEarningRule->ratio = $request->ratio; $MEarningRule->type_id = $id; $MEarningRule->first_sharer = $rule?$rule->first_sharer:0.3; $MEarningRule->last_sharer = $rule?$rule->last_sharer:0.5; $MEarningRule->other_sharer = $rule?$rule->other_sharer:0.2; $MEarningRule->save(); } elseif ($MEarningRule['ratio'] != $request->ratio) { $MEarningRule->forzen_time = $rule?$rule->forzen_time : 1; $MEarningRule->ratio = $request->ratio; $MEarningRule->first_sharer = $rule?$rule->first_sharer:0.3; $MEarningRule->last_sharer = $rule?$rule->last_sharer:0.5; $MEarningRule->other_sharer = $rule?$rule->other_sharer:0.2; $MEarningRule->save(); } } $shop->save(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 商品详情 * @param Request $request * @param $id * @return JsonResponse|string */ public function shopDetail(Request $request,$id){ try { $serve_tab = $request->serve_tab; $shop = MerchantShop::find($id); if ($shop->merchant_id != $request->account_id) { return $this->failure('商品不属于当前商家'); } $shop['ratio'] = MEarningRule::where('m_id', $request->account_id) ->where('name', 'shop')->where('type_id', $id) ->value('ratio'); if ($shop['ratio'] === null) { $shop['ratio'] = MEarningRule::where('m_id', $request->account_id) ->where('name', 'shop')->where('type_id', 0) ->value('ratio'); } $shop['ratio'] = number_format($shop['ratio'], 2); if ($shop->banners) $shop->banners = json_decode($shop->banners, true) ?? []; if ($shop->sku) $shop->sku = json_decode($shop->sku, true) ?? []; $jump_url = urlencode(env('APP_URL') . '/pu/#/mallDetail/' . $shop->id); $url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $request->account_id . '&serve_tab=' . $serve_tab . '&serve_tab=' . $serve_tab . '&anchor_openid=' . '&url=' . $jump_url; $shop->share_url = $url; Redis::zincrby('shop', 1, $id); return $this->success('ok', $shop); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 删除商品 * @param $id * @return JsonResponse|string */ public function removeShop($id){ try { MerchantShop::where('id', $id)->delete(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 填写物流信息 * @param Request $request * @param $id * @return JsonResponse|string */ public function remarkOrder(Request $request,$id){ $order = TouristOrder::where('id',$id)->first(); try { $express = $request->express; $express_trade_no = $request->express_trade_no; if (empty($express) || empty($express_trade_no)) return $this->failure('请按要求填写物流信息'); if ($order->pay_status == 0) return $this->failure('该订单尚未支付,无法填写'); $recive = ShopRecive::where('order_id', $order->id)->first(); if (!$recive) return $this->failure('订单信息有误'); $recive->express = $express; $recive->express_trade_no = $express_trade_no; $recive->order_status = 1; $recive->save(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 修改订单跟进状态 * @param Request $request * @param $id * @return JsonResponse|string */ public function updateOrderStatus(Request $request,$id){ try { $order = TouristOrder::find($id); $recive = ShopRecive::where('order_id', $id)->first(); $time = date('Y-m-d H:i:s'); if (!$order) return $this->failure('订单不存在,请重新确认'); $desc = $request->desc; // if (empty($desc)) return $this->failure('请输入详细的跟进信息'); $order_status = $request->order_status; if ($order_status == 3) { $record = array( array('chat_way' => '', 'chat_content' => '', 'chat_result' => '将订单标记为【问题订单】', 'time' => $time) ); } else { if (empty($order->remark)) { $record = array( array('chat_way' => $desc[0], 'chat_content' => $desc[1], 'chat_result' => $desc[2], 'time' => $time) ); } else { $record = json_decode($order->remark, true); $array = ['chat_way' => $desc[0], 'chat_content' => $desc[1], 'chat_result' => $desc[2], 'time' => $time]; array_push($record, $array); } } if ($request->order_status) $recive->order_status = $order_status; $order->remark = json_encode($record); $order->save(); $recive->save(); return $this->success('ok', $order); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function paidShopMember(Request $request,$id){ try { $keyword = $request->keyword; $merchant_id = $request->account_id; $shop = MerchantShop::find($id); $orders = TouristOrder::with('merUser')->where('merchant_id', $merchant_id)->whereIn('pay_status', [1, 4])->where('type', 'shop')->where('type_id', $id); if ($keyword) { $keyword = trim($keyword); $orders = $orders->where(function ($sql) use ($keyword) { $sql->where('name', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $orders = $orders->orderBy('id', 'desc')->paginate(); foreach ($orders as $key => $order) { if ($order->mobile == '匿名用户' || $order->mobile == '未获取') { $order->mobile = null; } if ($order['merUser'] != null && $order['merUser']['pic'] == null) { $order['merUser']['pic'] = User::DefaultAvatar; } if ($order['merUser'] != null && $order['merUser']['nickname'] == null) { $order['merUser']['nickname'] = '未获取'; } $user = MerchantUser::where('id', $order->account_id)->first(); $order->pay_user_name = $user->nickname ?? '匿名用户'; $order->pay_mobile = $user->mobile ?? '未获取'; $order->pay_avatar = $user->pic ?? User::DefaultAvatar; } return $this->success('ok', $orders); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 移动端商城详情 * @param Request $request * @param $shop_id * @return JsonResponse|string */ public function phoneShopDetail(Request $request,$shop_id){ try { $shop = MerchantShop::withTrashed()->where('id', $shop_id)->first(); $shop->banners = json_decode($shop->banners, true) ?? []; $shop->sku = json_decode($shop->sku, true) ?? []; $shop->pic = $shop->icon; unset($shop->icon); $shop->pv = Redis::zscore('shop', $shop_id) ?? 0;//访问人数 $shop->share_qr_code = $shop->share_qrcode; unset($shop->share_qrcode); //消费人数 $shop->consume_user_count = TouristOrder::where('type', 'shop')->where('type_id', $shop_id)->whereIn('pay_status', [1, 4])->groupBy('open_id')->get()->count(); //订单数 $shop->consume_order_count = TouristOrder::where('type', 'shop')->where('type_id', $shop_id)->whereIn('pay_status', [1, 4])->count(); //收入(元) $shop->income_amount = TouristOrder::where('type', 'shop')->where('type_id', $shop_id)->whereIn('pay_status', [1, 4])->sum('price'); //商家分成金额 $order_ids = TouristOrder::where('type', 'shop')->where('type_id', $shop_id)->whereIn('pay_status', [1, 4])->pluck('id')->toArray(); $shop->merchant_income_value = MEarning::whereIn('m_order_id', $order_ids)->where('m_user_id', 0)->sum('value'); //分成人头像 $avatar = []; $orders = TouristOrder::where('type', 'shop')->where('type_id', $shop_id)->whereIn('pay_status', [1, 4])->orderBy('id', 'desc')->limit(3)->get(); foreach ($orders as $key => $order) { $avatar[$key] = MerchantUser::where('id', $order->account_id)->value('pic') ?? User::DefaultAvatar; if (empty($avatar[$key])) $avatar[$key] = User::DefaultAvatar; } $shop->avatar = $avatar; //下架或删除状态 0下架 1正常上架 2已删除 $publish_state = 0; if ($shop->deleted_at) { $publish_state = 2; } elseif ($shop->is_show == 1) { $publish_state = 1; } else { $publish_state = 0; } $shop->publish_state = $publish_state; return $this->success('ok', $shop); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } }