123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Handlers\ExpressHandler;
- use App\Http\Controllers\Controller;
- use App\Models\DwbsUser;
- use App\Models\DwbsWarea;
- use App\Models\Goods;
- use App\Models\OrderCancel;
- use App\Models\OrderDetail;
- use App\Models\OrderRefund;
- use App\Models\Store;
- use App\Models\User;
- use App\Models\Order;
- use App\Models\Admin;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Log;
- class OrderController extends Controller
- {
- public function list(Request $request){
- $page_index=$request->input('page_index');
- $page_size=$request->input('page_size');
- $num=$page_size*($page_index-1);
- $admin_id=Auth::user()->id;
- $admin=Admin::where('id',$admin_id)->first();
- if($admin && in_array($admin->role_id,[22,24])){//超级管理员
- $data=Order::with(['user','store','address','cancel'=>function($query){$query->where('using',1);}]);
- }else{
- $warea_ids=DwbsWarea::where('admin_id',$admin_id)->pluck('id');
- $agent_ids=DwbsUser::whereIn('warea_id',$warea_ids)->pluck('id');
- $store_ids=Store::whereIn('user_id',$agent_ids)->pluck('id');
- $data=Order::whereIn('store_id',$store_ids)
- ->with(['user','store','address','cancel'=>function($query){$query->where('using',1);}]);
- }
- //筛选订单号
- if($request->has('order_no') && !empty($request->input('order_no'))){
- $data->where('order_no',"like","%".$request->input('order_no')."%");
- }
- //店铺名称手机号筛选
- if($request->has('agent_phone') && !empty($request->input('agent_phone'))){
- $store_ids=Store::where('phone','like',"%".$request->input('agent_phone')."%")
- ->orWhere('name','like',"%".$request->input('agent_phone')."%")->pluck('id');
- $data->whereIn('store_id',$store_ids);
- }
- //客户信息筛选
- if($request->has('user_phone') && !empty($request->input('user_phone'))){
- $user_ids=User::where('phone','like',"%".$request->input('user_phone')."%")
- ->orWhere('nickname','like',"%".$request->input('user_phone')."%")->pluck('id');
- $data->whereIn('user_id',$user_ids);
- }
- //状态筛选
- if($request->input('status')!='all'){
- if(!empty($request->input('status')) || $request->input('status')==0){
- $data->where('status',$request->input('status'));
- }
- }
- //筛选订单类型
- if($request->has('type') && !empty($request->input('type'))){
- switch($request->input('type')){
- case 1:
- $data->where('is_pay',1);
- $data->where('is_help',1);
- $data->where('self_pay',1);
- break;
- case 2:
- $data->where('is_pay',1);
- $data->where('is_help',1);
- $data->where('self_pay',0);
- break;
- case 3:
- $data->where('is_pay',1);
- $data->where('is_help',0);
- $data->where('self_pay',0);
- break;
- case 4:
- $data->where('is_pay',1);
- $data->where('is_help',0);
- $data->where('self_pay',1);
- break;
- default:
- $data->where([]);
- }
- }
- //日期时间筛选
- if($request->input('start_time') && $request->input('end_time')){
- $data->whereBetween('created_at',[$request->input('start_time'),$request->input('end_time')]);
- }
- $count=$data->count();
- $list=$data->orderBy('id','desc')->skip($num)->limit($page_size)->get();
- $wareas=DwbsWarea::pluck('name','id');
- $user_ids=Store::pluck('user_id');
- $store_user_ids=Store::pluck('user_id','id');
- $warea_user_ids=DwbsUser::withTrashed()->whereIn('id',$user_ids)->pluck('warea_id','id');
- foreach($list as $key=>$val){
- $user_id=$store_user_ids[$val->store_id];
- $warea_id=$warea_user_ids[$user_id];
- $list[$key]->warea=$wareas[$warea_id];
- }
- return $this->success_list($list,'成功',$count);
- }
- public function export(Request $request){
- ini_set('memory_limit', '4096M');
- // $list=Order::orderBy('id','desc')
- // ->select('id','order_no','created_at','user_id','store_id','status','account','total','self_receive','express_receive_time','remark')
- //// ->limit(1000)
- // ->get();
- //return $this->success($list);
- $admin_id=Auth::user()->id;
- $admin=Admin::where('id',$admin_id)->first();
- if($admin && in_array($admin->role_id,[22,24])) {//超级管理员
- $data=Order::with(['user','store','address','cancel'=>function($query){$query->where('using',1);}]);
- }else{
- $warea_ids=DwbsWarea::where('admin_id',$admin_id)->pluck('id');
- $agent_ids=DwbsUser::whereIn('warea_id',$warea_ids)->pluck('id');
- $store_ids=Store::whereIn('user_id',$agent_ids)->pluck('id');
- $data=Order::whereIn('store_id',$store_ids)
- ->with(['user:id,nickname,phone','store:id,name,phone','address:id,name,phone,province,city,area,address','cancel'=>function($query){$query->where('using',1);}]);
- }
- //筛选订单号
- if($request->has('order_no') && !empty($request->input('order_no'))){
- $data->where('order_no',$request->input('order_no'));
- }
- //代理手机号筛选
- if($request->has('agent_phone') && !empty($request->input('agent_phone'))){
- $agent=DwbsUser::where('mobile',$request->input('agent_phone'))->first();
- if($agent){
- $store=Store::where('user_id',$agent->id)->first();
- if($store){
- $data->where('store_id',$store->id);
- }else{
- return $this->error('450001','代理店铺不存在');
- }
- }else{
- return $this->error('450001','代理手机号不存在');
- }
- }
- //用户信息筛选
- if($request->has('user_phone') && !empty($request->input('user_phone'))){
- $user=User::where('phone',$request->input('user_phone'))->first();
- if(empty($user)){
- return $this->error('450001','用户手机号不存在');
- }
- $data->where('user_id',$user->id);
- }
- //状态筛选
- if(!empty($request->input('status'))){
- $data->where('status',$request->input('status'));
- }
- //筛选订单类型
- if($request->has('type') && !empty($request->input('type'))){
- switch($request->input('type')){
- case 1:
- $data->where('is_pay',1);
- $data->where('is_help',1);
- $data->where('self_pay',1);
- break;
- case 2:
- $data->where('is_pay',1);
- $data->where('is_help',1);
- $data->where('self_pay',0);
- break;
- case 3:
- $data->where('is_pay',1);
- $data->where('is_help',0);
- $data->where('self_pay',0);
- break;
- case 4:
- $data->where('is_pay',1);
- $data->where('is_help',0);
- $data->where('self_pay',1);
- break;
- default:
- $data->where([]);
- }
- }
- //日期时间筛选
- $start_time=$request->input('start_time');
- $end_time=$request->input('end_time');
- if($start_time && $end_time){
- $data->whereBetween('created_at',[$start_time,$end_time]);
- }
- $list=$data->orderBy('id','desc')
- ->select('id','order_no','created_at','user_id','store_id','status','account','total','self_receive','express_receive_time','remark')
- ->get();
- $wareas=DwbsWarea::pluck('name','id');
- $user_ids=Store::withTrashed()->where('is_failure',0)->pluck('user_id');
- $store_user_ids=Store::withTrashed()->where('is_failure',0)->pluck('user_id','id');
- $warea_user_ids=DwbsUser::withTrashed()->whereIn('id',$user_ids)->pluck('warea_id','id');
- foreach($list as $key=>$val){
- $user_id=$store_user_ids[$val->store_id];
- $warea_id=$warea_user_ids[$user_id];
- $list[$key]->warea=$wareas[$warea_id];
- }
- return $this->success($list);
- }
- //获取订单详情
- public function getOrderDetail(Request $request){
- $order_no=$request->input('order_no');
- $goods_ids = OrderDetail::where('order_no', $order_no)->groupBy('goods_id')->pluck('goods_id');
- $goods = [];
- foreach ($goods_ids as $key => $val) {
- $goods[$key] = Goods::where('id', $val)->first();
- $goods[$key]->sku = OrderDetail::where('order_no', $order_no)->where('goods_id', $val)->get();
- }
- $list['goods']=$goods;
- $order=Order::where('order_no',$order_no)->first();
- if($order->apply_cancel > 1){
- $order_cancel=OrderCancel::where('order_id',$order->id)->OrderBy('created_at')->get();
- $list['cancel']=$order_cancel;
- }
- if($order->is_refund > 0){
- $refund=OrderRefund::where('order_no',$order->order_no)->OrderBy('created_at')->get();
- $list['refund']=$refund;
- }
- return $this->success($goods);
- }
- //获取订单详情
- public function getOrderDetails(Request $request){
- $order_no=$request->input('order_no');
- $goods_ids = OrderDetail::where('order_no', $order_no)->groupBy('goods_id')->pluck('goods_id');
- $goods = [];
- foreach ($goods_ids as $key => $val) {
- $goods[$key] = Goods::where('id', $val)->first();
- $goods[$key]->sku = OrderDetail::where('order_no', $order_no)->where('goods_id', $val)->get();
- }
- $list['goods']=$goods;
- $order=Order::with('refund:id,order_no')->where('order_no',$order_no)->first();
- if($order->apply_cancel > 1){
- $order_cancel=OrderCancel::where('order_id',$order->id)->OrderBy('created_at')->get();
- $list['cancel']=$order_cancel;
- }
- if(count($order->refund) >= 1){
- $refund=OrderRefund::where('order_no',$order->order_no)->OrderBy('created_at')->get();
- $list['refund']=$refund;
- }
- return $this->success($list);
- }
- //获取门店、订单日销售额对比
- public function getOrderDailySales(Request $request){
- $store_id=$request->input('store_id');
- $startdate=$request->input('startdate');
- $enddate=$request->input('enddate');
- $where=$wheres=[];
- if($store_id){
- $where['store_id']=$store_id;
- }
- if($startdate && $enddate){
- $start=date("Y-m-d",strtotime($startdate));
- $end=date("Y-m-d",strtotime($enddate));
- }else{
- $start=date("Y-m-d",strtotime('-7 days'));
- $end=date("Y-m-d");
- }
- $dates=$this->getDateFromRange($start,$end);
- $list=[];
- foreach($dates as $key=>$val){
- $list[$val]=Order::whereDate('created_at',$val)->where($where)
- ->select(DB::raw('ifnull(sum(total),0) as total'),DB::raw('ifnull(sum(account),0) as money'))
- ->where('is_pay',1)->where('apply_cancel',[0,1,3])->where('is_refund',[0,1])->first();
- }
- return $this->success($list);
- }
- 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;
- }
- //获取店铺销售额前10
- public function getStoreTop10(){
- $list=Order::with('store:id,name')->select('store_id',DB::raw('sum(account) as money'))
- ->where('is_pay',1)->groupBy('store_id')
- ->orderByDesc('money')->limit(10)->get();
- return $this->success($list);
- }
- //查询订单物流信息
- public function getOrderExpress(Request $request){
- $order_no=$request->input('order_no');
- $order=Order::with('address')->where('order_no',$order_no)->first();
- if(empty($order)){
- return $this->error('450001','订单信息有误');
- }
- if($order->express_state==3){ //已签收
- $express=json_decode($order->express_info,true);
- }else{ //未签收
- $express=new ExpressHandler();
- $CustomerName = null;
- if($order->express_code=='SF'){
- $CustomerName = substr($order->express_phone,-4);
- }
- $express=$express->getExpress($order->express_no, $order->express_code, $order->order_no, $CustomerName);
- }
- $data['express']=$express;
- $data['express_state']=$order->express_state;
- $data['express_company']=$order->express_company;
- $data['express_no']=$order->express_no;
- $data['express_time']=$order->express_time;
- return $this->success($data);
- }
- }
|