123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 |
- <?php
- namespace App\Http\Controllers;
- use App\Handlers\ExpressHandler;
- use App\Models\Activity;
- use App\Models\Studio;
- use App\Models\StudioExpress;
- use App\Models\StudioExpressStorage;
- use App\Models\StudioGood;
- use App\Models\StudioOrder;
- use App\Models\StudioOrderDetail;
- use App\Models\StudioOrderLog;
- use App\Models\StudioUser;
- use App\Models\System;
- use App\Models\User;
- use Carbon\Carbon;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- use Illuminate\Support\Facades\Validator;
- class StudioOrderController extends Controller
- {
- public function studioBonus(){
- $id=Auth::user()->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);
- }
- }
- }
|