123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Events\AuthRefundTip;
- use App\Events\CancelOrderEvent;
- use App\Http\Controllers\Controller;
- use App\Models\AgentNo;
- use App\Models\Comment;
- use App\Models\DwbsUser;
- use App\Models\DwbsWarea;
- use App\Models\Goods;
- use App\Models\OrderDetailW;
- use App\Models\OrderW;
- use App\Models\Store;
- use App\Models\StoreGoods;
- use App\Models\User;
- use App\Models\Order;
- use App\Models\OrderDetail;
- use App\Models\OrderRefund;
- use App\Models\OrderRefundStatus;
- use App\Models\UserW;
- use App\Models\Admin;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Log;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Validator;
- class RefundController extends Controller
- {
- //获取所有退货订单
- public function getRefundOrder(Request $request)
- {
- $page_index=$request->input('page_index');
- $page_size=$request->input('page_size');
- $user_search=$request->input('user_search');
- $store_search=$request->input('store_search');
- $refund_no=$request->input('refund_no');
- $order_no=$request->input('order_no');
- $num=$page_size*($page_index-1);
- $status=$request->input('status');
- $admin_id=Auth::user()->id;
- $admin=Admin::where('id',$admin_id)->first();
- if($admin && in_array($admin->role_id,[22,24])){//超级管理员
- $data=OrderRefund::with(['user:id,avatar,nickname,phone','store:id,name,phone','order:order_no,express_receive_time']);
- }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=OrderRefund::whereIn('store_id',$store_ids)
- ->with(['user:id,avatar,nickname,phone','store:id,name,phone','order:order_no,express_receive_time']);
- }
- if($status!='all'){
- $data->where('status',$status);
- }
- if($refund_no){
- $data->where('refund_no','like','%'.$refund_no.'%');
- }
- if($order_no){
- $data->where('order_no','like','%'.$order_no.'%');
- }
- if($user_search){
- $user_ids=User::where('phone','like','%'.$user_search.'%')
- ->orWhere('nickname','like','%'.$user_search.'%')->pluck('id');
- $data->whereIn('user_id',$user_ids);
- }
- if($store_search){
- $store_ids=Store::where('phone','like','%'.$store_search.'%')
- ->orWhere('name','like','%'.$store_search.'%')->pluck('id');
- $data->whereIn('store_id',$store_ids);
- }
- $count=$data->count();
- $list=$data->orderBy('id','desc')->skip($num)->take($page_size)->get();
- $wareas=DwbsWarea::pluck('name','id');
- $services=DwbsWarea::pluck('admin_name','id');
- $user_ids=Store::pluck('user_id');
- $store_user_ids=Store::pluck('user_id','id');
- $warea_user_ids=DwbsUser::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];
- $list[$key]->service=$services[$warea_id];
- }
- return $this->success_list($list,'成功',$count);
- }
- //判断是否穿过
- public function isWear(Request $request){
- $refund_id=$request->input('refund_id');
- $is_wear=$request->input('is_wear');
- $refund=OrderRefund::where('id',$refund_id)->first();
- $refund->is_wear=$is_wear;
- $res=$refund->save();
- if($res){
- return $this->success([]);
- }else{
- return $this->error();
- }
- }
- //同意?退货:驳回
- public function agreeRefund(Request $request)
- {
- $refund_id=$request->input('refund_id');
- $refund=OrderRefund::where('id',$refund_id)->first();
- if(empty($refund)){
- return $this->error('450001','退货单不存在,刷新后重试');
- }
- $order=Order::where('order_no',$refund->order_no)->first();
- if(empty($order) || $order->status < 3){
- return $this->error('450001','该订单未收货,不能进行退货审核');
- }
- $is_agree=$request->input('is_agree');
- try{
- DB::transaction(function()use($request,$refund,$refund_id,$is_agree){
- if($is_agree == 1){
- OrderRefund::where('id',$refund_id)->update(['status'=>1,'auth_at'=>date("Y-m-d H:i:s")]);
- $order_refund=OrderRefund::where('id',$refund_id)->first();
- $refund_total=OrderRefund::where('order_no',$order_refund->order_no)->where('status',1)->sum('total');
- $order=Order::where('order_no',$order_refund->order_no)->first();
- $order_total=$order->total;
- if($refund_total >= $order_total){//全部退货
- Order::where('order_no',$order_refund->order_no)->update(['is_refund'=>3]);
- }else{//部分退货
- Order::where('order_no',$order_refund->order_no)->update(['is_refund'=>2]);
- }
- // if($order_total - $refund_total < 2){
- //判断是否剥夺vip
- // if($order->vip==1){
- // $orders=Order::where('user_id',$order->user_id)
- // ->where('store_id',$order->store_id)
- // ->where('is_pay',1)
- // ->whereIn('apply_cancel',[0,1,3])
- // ->whereIn('is_refund',[0,1])
- // ->where('total','>=',2)
- // ->where('created_at','>',$order->created_at)
- // ->orderBy('created_at')->get();
- // if(count($orders)>=1){
- // Order::where('id',$orders[0]->id)->update([
- // 'vip'=>1
- // ]);
- // }else{
- // User::where('id',$order->user_id)->update([
- // 'is_vip'=>0
- // ]);
- // }
- // }
- // }
- //同意退货通知用户
- $user=User::where('id',$refund->user_id)->first();
- if($user->openId){
- $data['openid']=$user->openId;
- $data['data']=[
- 'first' => '您的退货订单'.$refund->refund_no.'已审核通过',
- 'keyword1' => $refund->order_no,
- 'keyword2' => '退款金额:'.number_format($refund->account, 2)
- ];
- event(new AuthRefundTip($data));
- }
- //同意退货通知代理
- $store=Store::where('id',$refund->store_id)->first();
- $user=DwbsUser::where('id',$store->user_id)->first();
- if($user->openid){
- $data['openid']=$user->openid;
- $data['data']=[
- 'first' => '您的用户【'.$user->nickname.'】的退货订单'.$refund->refund_no.'已由政委审核成功',
- 'keyword1' => $refund->order_no,
- 'keyword2' => '退款金额:'.number_format($refund->account, 2)
- ];
- event(new AuthRefundTip($data));
- }
- }else{
- $remark=$request->input('remark');
- Order::where('order_no',$refund->order_no)->update(['is_refund'=>0]);//被驳回
- OrderRefund::where('id',$refund_id)->update(['status'=>2,'remark'=>$remark,'auth_at'=>date("Y-m-d H:i:s")]);
- //不同意退货通知用户
- $user=User::where('id',$refund->user_id)->first();
- if($user && $user->openId){
- $data['openid']=$user->openId;
- $data['data']=[
- 'first' => '您的退货订单'.$refund->refund_no.'审核被驳回',
- 'keyword1' => $refund->order_no,
- 'keyword2' => '退款金额:'.number_format($refund->account,2)
- ];
- event(new AuthRefundTip($data));
- }
- }
- },5);
- return $this->success([]);
- }catch(\Exception $e){
- return $this->error('450001',$e->getMessage());
- }
- }
- //获取退货订单详情
- public function getRefundOrderDetail(Request $request){
- $refund_no=$request->input('refund_no');
- $refund_order = OrderRefund::with(['store:id,name,img,phone'])->where('refund_no', $refund_no)->first();
- $goods_ids = OrderDetail::where('order_no', $refund_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', $refund_no)->where('goods_id', $val)->get();
- }
- $refund_order->goods = $goods;
- return $this->success($refund_order);
- }
- //设置政委收货地址
- //添加政委收货地址
- //获取原始订单代理关系图
- public function getOrderAgentContact(Request $request)
- {
- $refund_no=$request->input('refund_no');
- $refund=OrderRefund::where('refund_no',$refund_no)->first();
- $agents=AgentNo::where('order_no',$refund->order_no)->orderByDesc('level')->get();
- foreach($agents as $key=>$val){
- $refund_details=OrderDetail::with('goods')->where('order_no',$refund_no)->get();
- $order_refund=OrderRefundStatus::where('refund_no',$refund_no)->where('level',$val->level)->first();
- if($order_refund){
- $agents[$key]->is_finish=$order_refund->status;
- $agents[$key]->remark=$order_refund->remark;
- }else{
- $agents[$key]->is_finish=0;
- }
- foreach($refund_details as $k=>$v){
- if($val->level==3){
- $agents[$key]->account += $v->num * $v->goods->crown_price;
- }
- if($val->level==2){
- $agents[$key]->account += $v->num * $v->goods->top_price;
- }
- if($val->level==1){
- $agents[$key]->account += $v->num * $v->goods->super_price;
- }
- }
- }
- $user=User::where('id',$agents[0]->user_id)->select('nickname','phone')->first();
- Log::info($agents[0]->user_id);
- Log::info(json_encode($user));
- Log::info($refund->account);
- $user->account=$refund->account;
- $data['order_no']=$refund->order_no;
- $data['list']=$agents;
- $data['user']=$user;
- return $this->success($data);
- }
- //修改代理关系昵称手机号信息
- public function changeAgentContactInfo(Request $request)
- {
- $id=$request->input('id');
- $nickname=$request->input('nickname');
- $phone=$request->input('phone');
- $rules=[
- 'nickname'=>'required|max:32',
- 'phone'=>'required|regex:/^1[3456789][0-9]{9}$/',
- ];
- $message=[
- 'nickname.required'=>'代理昵称不能为空.',
- 'nickname.max'=>'代理昵称不能大于32个字符.',
- 'phone.required'=>'代理手机号不能为空.',
- 'phone.regex'=>'代理手机号格式有误.',
- ];
- $validator = Validator::make($request->input(),$rules,$message);
- if($validator->fails()){
- return $this->error('400013',$validator->errors()->first());
- }
- $res=AgentNo::where('id',$id)->update([
- 'nickname'=>$nickname,
- 'phone'=>$phone,
- ]);
- if($res){
- return $this->success([]);
- }else{
- return $this->error();
- }
- }
- //删除代理关系
- public function deleteAgentContact(Request $request)
- {
- $id=$request->input('id');
- $refund_no=$request->input('refund_no');
- $agentNo=AgentNo::where('id',$id)->first();
- $count=AgentNo::where('order_no',$agentNo->order_no)->count();
- if($count==1){
- return $this->error('450001','该代理不能删除');
- }
- try{
- DB::transaction(function()use($agentNo,$refund_no){
- $agentNo->delete();
- OrderRefundStatus::where('refund_no',$refund_no)->where('level',$agentNo->level)->delete();
- $count_agent=AgentNo::where('order_no',$agentNo->order_no)->count();
- $count_refund_status=OrderRefundStatus::where('refund_no',$refund_no)->count();
- if($count_agent==$count_refund_status){
- $order_refund=OrderRefund::where('refund_no',$refund_no)->first();
- if($order_refund->is_end!=1){
- $order_refund->is_end=1;
- $order_refund->end_at=date("Y-m-d H:i:s");
- $order_refund->save();
- }
- }else{
- $order_refund=OrderRefund::where('refund_no',$refund_no)->first();
- if($order_refund->is_end==1){
- $order_refund->is_end=0;
- $order_refund->end_at=date("Y-m-d H:i:s");
- $order_refund->save();
- }
- }
- },5);
- return $this->success([]);
- }catch(\Exception $e){
- return $this->error('450001',$e->getMessage());
- }
- }
- //获取代理信息
- public function getAgentInfo(Request $request)
- {
- $phone=$request->input('phone');
- $agent=DwbsUser::where('mobile',$phone)->select('id','nickname','mobile','level')->first();
- if(!empty($agent)){
- return $this->success($agent);
- }else{
- return $this->error('450001','代理不存在');
- }
- }
- //添加代理关系代理
- public function addAgentContact(Request $request)
- {
- $order_no = $request->input('order_no');
- $refund_no = $request->input('refund_no');
- $nickname = $request->input('nickname');
- $level = $request->input('level');
- $phone = $request->input('phone');
- $rules=[
- 'nickname'=>'required|max:32',
- 'phone'=>'required|regex:/^1[3456789][0-9]{9}$/',
- ];
- $message=[
- 'nickname.required'=>'代理昵称不能为空.',
- 'nickname.max'=>'代理昵称不能大于32个字符.',
- 'phone.required'=>'代理手机号不能为空.',
- 'phone.regex'=>'代理手机号格式有误.',
- ];
- $validator = Validator::make($request->input(),$rules,$message);
- if($validator->fails()){
- return $this->error('400013',$validator->errors()->first());
- }
- $count = AgentNo::where('order_no', $order_no)->count();
- if ($count == 3) {
- return $this->error('450001', '代理关系已达上限,不能添加');
- }
- $agent=AgentNo::where('order_no', $order_no)->where('level',$level)->first();
- if($agent){
- return $this->error('450001', '该等级代理已存在,不能添加');
- }
- try{
- DB::transaction(function()use($order_no,$nickname,$level,$phone,$refund_no){
- $order = Order::where('order_no', $order_no)->first();
- $data['order_no'] = $order_no;
- $data['user_id'] = $order->user_id;
- $data['nickname'] = $nickname;
- $data['level'] = $level;
- $data['phone'] = $phone;
- AgentNo::create($data);
- $count_agent=AgentNo::where('order_no',$order_no)->count();
- $count_refund_status=OrderRefundStatus::where('refund_no',$refund_no)->count();
- if($count_agent==$count_refund_status){
- $order_refund=OrderRefund::where('refund_no',$refund_no)->first();
- if($order_refund->is_end!=1){
- $order_refund->is_end=1;
- $order_refund->end_at=date("Y-m-d H:i:s");
- $order_refund->save();
- }
- }else{
- $order_refund=OrderRefund::where('refund_no',$refund_no)->first();
- if($order_refund->is_end==1){
- $order_refund->is_end=0;
- $order_refund->end_at=date("Y-m-d H:i:s");
- $order_refund->save();
- }
- }
- },5);
- return $this->success([]);
- }catch(\Exception $e){
- return $this->error($e->getMessage());
- }
- }
- //全部完成
- public function allFinish(Request $request){
- $refund_no=$request->input('refund_no');
- $refund=OrderRefund::where('refund_no',$refund_no)->first();
- try{
- DB::transaction(function()use($refund,$refund_no){
- $refund->is_end=1;
- $refund->end_at=date("Y-m-d H:i:s");
- $refund->save();
- $levels=AgentNo::where('order_no',$refund->order_no)->pluck('level');
- foreach($levels as $v){
- $refund_status=OrderRefundStatus::where('refund_no',$refund_no)->where('level',$v)->first();
- if(!$refund_status){
- OrderRefundStatus::create([
- 'refund_no'=>$refund_no,
- 'level'=>$v,
- 'status'=>1,
- 'remark'=>null,
- ]);
- }
- }
- },5);
- return $this->success([]);
- }catch(\Exception $e){
- return $this->error('450001',$e->getMessage());
- }
- }
- public function changeFinish(Request $request){
- $id=$request->input('id');
- if($request->input('status')==1){
- $status=1;
- }else{
- $status=2;
- }
- $remark=$request->input('remark');
- $refund_no=$request->input('refund_no');
- $agentNo=AgentNo::where('id',$id)->first();
- $refund_status=OrderRefundStatus::where('refund_no',$refund_no)->where('level',$agentNo->level)->first();
- try{
- DB::transaction(function()use($refund_status,$status,$remark,$refund_no,$agentNo){
- if($refund_status){
- $refund_status->status=$status;
- $refund_status->remark=$remark;
- $refund_status->save();
- }else{
- OrderRefundStatus::create([
- 'refund_no'=>$refund_no,
- 'level'=>$agentNo->level,
- 'account'=>null,
- 'status'=>$status,
- 'remark'=>$remark
- ]);
- }
- $count_agent=AgentNo::where('order_no',$agentNo->order_no)->count();
- $count_refund_status=OrderRefundStatus::where('refund_no',$refund_no)->count();
- if($count_agent==$count_refund_status){
- $order_refund=OrderRefund::where('refund_no',$refund_no)->first();
- if($order_refund->is_end!=1){
- $order_refund->is_end=1;
- $order_refund->end_at=date("Y-m-d H:i:s");
- $order_refund->save();
- }
- }else{
- $order_refund=OrderRefund::where('refund_no',$refund_no)->first();
- if($order_refund->is_end==1){
- $order_refund->is_end=0;
- $order_refund->end_at=date("Y-m-d H:i:s");
- $order_refund->save();
- }
- }
- },5);
- return $this->success([]);
- }catch(\Exception $e){
- return $this->error($e->getMessage());
- }
- }
- }
|