id; $activity_id=Activity::where('is_ing',1)->first(); $studio_user=StudioUser::where('activity_id',$activity_id->id)->where('user_id',$id)->first(); if (!$studio_user){ $data['stuido_bonus']=0; $data['exchange_bonus']=0; $data['start_time']=$activity_id->user_start_time; $data['end_time']=$activity_id->user_end_time; }else{ $data['studio_bonus']=$studio_user->bonus; $data['exchange_bonus']=$studio_user->exchange_bonus; $data['start_time']=$activity_id->user_bonus_start; $data['end_time']=$activity_id->user_bonus_end; } return $this->success($data); } /* * 提交订单 * */ public function submit_order(Request $request) { $user = Auth::user(); if ($user->level != 3) { return $this->error('4001', '', '当前用户不是代理公司'); } $rules = [ 'size_id' => 'required', 'total' => 'required', 'type' => 'required', 'num' => 'required', 'money' => 'required', 'address_id' => 'required', ]; $message = [ 'required' => ':attribute不能为空', ]; $attributes = [ 'size_id' => 'size_id', 'total' => '商品总数量', 'type' => '商品中总类型', 'num' => '单类商品商量', 'money' => '商品金额', 'address_id' => '地址', ]; $vali = Validator::make($request->all(), $rules, $message, $attributes); if ($vali->fails()) { Log::error('{-------提交订单的参数错误--------}' . $vali->errors()->first()); return $this->error('40010', '', $vali->errors()->first()); } $input = $request->all(); $now = Carbon::now(); $activity = Activity::where('is_ing',1)->first(); $re=Studio::where('user_id',$user->id)->where('status',0)->first(); if (!$re){ return $this->error(50021,'','您没有没有工作室信息'); } if (!$activity->user_bonus_start){ return $this->error(50024, '', '兑换尚未开启'); } if ($now < $activity->user_bonus_start) { return $this->error(50024, '', '兑换尚未开启'); } if ($now > $activity->user_bonus_end) { return $this->error(40025, '', '兑换已经结束'); } // $activity = Activity::where('is_ing', 1)->first(); DB::beginTransaction(); try { $studio_user = StudioUser::where('user_id', $user->id)->where('activity_id', $activity->id)->first(); if (!$studio_user){ return $this->error(50024,'','当前用户没有工作室奖励'); } if ($input['money'] + $studio_user->exchange_bonus > $studio_user->bonus) { return $this->error(50024, '', '兑换总金额已经超过了奖励金额'); } $order = new StudioOrder(); $order->user_id = $user->id; $order->order_num = $this->order_num(); $order->total = $input['total']; $order->type = $input['type']; $order->money = $input['money']; $order->address_id = $input['address_id']; $order->good_user_id = $user->id; $order->activity_id = $activity->id; if (!empty($input['remark'])) { $order->remark = $input['remark']; } if (!$order->save()) { Log::error('{-----订单保存出错-----}' . $user->id); throw new \Exception('订单保存出错'); } foreach ($input['size_id'] as $k => $v) { $data = StudioGood::find($v); if (!$data) { return $this->error(40013, '', '购物车有未知商品,请清空购物车'); } if ($input['num'][$k]){ $order_detail = new StudioOrderDetail(); $order_detail->order_id = $order->id; $order_detail->goods_id = $data->id; if ($data->storage < $input['num'][$k]) { return $this->error(300, '', $data->name . '的' . $data->size . '尺码数量不足,请重新选择数量'); } $order_detail->num = $input['num'][$k]; $order_detail->money = $input['num'][$k] * $data->money; $order_detail->goods_name = $data->name; $order_detail->goods_size = $data->size; $order_detail->goods_price = $data->money; $order_detail->goods_unit = $data->unit; if (!$order_detail->save()) { Log::error('{-----订单详情保存出错-----}' . $user->id); throw new \Exception('订单详情出错'); } $data->sold_num = $data->sold_num + $input['num'][$k]; $data->storage = $data->storage - $input['num'][$k]; if (!$data->save()) { throw new \Exception('3'); } } } $order_ids = $order->id; $order_nums = $order->order_num;//记录下订单的ID $goodsInfo = ''; $goodsInfos = ''; foreach ($input['size_id'] as $key => $val) { $goods = StudioGood::find($val); if (empty($goodsInfos)) { $goodsInfos = $goods->name . '-' . $goods->size . '*' . $input['num'][$key]; } else { $goodsInfos .= ',' . PHP_EOL . $goods->name . '-' . $goods->size . '*' . $input['num'][$key]; } if ($key <= 5) { if (empty($goodsInfo)) { $goodsInfo = $goods->name . '-' . $goods->size . '*' . $input['num'][$key]; } else { $goodsInfo .= ',' . PHP_EOL . $goods->name . '-' . $goods->size . '*' . $input['num'][$key]; } } elseif ($key == 6) { $goodsInfo .= ',...'; } } $orderlog = new StudioOrderLog(); $orderlog->order_id = $order->id; $orderlog->user_id = $order->user_id; $orderlog->log_name = $user->nickname; $orderlog->log_title = '初始订单数据'; $orderlog->log_text = $goodsInfos; if (!$orderlog->save()) { throw new \Exception(1); } $studio_user->exchange_bonus+=$input['money']; if (!$studio_user->save()){ throw new \Exception('1'); } DB::commit(); return $this->success(['order_id' => $order_ids, 'order_num' => $order_nums]); } catch (\Exception $exception) { Log::error('------------提交订单出错,出错信息为------:' . $exception); DB::rollBack(); return $this->error('40011', '', '订单出错'); } } /*生成订单编号*/ public function order_num() { $user = Auth::user(); $number = mb_substr($user->auth_code, 0, 4) . '-' . date('Ymd', time()) . mb_substr(time(), 7, 10) . '-' . rand(1111, 9999); $num = StudioOrder::where('order_num', $number)->count(); if ($num > 0) { $number = $this->order_num(); return $number; } return $number; } public function studio_record(Request $request){ $id=Auth::user()->id; // $id=32421; $money=StudioOrder::where('user_id',$id)->where('activity_id',$request->activity_id)->sum('money'); $data=StudioOrder::where('user_id',$id)->where('activity_id',$request->activity_id)->with(['get_studio_detail'=>function($q){ $q->with(['get_goods'=>function($qu){ $qu->select('main_img','id'); }]); }])->select('money','id','created_at','order_num')->get()->toArray(); $arr=[]; foreach ($data as $k=>$v){ $arr[$k]=$v; $arr[$k]['array']=$this->dataGroup($v['get_studio_detail'],'goods_name'); } $re=[ 'money'=>$money, 'list'=>$arr ]; return $this->success($re); } public function order_detail(Request $request){ $rules=[ 'order_num'=>'required', ]; $message=[ 'order_num.message'=>'订单id是必填项', ]; $vali=Validator::make($request->all(),$rules,$message); if ($vali->fails()){ return $this->error('40012','',$vali->errors()->first()); } // DB::enableQueryLog(); $order=StudioOrder::where('order_num',$request->order_num)->with(['belong_user'])->first(); $detail=StudioOrderDetail::where('order_id',$order->id)->groupBy('goods_name')->get(); foreach ($detail as $k=>$v){ $order_detail=StudioOrderDetail::where('order_id',$v->order_id)->where('goods_name',$v->goods_name)->with(['get_good'])->get(); $size=[]; $size_id=[]; $num=[]; foreach ($order_detail as $ke=>$va){ $size[$ke]=$va->get_good->size; $size_id[$ke]=$va->goods_id; $num[$ke]=$va->num; } $re[$k]['name']=$v->goods_name; $re[$k]['size']=$size; $re[$k]['size_id']=$size_id; $re[$k]['attr_id']=$v->get_good->attr_id; $re[$k]['num']=$num; if ($v->num==0){ $re[$k]['money']=0; }else{ $re[$k]['money']=$v->money/$v->num; } $re[$k]['unit']=$v->get_good->unit; $re[$k]['main_img']=$v->get_good->main_img; // $re[$k]['remark']=$v->remark; $re[$k]['banner_img']=$v->get_good->banner_img; $re[$k]['sec_attr']=$v->get_good->sec_attr; } $all_data=[ 'address'=>[ 'city'=>$order->address->city, 'provice'=>$order->address->province, 'area'=>$order->address->town, "address"=>$order->address->address, "con_name"=>$order->address->username, "con_mobile"=>$order->address->mobile, ], 'remark'=>$order->remark, 'track_number'=>$order->track_number==null?'':$order->track_number, 'track_time'=>$order->track_time==null?'':$order->track_time, 'track_remark'=>$order->track_remark==null?'':$order->track_remark, 'track_company'=>$order->track_company==null?'':$order->track_company, 'track_status'=>$order->track_status, 'belong_user'=>$order->belong_user, 'list'=>$re ]; return $this->success($all_data); } /* *订单日志 */ public function get_log(Request $request){ $rules=[ 'order_num'=>'required', ]; $message=[ 'order_num.required'=>'订单id是必填项', ]; $vali=Validator::make($request->all(),$rules,$message); if ($vali->fails()){ return $this->error('40012','',$vali->errors()->first()); } $order_id=StudioOrder::where('order_num',$request->order_num)->value('id'); $data=StudioOrderLog::where('order_id',$order_id)->get(); return $this->success_list($data); } /** * @description:根据数据 * @param {dataArr:需要分组的数据;keyStr:分组依据} * @return: */ protected function dataGroup(array $dataArr,string $keyStr) :array { $newArr=[]; foreach ($dataArr as $k => $val) { //数据根据日期分组 $newArr[$val[$keyStr]][] = $val; } return $newArr; } /**查看货物**/ public function look_good(Request $request){ $id=$request->id; $ids=Auth::user()->id; // $ids=49428; $re=StudioExpress::where('order_id',$id)->with(['get_express'=>function($q)use($id){ $q->where('order_id',$id); },'get_order'])->orderByDesc('number')->groupBy('number')->get(); $data=[]; foreach ($re as $k=>$v){ $data[$k]=$v; if ($ids==$v->get_order->good_user_id){ $data[$k]['is_per']=true; }else{ $data[$k]['is_per']=false; } } return $this->success_list($data); } /* * 货物详情 * **/ public function good_detail(Request $request){ $re=StudioExpressStorage::where('express_id',$request->id)->groupBy('type')->get(); $datas=StudioGood::where('is_deleted',0)->where('id','>',57)->groupBy('main_attr')->get(); foreach ($datas as $k=>$v){ $r[$v->main_attr]=$v->main_img; } $data=[ 'hard'=>['spec'=>[],'imgurl'=>$r['精装版'],'name'=>'精装版'], 'simple'=>['spec'=>[],'imgurl'=>$r['简约版'],'name'=>'简约版'], 'old'=>['spec'=>[],'imgurl'=>$r['老人版'],'name'=>'老人版'], 'new_old'=>['spec'=>[],'imgurl'=>$r['纯棉老人版'],'name'=>'纯棉老人版'], ]; foreach ($re as $k=>$v){ $res=StudioExpressStorage::where('express_id',$request->id)->where('type',$v->type)->select('size','sex','type','num')->get()->toArray(); if ($v->type==0){ $data['hard']['spec']=$res; }elseif ($v->type==1){ $data['simple']['spec']=$res; }elseif ($v->type==2){ $data['old']['spec']=$res; }else{ $data['new_old']['spec']=$res; } } return $this->success($data); } /**获取物流轨迹**/ public function get_express(Request $request,ExpressHandler $expressHandler){ $express=StudioExpress::find($request->id); if (!$express){ return $this->error(40011,'','该物流订单不存在'); } if ($express->status==1){ return $this->success(json_decode($express->data)); }else{ $re=$expressHandler->search($express->express_number,$express->express_code); $re=(array)$re; if ($re['State']==3){ DB::beginTransaction(); try{ $express->data=json_encode($re); $express->status=1; $express->save(); DB::commit(); }catch (\Exception $exception){ Log::error('-------物流信息保存出错--------'.$exception); DB::rollBack(); } } return $this->success($re); } } }