OrderController.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. <?php
  2. namespace App\Http\Controllers;
  3. /*
  4. * 订单管理
  5. * */
  6. use App\Models\Goods;
  7. use App\Models\GoodSku;
  8. use App\Models\GoodSkuPrice;
  9. use App\Models\GoodSkuTotal;
  10. use App\Models\GoodSpec;
  11. use App\Models\IncomExpenses;
  12. use App\Models\Message;
  13. use App\Models\Order;
  14. use App\Models\OrderBreakup;
  15. use App\Models\OrderGoods;
  16. use Carbon\Carbon;
  17. use Illuminate\Http\Request;
  18. use Illuminate\Support\Facades\Auth;
  19. use Illuminate\Support\Facades\DB;
  20. use Illuminate\Support\Facades\Log;
  21. class OrderController extends Controller
  22. {
  23. public function show_index()
  24. {
  25. // $id = Auth::user()->id;
  26. // $date = Carbon::now()->format('m/d');
  27. $date1 = Carbon::now()->addDay('2')->toDateTimeString();
  28. return $date1;
  29. }
  30. /**
  31. * 提交订单
  32. **/
  33. public function submit_order(Request $request)
  34. {
  35. // try{
  36. Log::error('{---价格---}'.$request->total);
  37. $order = $this->order_save(0, $request->address_id, $request->total,$request->remark);
  38. Log::error('dsds------1');
  39. $this->order_goods_save($request->list,$order['order_id']);
  40. Log::error('dsds------2');
  41. $this->order_de($order['order_num']);
  42. Log::error('dsds------3');
  43. return $this->success(['order_num'=>$order['order_num']]);//保存消息
  44. // }catch (\Exception $exception){
  45. // Log::error('{------这里是提交订单---时间为----}'.Carbon::now()->toDateTimeString());
  46. // return $this->error(300);
  47. // }
  48. }
  49. /*
  50. * 订单保存的详情
  51. * */
  52. public function order_de($order_num){
  53. $user=Auth::user();
  54. $order=Order::where('ordersn',$order_num)->first();
  55. $order_goods=OrderGoods::where('order_id',$order->id)->get();
  56. foreach ($order_goods as $k=>$v){
  57. $data[$k]=$v->goods_id;
  58. }
  59. $data=array_unique($data);
  60. $datas=[];
  61. foreach ($data as $k=>$v){
  62. $good=Goods::where('id',$v)->first();
  63. $nums=OrderGoods::where('order_id',$order->id)->where('goods_id',$v)->sum('num');
  64. $price=OrderGoods::where('order_id',$order->id)->where('goods_id',$v)->value('price');
  65. $datas[$k]=[
  66. 'price'=>$price,
  67. 'name'=>$good->name,
  68. 'img'=>$good->img_url,
  69. 'num'=>(int)$nums
  70. ];
  71. }
  72. $datas=json_encode($datas);
  73. // $datas=json_encode($datas);
  74. // $down_order=[
  75. // 'order_num'=>$order_num,
  76. // 'time'=>time()*1000,
  77. // 'status'=>1,
  78. // 'goodList'=>$datas
  79. // ];
  80. // $r=['order_num'=>$order_num,'data'=>$datas,'user_id'=>$user->id,'agent_id'=>$user->agent_id,'price'=>$order->price,'type'=>2,'mobile'=>$user->mobile,'nickname'=>$user->nickname];
  81. $message=new Message();
  82. $message->order_num=$order_num;
  83. $message->data=$datas;
  84. $message->type=2;
  85. $message->user_id=$user->id;
  86. $message->agent_id=$user->agent_id;
  87. $message->price=$order->price;
  88. $message->mobile=$user->mobile;
  89. $message->nickname=$user->nickname;
  90. $message->save();
  91. // DB::table('message')->insert($r);
  92. return '';
  93. }
  94. /*
  95. * 下级订单,待付款
  96. * */
  97. public function order_lower(Request $request)
  98. {
  99. $user=Auth::user();
  100. $id=$user->id;
  101. if ($request->status==1){
  102. $order = Order::where('status', $request->status)
  103. ->where('agent_id', $id)->where('is_turn','<>',1)->paginate(15);
  104. }else{
  105. if ($request->status==2){
  106. $order = Order::where('status', $request->status)->where('agent_id', $id)->paginate(15);
  107. }else{
  108. $order = Order::where('status', $request->status)->where('agent_id', $id)->paginate(15);
  109. }
  110. }
  111. $data=$this->deal_order($order);
  112. return $this->success_list($data[0], '', $data[1]);
  113. }
  114. /**
  115. *notes:
  116. *订单详情
  117. *
  118. */
  119. public function order_detail(Request $request)
  120. {
  121. Log::error(json_encode($request->all()));
  122. if ($request->type=='turn'){
  123. $order_num=Order::where('original_ordersn',$request->order_num)->value('ordersn');
  124. }
  125. else{
  126. $order_num=$request->order_num;
  127. }
  128. $order = Order::where('ordersn', $order_num)->first();
  129. $order_goods_all = OrderGoods::where('order_id', $order->id)->groupBy('goods_id')->select('goods_id')->get();
  130. foreach ($order_goods_all as $k => $v) {
  131. $order_goods = OrderGoods::where('goods_id', $v->goods_id)->where('order_id', $order->id)->get();
  132. $s = [];
  133. foreach ($order_goods as $key => $val) {
  134. $sku = GoodSku::find($val->sku_id);
  135. $re = explode('/', $sku->sku_path);
  136. $goodspec_type = GoodSpec::find($re[1]);
  137. $goodspec_size = GoodSpec::find($re[0]);
  138. $data[$key]['name'] = $goodspec_type->title;
  139. $data[$key]['size'] = $goodspec_size->title;
  140. $data[$key]['num'] = $val->num;
  141. $data[$key]['size_id'] = $val->sku_id;
  142. $data[$key]['price'] = $val->price;
  143. }
  144. $data = array_merge($s, $data);
  145. $datas[$k]['goods'] = $data;
  146. $goods = Goods::find($v->goods_id);
  147. $datas[$k]['name'] = $goods->name;
  148. $datas[$k]['storage']=GoodSkuTotal::where('user_id',Auth::user()->id)->where('goods_id',$v->goods_id)->sum('total');
  149. $datas[$k]['id'] = $goods->id;
  150. $datas[$k]['imgurl'] = $goods->img_url;
  151. $datas[$k]['price'] = $data[0]['price'];//这地方
  152. }
  153. foreach ($datas as $k => $v) {
  154. $re = $this->deal_arr($v['goods']);
  155. $all[$k]['name'] = $v['name'];
  156. $all[$k]['id'] = $v['id'];
  157. $all[$k]['storage']=$v['storage'];
  158. $all[$k]['img'] = $v['imgurl'];
  159. $all[$k]['price'] = $v['price'];
  160. $all[$k]['typeList'] = $re;
  161. }
  162. $all_data=[
  163. 'order_num'=>$order->ordersn,
  164. 'time'=>strtotime($order->created_at)*1000,
  165. 'status'=>$order->status,
  166. 'address'=>[
  167. 'city'=>$order->address->city,
  168. 'provice'=>$order->address->provice,
  169. 'area'=>$order->address->town,
  170. "address"=>$order->address->address,
  171. "con_name"=>$order->address->username,
  172. "con_mobile"=>$order->address->mobile,
  173. ],
  174. 'remark'=>$order->desc,
  175. 'goodList'=>$all
  176. ];
  177. return $this->success($all_data);
  178. }
  179. /*
  180. * 处理订单格式
  181. * */
  182. public function deal_arr($data)
  183. {
  184. $result = array();
  185. foreach ($data as $key => $value) {
  186. $result[$value['name']][] = $value;
  187. }
  188. $i = 0;
  189. foreach ($result as $k => $v) {
  190. foreach ($v as $key => $val) {
  191. $dat[$key] = $val['size'];
  192. $dats[$key] = $val['num'];
  193. $datss[$key] = $val['size_id'];
  194. }
  195. $datas[$i]['name'] = $v[0]['name'];
  196. $datas[$i]['size'] = $dat;
  197. $datas[$i]['num'] = $dats;
  198. $datas[$i]['size_id'] = $datss;
  199. $i++;
  200. }
  201. return $datas;
  202. }
  203. /*
  204. *转单
  205. */
  206. public function turn_order(Request $request)
  207. {
  208. Log::error('{---zhuandan-----}'.json_encode($request->all()));
  209. $list=$request->list;
  210. $user = Auth::user();
  211. $order_num = $request->order_num;
  212. $order = Order::where('ordersn', $order_num)->first();
  213. if ($request->status==1){
  214. $order->is_turn=1;//是否为全部转单
  215. }elseif($request->status==2){
  216. $order->is_turn = 2;
  217. $order->status=2;
  218. }else{
  219. $order=Order::where('ordersn',$request->order_num)->first();
  220. if ($order->turn_is==1){
  221. $order_all=Order::where('ordersn',$order->original_ordersn)->first();
  222. $order_all->status=2;
  223. $order_all->save();
  224. }
  225. $order->status=2;
  226. $order->save();
  227. return $this->success([]);
  228. }
  229. $order->save();
  230. $break_id = $this->order_break(0, $order->ordersn, $user);
  231. $break_id_turn = $this->order_break(1, $order->ordersn, $user);
  232. $order_id=$this->order_save(1,$order->address_id,0,null,$order->ordersn,$break_id_turn);//订单ID
  233. $this->order_goods_save($list,$order_id['order_id'],1,$break_id_turn);
  234. $total=OrderGoods::where('order_id',$order_id['order_id'])->sum('totalprice');
  235. $orders=Order::find($order_id['order_id']);
  236. $orders->price=$total;
  237. if ($request->has('remark')){
  238. $orders->desc=$request->remark;
  239. }
  240. if ($request->status==1){
  241. $orders->is_turn=1;//是否为全部转单
  242. }else{
  243. $this->order_goods_surplus($order->id,$order_id['order_id'],$break_id);
  244. $orders->status=2;
  245. }
  246. $orders->save();
  247. return $this->success([]);
  248. }
  249. /**保存数据库*/
  250. public function order_break($type, $order_num, $user)
  251. {
  252. $order = Order::where('ordersn', $order_num)->first();
  253. $order_break = new OrderBreakup();
  254. if ($type == 1) {
  255. $order_break->sender_id = $user->agent_id;
  256. $order_break->status = 1;
  257. } else {
  258. $order_break->sender_id = $order->agent_id;
  259. $order_break->status = 0;
  260. }
  261. $order_break->agent_id = $order->agent_id;
  262. $order_break->user_id = $order->user_id;
  263. $order_break->ordersn = $order->ordersn;
  264. $order_break->address_id = $order->address_id;
  265. $order_break->save();
  266. return $order_break->id;
  267. }
  268. /*订单的保存*/
  269. public function order_save($type, $address_id, $total = 0,$remark=null,$ordersn = null, $id = 0)
  270. {
  271. $user = Auth::user();
  272. $code = time() . str_pad($user->id, 6, 0, STR_PAD_LEFT) . mt_rand(1000, 9999);
  273. $order = new Order();
  274. if ($type == 1) {
  275. $order->original_ordersn = $ordersn;
  276. $order->turn_is = 1;
  277. $order->breakup_id = $id;
  278. } else {
  279. $order->price = $total;
  280. }
  281. $order->ordersn = $code;
  282. $order->desc = $remark;
  283. $order->user_id = $user->id;
  284. $order->agent_id = $user->agent_id;
  285. $order->address_id = $address_id;
  286. $order->save();
  287. return ['order_num'=>$order->ordersn,'order_id'=>$order->id];
  288. }
  289. /*
  290. * order_goods数据库的保存
  291. * */
  292. public function order_goods_save($data,$order_id,$type=0,$break_id=0){
  293. foreach ($data as $k => $v) {
  294. $order_goods = new OrderGoods();
  295. $goods_sku_price = new GoodSkuPrice();
  296. $order_goods->order_id = $order_id;
  297. $order_goods->goods_id = $v['id'];
  298. $order_goods->sku_id = $v['size_id'];
  299. $order_goods->num = $v['num'];
  300. if ($type==1){
  301. $order_goods->breakup_id=$break_id;
  302. }
  303. $order_goods->price = $goods_sku_price
  304. ->where('goods_id', $v['id'])
  305. ->where('sku_id', $v['size_id'])
  306. ->where('user_level', Auth::user()->level)->value('price');
  307. $order_goods->totalprice = $order_goods->price * $order_goods->num;
  308. $order_goods->save();
  309. }
  310. // return $order_goods->id;
  311. }
  312. /*
  313. * 剩余订单量
  314. * */
  315. public function order_goods_surplus($order_id,$order_id_break,$break_id){
  316. $data=OrderGoods::where('order_id',$order_id)->get();
  317. foreach ($data as $k=>$v){
  318. $nums=OrderGoods::where('order_id',$order_id_break)
  319. ->where('goods_id',$v->goods_id)
  320. ->where('sku_id',$v->sku_id)->value('num');
  321. if ($nums<$v->num){
  322. $order_goods=new OrderGoods();
  323. $order_goods->breakup_id=$break_id;
  324. $order_goods->goods_id=$v->goods_id;
  325. $order_goods->sku_id=$v->sku_id;
  326. $order_goods->price=$v->price;
  327. $order_goods->num=$nums;
  328. $order_goods->totalprice=$v->price*($v->num-$nums);
  329. $order_goods->save();
  330. }elseif ($nums>$v->num){
  331. Log::error('------数量出错-----时间为-'.Carbon::now()->toDateTimeString());
  332. }else{
  333. $order_goods=new OrderGoods();
  334. $order_goods->breakup_id=$break_id;
  335. $order_goods->goods_id=$v->goods_id;
  336. $order_goods->sku_id=$v->sku_id;
  337. $order_goods->price=$v->price;
  338. $order_goods->totalprice=$v->price*($v->num-$nums);
  339. $order_goods->num=$nums;
  340. $order_goods->save();
  341. Log::error('--------全部转单--------');
  342. }
  343. }
  344. }
  345. /**
  346. *确认收款
  347. *
  348. */
  349. public function order_sure_pay(Request $request){
  350. $order=Order::where('ordersn',$request->order_num)->first();
  351. $order->status=1;
  352. $order->save();
  353. $incom=new IncomExpenses();
  354. $incom->user_id=Auth::user()->id;
  355. $incom->type=0;
  356. $incom->totalprice=$order->price;
  357. $incom->save();
  358. if ($order)
  359. return $this->success([]);
  360. }
  361. /*
  362. * 确认发货
  363. * */
  364. public function order_send(Request $request){
  365. $order=Order::where('ordersn',$request->order_num)->first();
  366. $order->status=2;
  367. $order->save();
  368. return $this->success([]);
  369. }
  370. /*
  371. * 删除订单
  372. * */
  373. public function order_del(Request $request){
  374. $order=Order::where('ordersn',$request->order_num)->first();
  375. $order->status=4;
  376. $order->save();
  377. return $this->success([]);
  378. }
  379. /*
  380. * 确认收货
  381. * */
  382. public function order_complete(Request $request){
  383. $order=Order::where('ordersn',$request->order_num)->first();
  384. $order->status=3;
  385. $order->payed_at=Carbon::now()->toDateTimeString();
  386. $order->save();
  387. $order_all=Order::where('original_ordersn',$request->order_num)->where('turn_is','=',1)->get();
  388. if ($order_all){
  389. foreach ($order_all as $k=>$v){
  390. $orders=Order::find($v->id);
  391. $orders->status=3;
  392. $orders->save();
  393. }
  394. }
  395. $order_data=OrderGoods::where('order_id',$order->id)->get();
  396. foreach ($order_data as $k=>$v){
  397. $good_total=GoodSkuTotal::where('user_id',Auth::user()->id)->where('sku_id',$v->sku_id)->where('goods_id',$v->goods_id)->first();
  398. if ($good_total){
  399. $good_total->total=$good_total->total+$v->num;
  400. $good_total->save();
  401. }else{
  402. $good_totals=new GoodSkuTotal();
  403. $good_totals->goods_id=$v->goods_id;
  404. $good_totals->sku_id=$v->sku_id;
  405. $good_totals->total=$v->num;
  406. $good_totals->user_id=Auth::user()->id;
  407. $good_totals->save();
  408. }
  409. }
  410. return $this->success([]);
  411. }
  412. /*
  413. * 我的订单
  414. */
  415. public function my_order(Request $request){
  416. $user=Auth::user();
  417. if ($request->status==2){
  418. $order=Order::where('user_id',$user->id)
  419. ->where('turn_is',0)->whereIn('status',[3,4])->paginate(15);
  420. }elseif($request->status==1){
  421. $order=Order::where('user_id',$user->id)
  422. ->where('turn_is',0)->whereIn('status',[1,2])->paginate(15);
  423. }else{
  424. $order=Order::where('user_id',$user->id)
  425. ->where('turn_is',0)->where('status',0)->paginate(15);
  426. }
  427. $data=$this->deal_order($order);
  428. return $this->success_list($data[0], '', $data[1]);
  429. }
  430. /**
  431. * 处理订单列表
  432. */
  433. public function deal_order($order,$type=0){
  434. if ($type==0){
  435. $orders = $order->toArray();
  436. $total=$orders['total'];
  437. }else{
  438. $total=0;
  439. }
  440. $data = [];
  441. $datas = [];
  442. foreach ($order as $k => $v) {
  443. Log::error('{-----处理订单----}');
  444. $order_goods_1 = OrderGoods::where('order_id', $v->id)->get();
  445. foreach ($order_goods_1 as $key => $val) {
  446. $order_goods = OrderGoods::find($val->id);
  447. $data[$key]['name'] = $order_goods->goods->name;
  448. $data[$key]['price'] = $val->price;
  449. $data[$key]['num'] = $order_goods->num;
  450. $data[$key]['imgurl'] = $order_goods->goods->img_url;
  451. }
  452. $datas[$k]['forward']=$v->turn_is==0?false:true;
  453. $datas[$k]['status']=$v->status;
  454. $datas[$k]['goodList'] = $data;
  455. $datas[$k]['order_num'] = $v->ordersn;
  456. $datas[$k]['price'] = $v->price;
  457. $datas[$k]['time'] = Carbon::parse($v->created_at)->toDateTimeString();
  458. }
  459. return [$datas,$total];
  460. }
  461. /*
  462. * 已转单部分
  463. * */
  464. public function order_turn(){
  465. $order=Order::where('user_id',Auth::user()->id)->where('turn_is','=',1)->paginate(15);
  466. // Log::error('{-----转单部分---是是是--}'.json_encode($order));
  467. $total=$order->toArray();
  468. // $data=[];
  469. // $datas=[];
  470. // foreach ($order as $key=>$val){
  471. // $orders=Order::where('original_ordersn',$val->ordersn)->get();
  472. // $data=$this->deal_order($orders,1);
  473. // $datas[$key]=$data[0];
  474. // }
  475. $data=$this->deal_order($order,1);
  476. // Log::error('{-----转单部分-----}'.json_encode($datas));
  477. return $this->success_list($data[0],'',$total['total']);
  478. }
  479. public function single_record(Request $request){
  480. $incom=new IncomExpenses();
  481. $incom->totalprice=$request->total;
  482. $incom->type=1;
  483. $incom->user_id=Auth::user()->id;
  484. $incom->save();
  485. $num=$request->total;
  486. $goods_spec=GoodSku::where('goods_id',$request->id)->where('sku_path','like',"%$request->type_id")->get();
  487. foreach ($goods_spec as $k=>$v){
  488. $goods=GoodSkuTotal::where('goods_id',$request->id)->where('sku_id',$v->id)->first();
  489. if ($goods){
  490. if ($goods->total>$num){
  491. $d=GoodSkuTotal::find($goods->id);
  492. $d->total=$goods->total-$num;
  493. $d->save;
  494. return $this->success([]);
  495. }else{
  496. $d=GoodSkuTotal::find($goods->id);
  497. $d->total=0;
  498. $d->save();
  499. // $num=$num-$goods->total;
  500. }
  501. }else{
  502. $d=new GoodSkuTotal();
  503. $d->total=0;
  504. $d->goods_id=$request->id;
  505. $d->sku_id=$v->id;
  506. $d->user_id=Auth::user()->id;
  507. $d->save();
  508. }
  509. }
  510. return $this->success([]);
  511. }
  512. }