123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047 |
- <?php
- namespace App\Http\Controllers;
- use App\Models\DwbsUser;
- use App\Models\ExpressStorage;
- use App\Models\Goods;
- use App\Models\InventoryW;
- use App\Models\Order;
- use App\Models\OrderDetail;
- use App\Models\OrderDetailW;
- use App\Models\OrderRefund;
- use App\Models\OrderRefundW;
- use App\Models\See;
- use App\Models\SettingW;
- use App\Models\Store;
- use App\Models\VipLogW;
- use App\Models\User;
- use App\Models\UserZ;
- use App\Models\ZbsBasic;
- use App\Models\UserStorage;
- use App\Models\UserW;
- use App\Models\OrderW;
- use App\Models\AddressW;
- use App\Models\StoreGoods;
- use App\Models\StoreGoodsSku;
- use App\Models\ZbsEnroll;
- use Illuminate\Http\Request;
- use GuzzleHttp\Client;
- use App\Jobs\PayOrderAddCreditsJob;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\Storage;
- use Illuminate\Support\Facades\Config;
- use Illuminate\Support\Facades\Crypt;
- use Intervention\Image\Facades\Image as Image;
- use Qiniu\Auth as Auths;
- use Qiniu\Storage\UploadManager;
- use Validator;
- use Carbon\Carbon;
- class StoreGoodsController extends Controller{
- //获取商品sku
- public function getGoodsTaps(Request $request){
- $type=$request->input('type');
- $user_id=Auth::user()->id;
- $store_id=Store::where('user_id',$user_id)->value('id');
- $goods=StoreGoods::where('is_delete',0)->where('is_shelves',1)->select('id','name','img','price','vip_price','main_attr')->orderByDesc('sort')->orderBy('id')->get();
- $inventory=InventoryW::where('store_id',$store_id)->pluck('num',DB::raw("CONCAT(store_id,'_',goods_id,'_',sku_id)"))->toArray();
- foreach($goods as $key=>$val){
- $goods[$key]->imgs=str_replace('http://','https://',$val->img);
- $second=mt_rand(3600,7200);
- if(Cache::has('goods_id_'.$val->id.'_sku')){
- $sku= Cache::get('goods_id_'.$val->id.'_sku');
- }else{
- $sku=StoreGoodsSku::where('goods_id',$val->id)->groupBy('type')->pluck('type');
- Cache::add('goods_id_'.$val->id.'_sku',$sku,$second);
- }
- $goods[$key]->sku=$sku;
- $size=[];
- foreach($sku as $k=>$v){
- if(Cache::has('goods_id_'.$val->id.'_'.$v.'_sku')){
- $skuInfo= Cache::get('goods_id_'.$val->id.'_'.$v.'_sku');
- }else{
- $skuInfo=StoreGoodsSku::where('goods_id',$val->id)->where('type',$v)->select('id','size')->orderBy('sort')->get();
- Cache::put('goods_id_'.$val->id.'_'.$v.'_sku',$skuInfo,$second);
- }
- foreach($skuInfo as $ks => $vs){
- $info=$vs;
- $info->type=$v;
- if(empty($inventory[$store_id.'_'.$val->id.'_'.$vs->id])){
- $info->num=0;
- }else{
- $info->num=$inventory[$store_id.'_'.$val->id.'_'.$vs->id];
- }
- $info->isChecked=false;
- // if($type==1 && $k==0 && $ks==0){
- // $info->isChecked=true;
- // }
- $size[$v][$ks]=$info;
- }
- $goods[$key]->size=$size;
- }
- }
- return $this->success($goods);
- }
- //获取店铺用户
- public function getStoreUser(Request $request){
- $input=$request->all();
- $user_id=Auth::user()->id;
- $time=Carbon::now()->toDateTimeString();
- $level=User::where('id',$user_id)->value('level');
- if($level==1 && $time>'2023-02-03 09:00:00'){
- return $this->error('451101','该店铺不能进行代下单','该店铺不能进行代下单');
- }
- $store_id=Store::where('user_id',$user_id)->value('id');
- $user_ids=OrderW::where('store_id',$store_id)->groupBy('user_id')->pluck('user_id');
- $user=UserW::whereIn('id',$user_ids);
- $search_name=$input['search_name'];
- if(!empty($search_name)){
- $user->where(function($query)use($search_name){
- $query->where('nickname','like','%'.$search_name.'%')
- ->orWhere('phone','like','%'.$search_name.'%');
- });
- }
- $list=$user->orderBy('id')->get();
- Log::info('已下单顾客信息');
- Log::info($store_id);
- $mobiles = [];
- if(empty($list)){
- Log::info('没有已下单顾客信息');
- Log::info($list);
- return $this->success([]);
- }
- foreach($list as $key=>$val){
- $uu=User::where('mobile',$val->phone)
- ->where(function($query){
- $query->where('cert_status',3)
- ->orWhere('cert_status',6);
- })
- ->where('service_status',0)->whereNull('deleted_at')->pluck('uuid');
- foreach($uu as $v){
- $mobiles[] = Crypt::decryptString($v);
- break;
- }
- }
- Log::info('count:'.count($list));
- $client = new Client(['headers' => [
- "User-Agent" => 'Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:0.9.4)',
- "Content-type" => 'application/json'
- ]]);
- $url='https://weidian.cliu.cc/api/crypt/getCryptData';
- $data = [
- 'form_params' => [
- 'list' => array_column($list->toArray(),'id'),
- 'store_id' => $store_id,
- 'mobiles' => $mobiles
- ],
- 'timeout' => 300
- ];
- $data=$client->post($url,$data);
- $ids=$data->getBody()->getContents();
- $ids = json_decode($ids, true);
- $ll = UserW::whereIn('id',$ids)->get();
- Log::info('count_ll:'.count($ll));
- return $this->success($ll);
- }
- //获取商品信息
- public function getGoods(){
- $data=[];
- $goods=StoreGoods::where('is_delete',0)->where('is_shelves',1)->pluck('name','id');
- $type=['男款','女款'];
- $size=['S','M','L','XL','XXL','XXXL'];
- $data['goods']=$goods;
- $data['type']=$type;
- $data['size']=$size;
- return $this->success($data);
- }
- public function getGoodsDetail(Request $request){
- $goods_id=$request->input('goods_id');
- $goods=StoreGoods::with('goodSku')->where('id',$goods_id)->first();
- $goods->imgs=str_replace('http://','https://',$goods->img);
- return $this->success($goods);
- }
- //获取商品列表
- public function getGoodsList(Request $request){
- $input=$request->all();
- $page_index=$input['page_index'];
- $page_size=$input['page_size'];
- $num=$page_size*($page_index-1);
- $goods_id=$input['goods_id'];
- if(!is_array($input['ids'])){
- $ids=json_decode($input['ids'],true);
- }else{
- $ids=$input['ids'];
- }
- $data=StoreGoodsSku::with(['goods:id,name,price,img'])
- ->whereHas('goods',function($query){
- $query->where('is_delete',0)->where('is_shelves',1);
- });
- if(!empty($goods_id)){
- $data ->where('goods_id',$goods_id);
- }
- if(!empty($ids)){
- $data->whereIn('id',$ids);
- }
- $count=$data->count();
- $list=$data->orderByDesc('goods_id')->orderByDesc('goods_id')
- ->skip($num)->take($page_size)
- ->get();
- return $this->success_list($list,'成功',$count);
- }
- //分享商品
- public function shareGoods(Request $request){
- $input=$request->all();
- $sku_id=$input['sku_id'];
- $info=StoreGoodsSku::with(['goods'])->whereHas('goods',function($query){
- $query->where('is_delete',0)->where('is_shelves',1);
- })->where('id',$sku_id)
- ->orderByDesc('goods_id')->orderByDesc('goods_id')->get();
- return $this->success($info);
- }
- //上传图片
- public function uploadImg(Request $request){
- $path_url = 'public/goods';
- $path = $request->file('img')->store($path_url);
- if($path){
- $url = env('APP_URL'). \Storage::url($path);
- return $this->success($url);
- }
- return $this->error();
- }
- /*--授权书---*/
- public function auth_code(Request $request){
- $user=User::find($request->id);
- if ($user->cert_status==3||$user->cert_status==6){
- if ($user->auth_startime &&$user->auth_code){
- if ($user->auth_img==null){
- $name=$user->realname==null?$user->nickname:$user->realname;
- $url=$this->auth_create($name,$user->mobile,judge_level($user->level),$user->auth_code,$user->auth_startime,$user->auth_endtime,$user->id);
- $user->auth_img=$url;
- $user->save();
- }
- $data['status']=0;
- }else{
- $data['status']=1;
- }
- }else{
- $data['status']=1;
- }
- if ($user->service_status==1){
- // return $this->error(50021,'','该代理尚未通过客服审核');
- return $this->error(50021,'','该账号尚未通过经销商审核');
- }
- if ($user->service_status==2){
- // return $this->error(50021,'','该代理的申请已被客服驳回');
- return $this->error(50021,'','该账号的申请已被经销商驳回');
- }
- $data['auth_startime']=strtotime($user->auth_startime)*1000;
- $data['auth_endtime']=strtotime($user->auth_endtime)*1000;
- $data['code']=$user->auth_code;
- $data['phone']=$user->mobile;
- $data['level_name']=judge_level($user->level);
- $data['realname']=$user->realname==null?$user->nickname:$user->realname;
- $data['url']=$user->auth_img==null?'':$user->auth_img;
- return $data;
- }
- public function auth_create($name,$phone,$level_name,$auth_code,$time_start,$time_end,$num){
- $client=new Client();
- $url='http://api.app.cliu.cc/138.jpg';
- $avatarResponse = $client->get($url);
- $img = Image::make($avatarResponse->getBody()->getContents());
- $img->text($name, 400, 565,function ($font){
- $font->file(base_path().'/public/fangzheng.ttf');
- $font->size(25);
- $font->angle(0);
- });
- $img->text($phone, 400, 635,function ($font){
- $font->file(base_path().'/public/fangzheng.ttf');
- $font->size(25);
- $font->angle(0);
- });
- $img->text($level_name, 350, 820,function ($font){
- $font->file(base_path().'/public/fangzheng.ttf');
- $font->size(60);
- $font->angle(0);
- });
- $img->text($auth_code, 285, 965,function ($font){
- $font->file(base_path().'/public/fangzheng.ttf');
- $font->size(25);
- $font->angle(0);
- });
- $year=mb_substr($time_start,0,4);
- $month=mb_substr($time_start,5,2);
- $day=mb_substr($time_start,8,2);
- $year_t=mb_substr($time_end,0,4);
- $month_t=mb_substr($time_end,5,2);
- $day_t=mb_substr($time_end,8,2);
- $img->text("{$year}年{$month}月{$day}日 - {$year_t}年{$month_t}月{$day_t}日", 285, 1050,function ($font){
- $font->file(base_path().'/public/fangzheng.ttf');
- $font->size(25);
- $font->angle(0);
- });
- $name=$this->rand_code($num);
- $img->save(base_path().'/public/public/uploads/auth_img/'.$name.'.jpg');
- return env('APP_URL').'/public/uploads/auth_img/'.$name.'.jpg';
- }
- public function rand_code($num){
- $code='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
- $str=$num."_";
- $str_1='';
- for ($i=0;$i<20;$i++){
- $int=rand(0,34);
- $str_1.=mb_substr($code,$int,1);
- }
- $str=$str.mb_substr(time(),2,3).$str_1;
- return $str.mb_substr(time(),7,3);
- }
- //获取所有取消订单信息
- public function getCancelOrderList(Request $request){
- $user_id=Auth::user()->id;
- $store_id=Store::where('user_id',$user_id)->value('id');
- $page_index=$request->input('page_index');
- $page_size=$request->input('page_size');
- $order_no=$request->input('order_no');
- $num=$page_size*($page_index-1);
- $data= OrderW::with(['user:id,nickname,phone','order_cancel'=>function($query){$query->where('using',1);},'refund','store:id,name,img,phone'])
- ->where('store_id',$store_id)
- ->whereIn('apply_cancel',[1,2,3]);
- if($order_no){
- $data->where('order_no','like','%'.$order_no.'%');
- }
- $count= $data->count();
- $orders= $data->orderByDesc('cancel_at')->skip($num)->take($page_size)->get();
- foreach($orders as $key=>$val){
- $goods_ids=OrderDetailW::where('order_no',$val->order_no)->groupBy('goods_id')->pluck('goods_id');
- $goods=[];
- foreach($goods_ids as $k=>$v){
- $goods[$k]=StoreGoods::select('id','name','img','main_attr')->where('id',$v)->first();
- $goods[$k]->sku=OrderDetailW::where('order_no',$val->order_no)->where('goods_id',$v)->get();
- if(count($goods[$k]->sku)>0){
- $goods[$k]->price=$goods[$k]->sku[0]->price;
- }
- }
- $orders[$key]->goods=$goods;
- }
- return $this->success_list($orders,'成功',$count);
- }
- //获取所有退货订单
- public function getAllRefundOrder(Request $request)
- {
- $user_id=Auth::user()->id;
- $store_id=Store::where('user_id',$user_id)->value('id');
- $page_index=$request->input('page_index');
- $page_size=$request->input('page_size');
- $num=$page_size*($page_index-1);
- $refund_no=$request->input('refund_no');
- $data=OrderRefundW::with('store:id,name,phone')->where('store_id',$store_id);
- if($refund_no){
- $data->where('refund_no','like','%'.$refund_no.'%');
- }
- $total= $data->count();
- $refunds = $data->orderBy('id','desc')->skip($num)->take($page_size)->get();
- foreach($refunds as $key=>$val){
- $goods=[];
- $goods_ids=OrderDetailW::where('order_no',$val->refund_no)->groupBy('goods_id')->pluck('goods_id');
- foreach($goods_ids as $k=>$v){
- $goods[$k]=StoreGoods::where('id',$v)->first();
- $goods[$k]->sku=OrderDetailW::where('order_no',$val->refund_no)->where('goods_id',$v)->get();
- }
- $refunds[$key]->goods=$goods;
- }
- return $this->success_list($refunds,'成功',$total);
- }
- //获取退货订单详情
- public function getRefundOrderDetail(Request $request)
- {
- $refund_id = $request->input('refund_id');
- //获取订单信息(id)
- $order = OrderRefundW::with(['store:id,name,img,phone'])->where('id', $refund_id)->first();
- $goods_ids = OrderDetailW::where('order_no', $order->refund_no)->groupBy('goods_id')->pluck('goods_id');
- $goods = [];
- foreach ($goods_ids as $key => $val) {
- $goods[$key] = StoreGoods::where('id', $val)->first();
- $goods[$key]->sku = OrderDetailW::where('order_no', $order->refund_no)->where('goods_id', $val)->get();
- }
- $order->goods = $goods;
- return $this->success($order);
- }
- //删除订单
- public function deleteOriginOrder(Request $request){
- $order_id=$request->input('order_id');
- $res=OrderW::where('id',$order_id)->delete();
- if($res){
- return $this->success([]);
- }else{
- return $this->error();
- }
- }
- //取消退货审核
- public function cancelRefundOrder(Request $request){
- $refund_id=$request->input('refund_id');
- $refund=OrderRefundW::where('id',$refund_id)->first();
- if(empty($refund)){
- return $this->error('450001','退货单不存在');
- }
- $count=OrderRefundW::where('order_no',$refund->order_no)->count();
- try{
- DB::transaction(function()use($count,$refund){
- if($count==1){
- OrderW::where('order_no',$refund->order_no)->update([
- 'is_refund'=>0
- ]);
- }elseif($count>1){
- OrderW::where('order_no',$refund->order_no)->update([
- 'is_refund'=>2
- ]);
- }
- OrderRefundW::where('id',$refund->id)->delete();
- },5);
- return $this->success([]);
- }catch(\Exception $e){
- return $this->error('450001',$e->getMessage());
- }
- }
- //修改订单物流信息
- public function editExpress(Request $request){
- $input=$request->all();
- $rules=[
- 'express_no' =>'required',
- 'express_company'=>'required',
- 'express_time' =>'required'
- ];
- $message=[
- 'express_no.required' =>'发货单号不能为空.',
- 'express_company.required'=>'物流公司不能为空.',
- 'express_time.required' =>'发货时间不能为空.'
- ];
- $validator = Validator::make($input,$rules,$message);
- if($validator->fails()){
- return $this->error('400013',$validator->errors()->first());
- }
- $res=OrderW::where('order_no',$input['order_no'])->update([
- 'express_no'=>str_replace(' ','', $input['express_no']),
- 'express_company'=>$input['express_company'],
- 'express_code'=>$input['express_code'],
- 'express_state'=>0,
- 'express_info'=>null,
- 'express_receive_time'=>null,
- 'express_phone'=>$input['express_phone'],
- 'express_time'=>$input['express_time']
- ]);
- if($res){
- return $this->success([]);
- }else{
- return $this->error();
- }
- }
- //添加微信二维码
- public function uploadWxQrCodeImg(Request $request){
- Log::info(Auth::user()->id.'---'.Auth::user()->nickname.'---变更了微信二维码');
- // $path_url = 'public/wxQrCode/'.date("Ymd");
- $file=$request->file('img');
- $extension=['jpg','png','jpeg'];//,'xbm','tif','tiff','pjp','svgz','ico','gif','svg','webp','bpm','pjpeg','avif','xbm','tif','tiff','pjp','svgz','ico','gif','svg','webp','bpm','pjpeg','avif'
- $fileextension=$file->getClientOriginalExtension();
- Log::info(Auth::user()->id.'---'.Auth::user()->nickname.'---'.$fileextension);
- $fileextension=strtolower($fileextension);
- if(!in_array($fileextension,$extension)){
- return $this->error('450001','上传图片格式有误,当前文件格式为:'.$fileextension);
- }
- // $path = $file->store($path_url);
- // 获取七牛云配置信息
- $config = [
- 'driver' => 'qiniu',
- 'domain' => 'http://image.chuliu.cc', //七牛域名
- 'access_key' => 'cIbo9JAqHBgO6uw97gT5fJOlEHiTiGrpB84unVEn', //AccessKey
- 'secret_key' => '4f0nTNNrvzOsFc6Rz0GC5DntiJRnk2GcfkyJFNQp', //SecretKey
- 'bucket' => 'daweiboshi-app', //Bucket名字
- 'dirname'=> 'daweiboshi-weidian'
- ];
- // 构建鉴权对象
- $auth = new Auths($config['access_key'], $config['secret_key']);
- // 生成上传 Token
- $token = $auth->uploadToken($config['bucket']);
- //获取文件的绝对路径,但是获取到的在本地不能打开
- $filePath = $file->getRealPath();
- //获取文件的扩展名
- $ext = $file->getClientOriginalExtension();
- // 新文件名
- $filename =date('His') . uniqid(mt_rand(10000,99999)) .'.'. $ext;
- $dirname=$config['dirname'];
- // 初始化 UploadManager 对象并进行文件的上传。
- $uploadMgr = new UploadManager();
- // 调用 UploadManager 的 putFile 方法进行文件的上传。
- $pathname= $dirname.'/wxQrCode/'.date('Ymd').'/'.$filename;
- try{
- $uploadMgr->putFile($token, $pathname, $filePath);
- }catch(\Exception $e){
- return $this->error('450001',$e->getMessage(),$e->getMessage());
- }
- // 获取文件完整路径
- $url = $config['domain'].'/'.$pathname;
- if($url){
- $user_id=Auth::user()->id;
- $res=Store::where('user_id',$user_id)->update(['qr_code'=>$url]);
- if($res){
- return $this->success($url);
- }else{
- return $this->error('450001','二维码上传失败');
- }
- }else{
- return $this->error('450001','二维码上传失败');
- }
- }
- //销收数据
- public function getSaleInfo(Request $request){
- $cycle=$request->input('cycle');
- $startime=$request->input('startime');
- $endtime=$request->input('endtime');
- $agent_id=Auth::user()->id;
- $store_id=Store::where('status',0)->where('user_id',$agent_id)->value('id');
- $data=OrderW::with('user')->where('store_id',$store_id)
- ->where('is_pay',1)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1]);
- if(!empty($startime) && !empty($endtime)){
- $data->whereBetween('created_at',[date("Y-m-d 00:00:00",strtotime($startime)),date("Y-m-d 23:59:59",strtotime($endtime))]);
- }else{
- switch($cycle){
- case 'daily':
- $data->whereDate('created_at',date("Y-m-d",strtotime('-1 day')));
- break;
- case 'today':
- $data->whereDate('created_at',date("Y-m-d"));
- break;
- case 'week':
- $w=date('w');
- if($w==0){
- $w=7;
- }
- $w-=1;
- $data->whereBetween('created_at',[date("Y-m-d 00:00:00",strtotime("-$w day")),date("Y-m-d 23:59:59")]);
- break;
- case 'month':
- $data->whereBetween('created_at',[date("Y-m-01 00:00:00"),date("Y-m-d 23:59:59")]);
- break;
- // case 'quarter':
- // $start=(ceil(date("m")/3)-1)*3+1;
- // $data->whereBetween('created_at',[date("Y-".$start."-01 00:00:00"),date("Y-m-d 23:59:59")]);
- // break;
- default:
- $data->where([]);
- }
- }
- $order_nos=$data->pluck('order_no');
- $goods_ids=StoreGoods::where('is_shelves',1)->select('id','name','main_attr')->get()->toArray();
- $sale_info=[];
- // return $order_nos;
- foreach($goods_ids as $key=>$val){
- $order_details=OrderDetailW::with('goods:id,name,main_attr,img')
- ->where('goods_id',$val['id'])->whereIn('order_no',$order_nos)
- ->select('goods_id',DB::raw('sum(num) as num'),DB::raw('sum(ifNUll(account,0)) as account'))
- ->first()->toArray();
- if(empty($order_details['goods'])){
- $order_details['goods_id']=$val['id'];
- $order_details['num']=0;
- $order_details['account']=0;
- $order_details['goods']=$val;
- }
- $sale_info[$key]=$order_details;
- }
- return $this->success($sale_info);
- }
- //销售曲线
- public function getSaleAccount(Request $request){
- $cycle=$request->input('cycle');
- $startime=$request->input('startime');
- $endtime=$request->input('endtime');
- $agent_id=Auth::user()->id;
- $store_id=Store::where('status',0)->where('user_id',$agent_id)->value('id');
- switch($cycle){
- case 'daily':
- case 'today':
- $type='daily';
- $date=$this->getDateFromRange(date("Y-m-d",strtotime('-1 day')),date("Y-m-d"));
- break;
- case 'week':
- $w=date('w');
- if($w==0){
- $w=7;
- }
- $w-=1;
- $type='daily';
- $date=$this->getDateFromRange(date("Y-m-d",strtotime("-$w day")),date("Y-m-d"));
- break;
- case 'month':
- $type='daily';
- $date=$this->getDateFromRange(date("Y-m-01"),date("Y-m-d"));
- break;
- default:
- $time=OrderW::with('user')->where('store_id',$store_id)
- ->where('is_pay',1)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
- ->pluck('created_at')->toArray();
- if(count($time)>=2) {
- $max_time = date("Y-m-d", strtotime(max($time)));
- $min_time = date("Y-m-d", strtotime(min($time)));
- $datetime1 = date_create($max_time); //格式化日期
- $datetime2 = date_create($min_time); //格式化日期
- $interval = date_diff($datetime1, $datetime2);
- if ($interval->format('%a') > 31) {
- $type = 'month';
- $date = $this->dateMonths($min_time, $max_time);
- } else {
- $type = 'daily';
- $date = $this->getDateFromRange($min_time, $max_time);
- }
- }else{
- $type='daily';
- $date=$this->getDateFromRange(date("Y-m-d",strtotime("-1 days")),date("Y-m-d"));
- }
- }
- if(!empty($startime) && !empty($endtime)){
- $max_time=date("Y-m-d",strtotime($endtime));
- $min_time=date("Y-m-d",strtotime($startime));
- $datetime1 = date_create($max_time); //格式化日期
- $datetime2 = date_create($min_time); //格式化日期
- $interval = date_diff($datetime1, $datetime2);
- if($interval->format('%a') > 31){
- $type='month';
- $date=$this->dateMonths($min_time,$max_time);
- }else{
- $type='daily';
- $date=$this->getDateFromRange($min_time,$max_time);
- }
- }
- $stores=[];
- foreach($date as $key=>$val){
- if($type=='daily'){
- $order_nos=OrderW::with('user')->where('store_id',$store_id)
- ->where('is_pay',1)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
- ->whereDate('created_at',$val)->pluck('order_no');
- }else{
- $order_nos=OrderW::with('user')->where('store_id',$store_id)
- ->where('is_pay',1)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
- ->whereMonth('created_at',$val)->pluck('order_no');
- }
- $stores[$val]=OrderDetailW::with('goods:id,name,main_attr,img')->whereIn('order_no',$order_nos)->groupBy('goods_id')
- ->select('goods_id',DB::raw('sum(num) as num'),DB::raw('sum(ifNUll(account,0)) as account'))
- ->get();
- }
- $goods=StoreGoods::where('is_shelves',1)->select('id','name','main_attr')->get();
- $data['store']=$stores;
- $data['goods']=$goods;
- return $this->success($data);
- }
- function getDateFromRange($startdate, $enddate){
- $stimestamp = strtotime($startdate);
- $etimestamp = strtotime($enddate);
- // 计算日期段内有多少天
- $days = ($etimestamp-$stimestamp)/86400+1;
- // 保存每天日期
- $date = array();
- for($i=0; $i<$days; $i++){
- $date[] = date('Y-m-d', $stimestamp+(86400*$i));
- }
- return $date;
- }
- /**
- * 计算出两个日期之间的月份区间
- * @author Eric
- * @param [type] $start_date [开始日期,如2014-03]
- * @param [type] $end_date [结束日期,如2015-12]
- * @param string $explode [年份和月份之间分隔符,此例为 - ]
- * @param boolean $addOne [算取完之后最后是否加一月,用于算取时间戳用]
- * @return [type] [返回是两个月份之间所有月份字符串]
- */
- function dateMonthsSections($start_date,$end_date,$explode='-',$addOne=false){
- $data = $this->dateMonths($start_date,$end_date,$explode,$addOne);
- $length = sizeof($data);
- $res = array();
- foreach ($data as $key => $value) {
- if($key < ($length-1)){
- $date1 = $value;
- $date2 = $data[$key + 1];
- $res[$key][0] = $date1;
- $res[$key][1] = $date2;
- }
- }
- return $res;
- }
- /**
- * 计算出两个日期之间的月份
- * @author Eric
- * @param [type] $start_date [开始日期,如2014-03]
- * @param [type] $end_date [结束日期,如2015-12]
- * @param string $explode [年份和月份之间分隔符,此例为 - ]
- * @param boolean $addOne [算取完之后最后是否加一月,用于算取时间戳用]
- * @return [type] [返回是两个月份之间所有月份字符串]
- */
- function dateMonths($start_date,$end_date,$explode='-',$addOne=false){
- //判断两个时间是不是需要调换顺序
- $start_date=date("Y-m",strtotime($start_date));
- $end_date=date("Y-m",strtotime($end_date));
- $start_int = strtotime($start_date);
- $end_int = strtotime($end_date);
- if($start_int > $end_int){
- $tmp = $start_date;
- $start_date = $end_date;
- $end_date = $tmp;
- }
- //结束时间月份+1,如果是13则为新年的一月份
- $start_arr = explode($explode,$start_date);
- $start_year = intval($start_arr[0]);
- $start_month = intval($start_arr[1]);
- $end_arr = explode($explode,$end_date);
- $end_year = intval($end_arr[0]);
- $end_month = intval($end_arr[1]);
- $data = array();
- $data[] = $start_date;
- $tmp_month = $start_month;
- $tmp_year = $start_year;
- //如果起止不相等,一直循环
- while (!(($tmp_month == $end_month) && ($tmp_year == $end_year))) {
- $tmp_month ++;
- //超过十二月份,到新年的一月份
- if($tmp_month > 12){
- $tmp_month = 1;
- $tmp_year++;
- }
- $data[] = $tmp_year.$explode.str_pad($tmp_month,2,'0',STR_PAD_LEFT);
- }
- if($addOne == true){
- $tmp_month ++;
- //超过十二月份,到新年的一月份
- if($tmp_month > 12){
- $tmp_month = 1;
- $tmp_year++;
- }
- $data[] = $tmp_year.$explode.str_pad($tmp_month,2,'0',STR_PAD_LEFT);
- }
- return $data;
- }
- //获取操作全部视频
- public function getAllVideo(){
- $setting=SettingW::all();
- return $this->success($setting);
- }
- public function getUserData(Request $request){
- $cycle=$request->input('cycle');
- $user_id=Auth::user()->id;
- $store_id=Store::where('user_id',$user_id)->value('id');
- $data=OrderW::where('store_id',$store_id)
- ->where('is_pay',1)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
- ->select(DB::raw('ifnull(sum(total),0) as total'),DB::raw('ifnull(sum(account),0) as account'));
- switch($cycle){
- case 'yesterday':
- $type='yesterday';
- $where=function($query){
- $query->whereDate('created_at',date("Y-m-d",strtotime('-1 day')));
- };
- $date=$this->getDateFromRange(date("Y-m-d",strtotime('-1 day')),date("Y-m-d"));
- break;
- case 'today':
- $type='today';
- $where=function($query){
- $query->whereDate('created_at',date("Y-m-d",strtotime('-1 day')));
- };
- $date=$this->getDateFromRange(date("Y-m-d",strtotime('-1 day')),date("Y-m-d"));
- break;
- case 'week':
- $type='week';
- $w=date('w');
- if($w==0){
- $w=7;
- }
- $w-=1;
- $where=function($query)use($w){
- $query->whereBetween('created_at',[date("Y-m-d 00:00:00",strtotime("-$w day")),date("Y-m-d 23:59:59")]);
- };
- $date=$this->getDateFromRange(date("Y-m-d",strtotime("-$w day")),date("Y-m-d"));
- break;
- case 'month':
- $type='month';
- $where=function($query){
- $query->whereBetween('created_at',[date("Y-m-01 00:00:00"),date("Y-m-d 23:59:59")]);
- };
- $date=$this->getDateFromRange(date("Y-m-01"),date("Y-m-d"));
- break;
- default:
- $where=[];
- $time=OrderW::with('user')->where('store_id',$store_id)
- ->where('is_pay',1)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
- ->pluck('created_at')->toArray();
- if(count($time)>=2){
- $max_time=date("Y-m-d",strtotime(max($time)));
- $min_time=date("Y-m-d",strtotime(min($time)));
- $datetime1 = date_create($max_time); //格式化日期
- $datetime2 = date_create($min_time); //格式化日期
- $interval = date_diff($datetime1, $datetime2);
- if($interval->format('%a') > 31){
- $type='all';
- $date=$this->dateMonths($min_time,$max_time);
- }else{
- $type='daily';
- $date=$this->getDateFromRange($min_time,$max_time);
- }
- }else{
- $type='daily';
- $date=$this->getDateFromRange(date("Y-m-d",strtotime("-1 days")),date("Y-m-d"));
- }
- }
- $data->where($where);
- $data1=clone $data;
- $list=$data->first()->toArray();
- $users=$data1->whereHas('user',function($query)use($where){
- $query->where($where);
- })->groupBy('user_id')->get();
- $list['type']=$type;
- $list['count']=$users->count();
- foreach($date as $key=>$val){
- if($type=='yesterday' || $type=='today' || $type=='week' || $type=='month'){
- $user_ids=OrderW::where('store_id',$store_id)
- ->where('is_pay',1)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
- ->where('store_id',$store_id)->whereDate('created_at',$val)->groupBy('user_id')->pluck('user_id');
- $line[$val]=UserW::whereDate('created_at',$val)->whereIn('id',$user_ids)->count();
- }else{
- Log::info('two');
- $timestamp=strtotime($val);
- $start=Carbon::parse($timestamp)->tz('PRC')->startOfMonth()->toDateTimeString();
- $end=Carbon::parse($timestamp)->tz('PRC')->endOfMonth()->toDateTimeString();
- $user_ids=OrderW::query()->where('store_id',$store_id)->whereBetween('created_at',[$start,$end])->groupBy('user_id')->pluck('user_id');
- $line[$val]=UserW::whereBetween('created_at',[$start,$end])->whereIn('id',$user_ids)->count();
- }
- }
- Log::info('123122222');
- $list['line']=$line;
- return $this->success($list);
- }
- public function getUserList(Request $request){
- // dispatch(new PayOrderAddCreditsJob('运行队列测试123--00--123'));
- $cycle=$request->input('cycle');
- $search_name=$request->input('search_name');
- $page_index=$request->input('page_index');
- $page_size=$request->input('page_size');
- $num=$page_size*($page_index-1);
- $user_id=Auth::user()->id;
- $store_id=Store::where('user_id',$user_id)->value('id');
- $wheres=[];
- if($search_name){
- $wheres=function($query)use($search_name){
- $query->where('nickname','like','%'.$search_name.'%')->orWhere('phone','like','%'.$search_name.'%');
- };
- }
- switch($cycle){
- case 'yesterday':
- $where=function($query){
- $query->whereDate('created_at',date("Y-m-d",strtotime('-1 day')));
- };
- break;
- case 'today':
- $where=function($query){
- $query->whereDate('created_at',date("Y-m-d",strtotime('-1 day')));
- };
- break;
- case 'week':
- $w=date('w');
- if($w==0){
- $w=7;
- }
- $w-=1;
- $where=function($query)use($w){
- $query->whereBetween('created_at',[date("Y-m-d 00:00:00",strtotime("-$w day")),date("Y-m-d 23:59:59")]);
- };
- break;
- case 'month':
- $where=function($query){
- $query->whereBetween('created_at',[date("Y-m-01 00:00:00"),date("Y-m-d 23:59:59")]);
- };
- break;
- default:
- $where=[];
- }
- $count=OrderW::where('store_id',$store_id)
- ->where('is_pay',1)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
- ->select(DB::raw('ifnull(sum(total),0) as total'),DB::raw('ifnull(sum(account),0) as account'))
- ->whereHas('user',function($query)use($where,$wheres){
- $query->where($where)->where($wheres);
- })->groupBy('user_id')->get()->count();
- $list=OrderW::with('user:id,nickname,avatar')->where('store_id',$store_id)
- ->where('is_pay',1)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
- ->select('user_id',DB::raw('ifnull(sum(total),0) as total'),DB::raw('ifnull(sum(account),0) as account'))
- ->whereHas('user',function($query)use($where,$wheres){
- $query->where($where)->where($wheres);
- })->groupBy('user_id')->OrderByDesc('total')->OrderByDesc('account')->OrderBy('user_id')->skip($num)->take($page_size)->get();
- return $this->success_list($list,'',$count);
- }
- public function getSeeUserData(Request $request){
- $cycle=$request->input('cycle');
- $user_id=Auth::user()->id;
- $store_id=Store::where('user_id',$user_id)->value('id');
- switch($cycle){
- case 'yesterday':
- $type='yesterday';
- $where=function($query){
- $query->whereDate('created_at',date("Y-m-d",strtotime('-1 day')));
- };
- $date=$this->getDateFromRange(date("Y-m-d",strtotime('-1 day')),date("Y-m-d"));
- break;
- case 'today':
- $type='today';
- $where=function($query){
- $query->whereDate('created_at',date("Y-m-d",strtotime('-1 day')));
- };
- $date=$this->getDateFromRange(date("Y-m-d",strtotime('-1 day')),date("Y-m-d"));
- break;
- case 'week':
- $type='week';
- $w=date('w');
- if($w==0){
- $w=7;
- }
- $w-=1;
- $where=function($query)use($w){
- $query->whereBetween('created_at',[date("Y-m-d 00:00:00",strtotime("-$w day")),date("Y-m-d 23:59:59")]);
- };
- $date=$this->getDateFromRange(date("Y-m-d",strtotime("-$w day")),date("Y-m-d"));
- break;
- case 'month':
- $type='month';
- $where=function($query){
- $query->whereBetween('created_at',[date("Y-m-01 00:00:00"),date("Y-m-d 23:59:59")]);
- };
- $date=$this->getDateFromRange(date("Y-m-01"),date("Y-m-d"));
- break;
- default:
- $where=[];
- $time=OrderW::with('user')->where('store_id',$store_id)
- ->where('is_pay',1)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
- ->pluck('created_at')->toArray();
- if(count($time)>=2){
- $max_time=date("Y-m-d",strtotime(max($time)));
- $min_time=date("Y-m-d",strtotime(min($time)));
- $datetime1 = date_create($max_time); //格式化日期
- $datetime2 = date_create($min_time); //格式化日期
- $interval = date_diff($datetime1, $datetime2);
- if($interval->format('%a') > 31){
- $type='all';
- $date=$this->dateMonths($min_time,$max_time);
- }else{
- $type='daily';
- $date=$this->getDateFromRange($min_time,$max_time);
- }
- }else{
- $type='daily';
- $date=$this->getDateFromRange(date("Y-m-d",strtotime("-1 days")),date("Y-m-d"));
- }
- }
- $list=[];
- $list['count']=See::where($where)->where('store_id',$store_id)->groupBy('user_id')->get()->count();
- foreach($date as $key=>$val){
- if($type=='yesterday' || $type=='today' || $type=='week' || $type=='month'){
- $user_ids=See::where('store_id',$store_id)->whereDate('created_at',$val)->groupBy('user_id')->pluck('user_id');
- }else{
- $timestamp=strtotime($val);
- $start=Carbon::parse($timestamp)->tz('PRC')->startOfMonth()->toDateTimeString();
- $end=Carbon::parse($timestamp)->tz('PRC')->endOfMonth()->toDateTimeString();
- $user_ids=See::query()->where('store_id',$store_id)->whereBetween('created_at',[$start,$end])->groupBy('user_id')->pluck('user_id');
- }
- $line[$val]=count($user_ids);
- }
- $list['line']=$line;
- return $this->success($list);
- }
- public function getSeeUserList(Request $request){
- $cycle=$request->input('cycle');
- $search_name=$request->input('search_name');
- $page_index=$request->input('page_index');
- $page_size=$request->input('page_size');
- $num=$page_size*($page_index-1);
- $user_id=Auth::user()->id;
- $store_id=Store::where('user_id',$user_id)->value('id');
- switch($cycle){
- case 'yesterday':
- $where=function($query){
- $query->whereDate('created_at',date("Y-m-d",strtotime('-1 day')));
- };
- break;
- case 'today':
- $where=function($query){
- $query->whereDate('created_at',date("Y-m-d",strtotime('-1 day')));
- };
- break;
- case 'week':
- $w=date('w');
- if($w==0){
- $w=7;
- }
- $w-=1;
- $where=function($query)use($w){
- $query->whereBetween('created_at',[date("Y-m-d 00:00:00",strtotime("-$w day")),date("Y-m-d 23:59:59")]);
- };
- break;
- case 'month':
- $where=function($query){
- $query->whereBetween('created_at',[date("Y-m-01 00:00:00"),date("Y-m-d 23:59:59")]);
- };
- break;
- default:
- $where=[];
- }
- $count=See::where($where)->where('store_id',$store_id)->whereHas('user',function($query)use($search_name){
- $query->where('nickname','like','%'.$search_name.'%')->orWhere('phone','like','%'.$search_name.'%');
- })->count();
- $list=See::with(['user:id,nickname,avatar','goods:id,name,img'])
- ->whereHas('user',function($query)use($search_name){
- $query->where('nickname','like','%'.$search_name.'%')->orWhere('phone','like','%'.$search_name.'%');
- })
- ->where($where)->where('store_id',$store_id)->orderByDesc('created_at')->skip($num)->take($page_size)->get();
- return $this->success_list($list,'',$count);
- }
- //设置店铺商品库存
- public function setStoreGoodsInventory(Request $request){
- $data=$request->input('data');
- $user_id=Auth::user()->id;
- $store_id=Store::where('user_id',$user_id)->value('id');
- foreach($data as $key=>$val){
- $sku=StoreGoodsSku::where('id',$val[0])->first();
- if($sku){
- InventoryW::updateOrCreate(
- [
- 'store_id'=>$store_id,
- 'goods_id'=>$sku->goods_id,
- 'sku_id'=>$val[0],
- 'size'=>$sku->size,
- 'type'=>$sku->type
- ],
- [
- 'num'=>$val[1]
- ]
- );
- }
- }
- return $this->success([]);
- }
- }
|