OrderController.php 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Goods;
  4. use App\Models\GoodsSpec;
  5. use App\Models\GoodsSku;
  6. use App\Models\GoodsSkuPrice;
  7. use App\Models\GoodsAgentTotal;
  8. use App\Models\User;
  9. use App\Models\Address;
  10. use App\Models\Order;
  11. use App\Models\OrderBreakup;
  12. use App\Models\Message;
  13. use Illuminate\Http\Request;
  14. use Illuminate\Support\Facades\Log;
  15. use Illuminate\Support\Facades\Auth;
  16. use Illuminate\Support\Facades\DB;
  17. use \Exception;
  18. class OrderController extends Controller
  19. {
  20. //获取订单信息列表
  21. public function getOrderList(Request $request){
  22. $input=$request->all();
  23. $page_size=$input['page_size'];
  24. $page_index=$input['page_index'];
  25. $num = ($page_index - 1) * $page_size;
  26. $search_name=$input['search_name'];
  27. if(empty($input['time'])){
  28. $input['time'][0]=date("Y-m-d 00:00:00",strtotime("-1 years"));
  29. $input['time'][1]=date("Y-m-d H:i:s");
  30. }
  31. $starttime=date("Y-m-d H:i:s",strtotime($input['time'][0]));
  32. $endtime= date("Y-m-d H:i:s",strtotime($input['time'][1]));
  33. $time = [$starttime, $endtime];
  34. if($input['status']=='all'){
  35. $where=[];
  36. }else{
  37. $where['status']=$input['status'];
  38. }
  39. $count=Order::where('ordersn', 'like', '%' . $search_name . '%')
  40. ->whereBetween('created_at', $time)
  41. ->where($where)
  42. ->count();
  43. if($count==0){
  44. $this->error('400001','没有数据');
  45. }
  46. $list=Order::where('ordersn', 'like', '%' . $search_name . '%')
  47. ->where($where)
  48. ->with(['address:id,username,address,mobile','user:id,realname,nickname,level','agent:id,realname,nickname',
  49. 'ordergoods'
  50. => function ($query) {
  51. $query->select('order_id','goods_id',DB::raw('group_concat(distinct sku_id,"|",price,"|",num) as sku'))
  52. ->groupBy('order_id','goods_id');
  53. }
  54. ])
  55. ->whereBetween('created_at', $time)
  56. ->orderBy('id','desc')
  57. ->skip($num)->take($page_size)
  58. ->get()->toArray();
  59. foreach($list as $keys => $value){
  60. $list[$keys]['num']=0;
  61. $list[$keys]['crown']=[];
  62. foreach($value['ordergoods'] as $key=>$val){
  63. $goods=Goods::find($val['goods_id']);
  64. if($goods){
  65. $list[$keys]['ordergoods'][$key]['goodsname']=$goods->name;
  66. $list[$keys]['ordergoods'][$key]['imgurl']=$goods->img_url;
  67. }
  68. if($val['sku']){
  69. foreach(explode(',',$val['sku']) as $k =>$v) {
  70. $sku=explode('|',$v);
  71. $list[$keys]['ordergoods'][$key]['goodssku'][$k] = $this->getSku($sku[0]);
  72. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['price'] = $sku[1];
  73. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['num'] = $sku[2];
  74. $list[$keys]['num'] += $sku[2];
  75. }
  76. }
  77. }
  78. $list[$keys]['crown']=$this->getAgentCrownInfo($value['user']['id']);
  79. }
  80. return $this->success_list($list,'SUCCESS',$count);
  81. }
  82. //导出订单信息列表
  83. public function exportOrderList(Request $request){
  84. $input=$request->all();
  85. $page_size=$input['page_size'];
  86. $page_index=$input['page_index'];
  87. $num = ($page_index - 1) * $page_size;
  88. $search_name=$input['search_name'];
  89. if(empty($input['time'])){
  90. $input['time'][0]=date("Y-m-d 00:00:00",strtotime("-1 years"));
  91. $input['time'][1]=date("Y-m-d 00:00:00");
  92. }
  93. $starttime=date("Y-m-d H:i:s",strtotime($input['time'][0]));
  94. $endtime= date("Y-m-d H:i:s",strtotime($input['time'][1]));
  95. $time = [$starttime, $endtime];
  96. if($input['status']=='all'){
  97. $where=[];
  98. }else{
  99. $where['status']=$input['status'];
  100. }
  101. $list=Order::where('ordersn', 'like', '%' . $search_name . '%')
  102. ->where($where)
  103. ->with(['address:id,username,address,mobile','user:id,realname,nickname','agent:id,realname,nickname',
  104. 'ordergoods'
  105. => function ($query) {
  106. $query->select('order_id','goods_id',DB::raw('group_concat(distinct sku_id,"|",price,"|",num) as sku'))
  107. ->groupBy('order_id','goods_id');
  108. }
  109. ])
  110. ->whereBetween('created_at', $time)
  111. ->orderBy('id','desc')
  112. ->skip($num)->take($page_size)
  113. ->get()->toArray();
  114. if(empty($list)){
  115. return $this->error('410004','没有订单信息');
  116. }
  117. foreach($list as $keys => $value){
  118. $list[$keys]['num']=0;
  119. $list[$keys]['crown']=[];
  120. foreach($value['ordergoods'] as $key=>$val){
  121. $goods=Goods::find($val['goods_id']);
  122. if($goods){
  123. $list[$keys]['ordergoods'][$key]['goodsname']=$goods->name;
  124. $list[$keys]['ordergoods'][$key]['imgurl']=$goods->img_url;
  125. }
  126. if($val['sku']){
  127. foreach(explode(',',$val['sku']) as $k =>$v) {
  128. $sku=explode('|',$v);
  129. $list[$keys]['ordergoods'][$key]['goodssku'][$k] = $this->getSku($sku[0]);
  130. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['price'] = $sku[1];
  131. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['num'] = $sku[2];
  132. $list[$keys]['num'] += $sku[2];
  133. }
  134. }
  135. }
  136. $list[$keys]['crown']=$this->getAgentCrownInfo($value['user']['id']);
  137. }
  138. if($list){
  139. return $this->success($list);
  140. }else{
  141. return $this->error();
  142. }
  143. }
  144. public function getOrderPrice($goodsinfo,$mobile){
  145. $level=User::where('mobile',$mobile)->value('level');
  146. $totalPrice=0;
  147. foreach($goodsinfo as $key =>$val){
  148. foreach($val['skuList'] as $k=>$v){
  149. $price=GoodsSkuPrice::withTrashed()->where('sku_id',$v['id'])->where('user_level',$level)->value('price');
  150. $totalPrice+=$v['num']*$price;
  151. }
  152. }
  153. return $totalPrice;
  154. }
  155. /*后台添加订单*/
  156. public function uploadOrder(Request $request){
  157. $input=$request->all();
  158. $ooo=new Order();
  159. $validator = $ooo->validator($input);
  160. if($validator->fails()){
  161. return $this->error('400013',$validator->errors()->first());
  162. }
  163. $user=User::where('mobile',$input['member'])->first();
  164. if(empty($user)){
  165. return $this->error('400135','代理信息不存在');
  166. }
  167. $totalPrice=$this->getOrderPrice($input['goods'],$input['member']);
  168. DB::beginTransaction();
  169. try {
  170. $addressId = $ooo->createAddressInfo($input);
  171. $manOrder = $ooo->createManualOrder($user, $addressId,$input['remark']);
  172. if ($user->level == '3') { //皇冠进货
  173. $crown['agent_id'] = '1';
  174. $crown['user_id'] = $user->id;
  175. $crown['address_id'] = $addressId;
  176. $crown['desc'] = $input['remark'];
  177. $crown['price'] = $totalPrice;
  178. $OrderId = $ooo->createOrder($manOrder, $user, $crown);
  179. foreach ($input['goods'] as $key => $val) {
  180. foreach ($val['skuList'] as $k => $v) {
  181. $ooo->createOrderGoods($val, $v, $user, $OrderId, $manOrder);
  182. }
  183. }
  184. } elseif($user->level == '2') { //顶级进货
  185. $crown1['agent_id'] = $user->agent_id;
  186. $crown1['user_id'] = $user->id;
  187. $crown1['address_id'] = $addressId;
  188. $crown1['desc'] = $input['remark'];
  189. $crown1['price'] = $totalPrice;
  190. $OrderId1 = $ooo->createOrder($manOrder, $user, $crown1);
  191. $crown2['agent_id'] = '1';
  192. $crown2['user_id'] = $user->agent_id;
  193. $crown2['address_id'] = $addressId;
  194. $crown2['desc'] = $input['remark'];
  195. $crown2['price'] = $totalPrice;
  196. $OrderId2 = $ooo->createOrder($manOrder, $user, $crown2);
  197. foreach ($input['goods'] as $key => $val) {
  198. foreach ($val['skuList'] as $k => $v) {
  199. $ooo->createOrderGoods($val, $v, $user, $OrderId1, $manOrder);
  200. }
  201. }
  202. foreach ($input['goods'] as $key => $val) {
  203. foreach ($val['skuList'] as $k => $v) {
  204. $ooo->createOrderGoods($val, $v, $user, $OrderId2, $manOrder);
  205. }
  206. }
  207. }elseif($user->level == '1') { //特级进货
  208. $upAgent=User::find($user->agent_id);//代理上级信息
  209. if($upAgent->level==3){
  210. $crown1['agent_id'] = $user->agent_id;
  211. $crown1['user_id'] = $user->id;
  212. $crown1['address_id'] = $addressId;
  213. $crown1['desc'] = $input['remark'];
  214. $crown1['price'] = $totalPrice;
  215. $OrderId1 = $ooo->createOrder($manOrder, $user, $crown1);
  216. $crown2['agent_id'] = '1';
  217. $crown2['user_id'] = $user->agent_id;
  218. $crown2['address_id'] = $addressId;
  219. $crown2['desc'] = $input['remark'];
  220. $crown2['price'] = $totalPrice;
  221. $OrderId2 = $ooo->createOrder($manOrder, $user, $crown2);
  222. foreach ($input['goods'] as $key => $val) {
  223. foreach ($val['skuList'] as $k => $v) {
  224. $ooo->createOrderGoods($val, $v, $user, $OrderId1, $manOrder);
  225. }
  226. }
  227. foreach ($input['goods'] as $key => $val) {
  228. foreach ($val['skuList'] as $k => $v) {
  229. $ooo->createOrderGoods($val, $v, $user, $OrderId2, $manOrder);
  230. }
  231. }
  232. }else{
  233. $crown1['agent_id'] = $user->agent_id;
  234. $crown1['user_id'] = $user->id;
  235. $crown1['address_id'] = $addressId;
  236. $crown1['desc'] = $input['remark'];
  237. $crown1['price'] = $totalPrice;
  238. $OrderId1 = $ooo->createOrder($manOrder, $user, $crown1);
  239. $crown2['agent_id'] = $upAgent->agent_id;
  240. $crown2['user_id'] = $user->agent_id;
  241. $crown2['address_id'] = $addressId;
  242. $crown2['desc'] = $input['remark'];
  243. $crown2['price'] = $totalPrice;
  244. $OrderId2 = $ooo->createOrder($manOrder, $user, $crown2);
  245. $crown3['agent_id'] = '1';
  246. $crown3['user_id'] = $upAgent->agent_id;
  247. $crown3['address_id'] = $addressId;
  248. $crown3['desc'] = $input['remark'];
  249. $crown3['price'] = $totalPrice;
  250. $OrderId3 = $ooo->createOrder($manOrder, $user, $crown3);
  251. foreach ($input['goods'] as $key => $val) {
  252. foreach ($val['skuList'] as $k => $v) {
  253. $ooo->createOrderGoods($val, $v, $user, $OrderId1, $manOrder);
  254. }
  255. }
  256. foreach ($input['goods'] as $key => $val) {
  257. foreach ($val['skuList'] as $k => $v) {
  258. $ooo->createOrderGoods($val, $v, $user, $OrderId2, $manOrder);
  259. }
  260. }
  261. foreach ($input['goods'] as $key => $val) {
  262. foreach ($val['skuList'] as $k => $v) {
  263. $ooo->createOrderGoods($val, $v, $user, $OrderId3, $manOrder);
  264. }
  265. }
  266. }
  267. }
  268. $this->goodsTotalChange($input['goods'],$user->id);
  269. foreach($input['goods'] as $key=>$val){
  270. $gi=Goods::find($val['goodId']);
  271. if($user->level==1){
  272. $arr[$key]['price']=$gi->tjprice;
  273. }elseif($user->level==2){
  274. $arr[$key]['price']=$gi->djprice;
  275. }elseif($user->level==3){
  276. $arr[$key]['price']=$gi->hgprice;
  277. }
  278. $arr[$key]['name']=$gi->name;
  279. $arr[$key]['img']=$gi->img_url;
  280. $arr[$key]['num']=0;
  281. foreach($val['skuList'] as $k=>$v){
  282. $arr[$key]['num']+=$v['num'];
  283. }
  284. $message['title']='订单通知';
  285. $message['type']='2';
  286. $message['status']='0';
  287. $message['data']=json_encode($arr);
  288. $message['user_id']=$user->id;
  289. $message['agent_id']='1';
  290. $message['nickname']=$user->nickname;
  291. Message::create($message);
  292. }
  293. DB::commit();
  294. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')添加订单成功,'.'收货人:'.$input['name'].',代理手机号:'.$input['mobile']);
  295. return $this->success([]);
  296. }catch(Exception $e){
  297. // echo $e->getMessage();
  298. DB::rollBack();
  299. return $this->error();
  300. }
  301. }
  302. //库存管理
  303. public function goodsTotalChange($goodsInfo,$uid){
  304. foreach($goodsInfo as $key =>$val){
  305. foreach($val['skuList'] as $k=>$v){
  306. $info=GoodsAgentTotal::where('user_id',$uid)->where('goods_id',$val['goodId'])->where('sku_id',$v['id'])->first();
  307. if($info){
  308. GoodsAgentTotal::where('goods_id',$val['goodId'])
  309. ->where('user_id', $uid)
  310. ->where('sku_id',$v['id'])
  311. ->increment('total', $v['num']);
  312. }else{
  313. $data['user_id']=$uid;
  314. $data['goods_id']=$val['goodId'];
  315. $data['sku_id']=$v['id'];
  316. $data['total']=$v['num'];
  317. GoodsAgentTotal::create($data);
  318. }
  319. }
  320. }
  321. }
  322. //获取商品规格数据
  323. public function getSku($id){
  324. $Sku=GoodsSku::withTrashed()->find($id);
  325. $path=$Sku->sku_path;
  326. $arr=explode('/',$path);
  327. $goodsSku=[];
  328. foreach($arr as $k=>$v){
  329. $upSpec=GoodsSpec::withTrashed()->where('id',$v)->first();
  330. $upSpec['uptitle']=GoodsSpec::withTrashed()->where('id',$upSpec->pid)->value('title');
  331. $goodsSku[$upSpec['uptitle']]=$upSpec->title;
  332. }
  333. return $goodsSku;
  334. }
  335. //获取皇冠信息
  336. public function getAgentCrownInfo($id){
  337. $user=User::withTrashed()->find($id);
  338. $crown=[];
  339. if($user['level']==3){
  340. $crown=User::withTrashed()->where('id',$user->id)->select('id','realname','nickname','mobile')->first();
  341. }elseif($user['level']==2){
  342. $crown=User::withTrashed()->where('id',$user->agent_id)->select('id','realname','nickname','mobile')->first();
  343. }elseif($user['level']==1){
  344. $agent=User::withTrashed()->where('id',$user->agent_id)->value('id');
  345. $crown=User::withTrashed()->where('id',$agent)->select('id','realname','nickname','mobile')->first();
  346. }
  347. return $crown;
  348. }
  349. /*获取代理订单*/
  350. public function getAgentOrder(Request $request){
  351. $input=$request->all();
  352. $page_size=$input['page_size'];
  353. $page_index=$input['page_index'];
  354. $num = ($page_index - 1) * $page_size;
  355. $search_name=$input['search_name'];
  356. if(empty($input['time'])){
  357. $input['time'][0]=date("Y-m-d 00:00:00",strtotime("-1 years"));
  358. $input['time'][1]=date("Y-m-d 00:00:00");
  359. }
  360. $starttime=date("Y-m-d H:i:s",strtotime($input['time'][0]));
  361. $endtime= date("Y-m-d H:i:s",strtotime($input['time'][1]));
  362. $time = [$starttime, $endtime];
  363. $where['status']=1;
  364. $where['agent_id']=1;
  365. $count=Order::where('ordersn', 'like', '%' . $search_name . '%')
  366. ->whereBetween('created_at', $time)
  367. ->where($where)
  368. ->count();
  369. if($count==0){
  370. $this->error('400001','没有数据');
  371. }
  372. $list=Order::where('ordersn', 'like', '%' . $search_name . '%')
  373. ->whereBetween('created_at', $time)
  374. ->where($where)
  375. ->with(['address:id,username,address,mobile','user:id,realname,nickname','agent:id,realname,nickname',
  376. 'ordergoods'
  377. => function ($query) {
  378. $query->select('order_id','goods_id',DB::raw('group_concat(distinct sku_id,"|",price,"|",num) as sku'))
  379. ->groupBy('order_id','goods_id');
  380. }
  381. ])
  382. ->orderBy('id','desc')
  383. ->skip($num)->take($page_size)
  384. ->get()->toArray();
  385. foreach($list as $keys => $value){
  386. $list[$keys]['num']=0;
  387. $list[$keys]['crown']=[];
  388. foreach($value['ordergoods'] as $key=>$val){
  389. $goods=Goods::find($val['goods_id']);
  390. if($goods){
  391. $list[$keys]['ordergoods'][$key]['goodsname']=$goods->name;
  392. $list[$keys]['ordergoods'][$key]['imgurl']=$goods->img_url;
  393. }
  394. foreach(explode(',',$val['sku']) as $k =>$v) {
  395. $sku=explode('|',$v);
  396. $list[$keys]['ordergoods'][$key]['goodssku'][$k] = $this->getSku($sku[0]);
  397. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['price'] = $sku[1];
  398. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['num'] = $sku[2];
  399. $list[$keys]['num'] += $sku[2];
  400. }
  401. }
  402. $list[$keys]['crown']=$this->getAgentCrownInfo($value['user']['id']);
  403. }
  404. return $this->success_list($list,'SUCCESS',$count);
  405. }
  406. /*导出代理订单*/
  407. public function exportAgentOrder(Request $request){
  408. $input=$request->all();
  409. $page_size=$input['page_size'];
  410. $page_index=$input['page_index'];
  411. $num = ($page_index - 1) * $page_size;
  412. $search_name=$input['search_name'];
  413. if(empty($input['time'])){
  414. $input['time'][0]=date("Y-m-d 00:00:00",strtotime("-1 years"));
  415. $input['time'][1]=date("Y-m-d 00:00:00");
  416. }
  417. $starttime=date("Y-m-d H:i:s",strtotime($input['time'][0]));
  418. $endtime= date("Y-m-d H:i:s",strtotime($input['time'][1]));
  419. $time = [$starttime, $endtime];
  420. $where['status']=1;
  421. $where['agent_id']=1;
  422. $list=Order::where('ordersn', 'like', '%' . $search_name . '%')
  423. ->whereBetween('created_at', $time)
  424. ->where($where)
  425. ->with(['address:id,username,address,mobile','user:id,realname,nickname','agent:id,realname,nickname',
  426. 'ordergoods'
  427. => function ($query) {
  428. $query->select('order_id','goods_id',DB::raw('group_concat(distinct sku_id,"|",price,"|",num) as sku'))
  429. ->groupBy('order_id','goods_id');
  430. }
  431. ])
  432. ->orderBy('id','desc')
  433. ->skip($num)->take($page_size)
  434. ->get()->toArray();
  435. if(empty($list)){
  436. return $this->error('410004','没有订单信息');
  437. }
  438. foreach($list as $keys => $value){
  439. $list[$keys]['num']=0;
  440. $list[$keys]['crown']=[];
  441. foreach($value['ordergoods'] as $key=>$val){
  442. $goods=Goods::find($val['goods_id']);
  443. if($goods){
  444. $list[$keys]['ordergoods'][$key]['goodsname']=$goods->name;
  445. $list[$keys]['ordergoods'][$key]['imgurl']=$goods->img_url;
  446. }
  447. foreach(explode(',',$val['sku']) as $k =>$v) {
  448. $sku=explode('|',$v);
  449. $list[$keys]['ordergoods'][$key]['goodssku'][$k] = $this->getSku($sku[0]);
  450. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['price'] = $sku[1];
  451. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['num'] = $sku[2];
  452. $list[$keys]['num'] += $sku[2];
  453. }
  454. }
  455. $list[$keys]['crown']=$this->getAgentCrownInfo($value['user']['id']);
  456. }
  457. return $this->success($list);
  458. }
  459. /*获取转单订单*/
  460. public function getIsturnOrder(Request $request){
  461. $input=$request->all();
  462. $page_size=$input['page_size'];
  463. $page_index=$input['page_index'];
  464. $num = ($page_index - 1) * $page_size;
  465. $search_name=$input['search_name'];
  466. if(empty($input['time'])){
  467. $input['time'][0]=date("Y-m-d 00:00:00",strtotime("-1 years"));
  468. $input['time'][1]=date("Y-m-d 00:00:00");
  469. }
  470. $starttime=date("Y-m-d H:i:s",strtotime($input['time'][0]));
  471. $endtime= date("Y-m-d H:i:s",strtotime($input['time'][1]));
  472. $time = [$starttime, $endtime];
  473. // if($input['status']=='all'){
  474. $where=[];
  475. // }else{
  476. // $where['status']=$input['status'];
  477. // }
  478. // $where['status']<3;
  479. // $where['is_turn']=1;
  480. $count=Order::where('ordersn', 'like', '%' . $search_name . '%')
  481. ->where($where)
  482. ->whereBetween('created_at', $time)
  483. ->whereIn('is_turn',[1,2])
  484. ->with(['address:id,username,address,mobile','user:id,realname,nickname','agent:id,realname,nickname',
  485. 'ordergoods'
  486. => function ($query) {
  487. $query->select('order_id','goods_id',DB::raw('group_concat(distinct sku_id,"|",price,"|",num) as sku'))
  488. ->groupBy('order_id','goods_id');
  489. }
  490. ])
  491. ->count();
  492. if($count==0){
  493. $this->error('400001','没有数据');
  494. }
  495. $list=Order::where('ordersn', 'like', '%' . $search_name . '%')
  496. ->where($where)
  497. ->whereBetween('created_at', $time)
  498. ->whereIn('is_turn',[1,2])
  499. ->with(['address:id,username,address,mobile','user:id,realname,nickname','agent:id,realname,nickname',
  500. 'ordergoods'
  501. => function ($query) {
  502. $query->select('order_id','goods_id',DB::raw('group_concat(distinct sku_id,"|",price,"|",num) as sku'))
  503. ->groupBy('order_id','goods_id');
  504. }
  505. ])
  506. ->orderBy('id','desc')
  507. ->skip($num)->take($page_size)
  508. ->get()->toArray();
  509. foreach($list as $keys => $value){
  510. $list[$keys]['num']=0;
  511. $list[$keys]['crown']=[];
  512. foreach($value['ordergoods'] as $key=>$val){
  513. $goods=Goods::find($val['goods_id']);
  514. if($goods){
  515. $list[$keys]['ordergoods'][$key]['goodsname']=$goods->name;
  516. $list[$keys]['ordergoods'][$key]['imgurl']=$goods->img_url;
  517. }
  518. foreach(explode(',',$val['sku']) as $k =>$v) {
  519. $sku=explode('|',$v);
  520. $list[$keys]['ordergoods'][$key]['goodssku'][$k] = $this->getSku($sku[0]);
  521. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['price'] = $sku[1];
  522. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['num'] = $sku[2];
  523. $list[$keys]['num'] += $sku[2];
  524. }
  525. }
  526. $list[$keys]['crown']=$this->getAgentCrownInfo($value['user']['id']);
  527. }
  528. return $this->success_list($list,'SUCCESS',$count);
  529. }
  530. /*导出转单订单*/
  531. public function exportIsturnOrder(Request $request){
  532. $input=$request->all();
  533. $page_size=$input['page_size'];
  534. $page_index=$input['page_index'];
  535. $num = ($page_index - 1) * $page_size;
  536. $search_name=$input['search_name'];
  537. if(empty($input['time'])){
  538. $input['time'][0]=date("Y-m-d 00:00:00",strtotime("-1 years"));
  539. $input['time'][1]=date("Y-m-d 00:00:00");
  540. }
  541. $starttime=date("Y-m-d H:i:s",strtotime($input['time'][0]));
  542. $endtime= date("Y-m-d H:i:s",strtotime($input['time'][1]));
  543. $time = [$starttime, $endtime];
  544. $where=[];
  545. $list=Order::where('ordersn', 'like', '%' . $search_name . '%')
  546. ->where($where)
  547. ->whereBetween('created_at', $time)
  548. ->whereIn('is_turn',[1,2])
  549. ->with(['address:id,username,address,mobile','user:id,realname,nickname','agent:id,realname,nickname',
  550. 'ordergoods'
  551. => function ($query) {
  552. $query->select('order_id','goods_id',DB::raw('group_concat(distinct sku_id,"|",price,"|",num) as sku'))
  553. ->groupBy('order_id','goods_id');
  554. }
  555. ])
  556. ->orderBy('id','desc')
  557. ->skip($num)->take($page_size)
  558. ->get()->toArray();
  559. if(empty($list)){
  560. return $this->error('410004','没有订单信息');
  561. }
  562. foreach($list as $keys => $value){
  563. $list[$keys]['num']=0;
  564. $list[$keys]['crown']=[];
  565. foreach($value['ordergoods'] as $key=>$val){
  566. $goods=Goods::find($val['goods_id']);
  567. if($goods){
  568. $list[$keys]['ordergoods'][$key]['goodsname']=$goods->name;
  569. $list[$keys]['ordergoods'][$key]['imgurl']=$goods->img_url;
  570. }
  571. foreach(explode(',',$val['sku']) as $k =>$v) {
  572. $sku=explode('|',$v);
  573. $list[$keys]['ordergoods'][$key]['goodssku'][$k] = $this->getSku($sku[0]);
  574. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['price'] = $sku[1];
  575. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['num'] = $sku[2];
  576. $list[$keys]['num'] += $sku[2];
  577. }
  578. }
  579. $list[$keys]['crown']=$this->getAgentCrownInfo($value['user']['id']);
  580. }
  581. return $this->success($list);
  582. }
  583. //确认 发货
  584. public function confirmSendGoods(Request $request){
  585. $input=$request->all();
  586. $order=Order::find($input['id']);//当前订单信息
  587. if($order->is_turn<>'0' && $order->turn_is=='1'){
  588. return $this->error('411003','订单状态有误');
  589. }
  590. DB::beginTransaction();
  591. try {
  592. if ($order->is_turn == 0 && $order->turn_is == 0) { //既没有转单,也没有被转单
  593. $order->status = '2';//当前订单 发货
  594. $order->save();
  595. } elseif ($order->is_turn == 0 && $order->turn_is == 1) { //转单后生成的订单
  596. $count = OrderBreakup::where('ordersn', $order->original_ordersn)->count();//原订单拆单数量 全部转单、部分转单
  597. if ($count == 1) {//全部转单
  598. OrderBreakup::where('ordersn', $order->original_ordersn)->update(['status' => 1]);//当前订单转单数据 发货
  599. Order::where('ordersn', $order->ordersn)->where('is_turn', '1')->where('status', '1')->update(['status' => 2]);//原始订单 发货
  600. Order::where('id', $input['id'])->update(['status' => 2]);//当前订单 发货
  601. } elseif ($count == 2) {//部分转单
  602. $orderbreakup_To = OrderBreakup::where('ordersn', $order->original_ordersn)->where('id', '<>', $order->breakup_id)->first();//另一个订单转单数据
  603. if ($orderbreakup_To->status == 1) {//另一个转单数据已发货
  604. OrderBreakup::where('ordersn', $order->original_ordersn)->where('id', '=', $order->breakup_id)->update(['status' => 1]);///当前订单转单数据 发货
  605. Order::where('ordersn', $order->original_ordersn)->where('is_turn', '2')->where('status', '1')->update(['status' => 2]);//原始订单 发货
  606. Order::where('id', $input['id'])->update(['status' => 2]);//当前订单发货
  607. } else {//另一个转单数据未发货
  608. OrderBreakup::where('ordersn', $order->original_ordersn)->where('id', '=', $order->breakup_id)->update(['status' => 1]);//当前订单的转单 发货
  609. Order::where('id', $input['id'])->update(['status' => 2]);//当前订单发货
  610. }
  611. // }else{
  612. // $order_cc=Order::where('original_ordersn',$order->ordersn)->first(); //当前订单为原始订单,的转单信息
  613. // $orderbreakup=OrderBreakup::where('ordersn',$order->ordersn)->where('id','=',$order_cc->breakup_id)->first();//转单生成订单
  614. // if($orderbreakup->status==1){
  615. // OrderBreakup::where('ordersn',$order->ordersn)->where('id','<>',$order->breakup_id)->update(['status'=>1]);
  616. // Order::where('ordersn',$order->ordersn)->where('is_turn','1')->where('status','1')->update(['status'=>2]);
  617. // Order::where('original_ordersn',$order->ordersn)->where('breakup_id',$order->breakup_id)->where('turn_is','1')->where('status','1')->update(['status'=>2]);
  618. // }else{
  619. // OrderBreakup::where('ordersn',$order->ordersn)->where('id','<>',$order->breakup_id)->update(['status'=>1]);
  620. // Order::where('ordersn',$order->ordersn)->where('is_turn','1')->where('status','1')->update(['status'=>2]);
  621. // }
  622. // }
  623. }
  624. }
  625. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')确认发货成功,订单号:'.$order->ordersn);
  626. DB::commit();
  627. return $this->success([]);
  628. }catch(Exception $e){
  629. DB::rollBack();
  630. return $this->error();
  631. }
  632. }
  633. /*取消订单*/
  634. public function shelvedOrder(Request $request){
  635. $input=$request->all();
  636. $order=Order::find($input['id']);
  637. if($order->status<>'0' || $order->status<>'1'){ // 代付款 或 待发货
  638. return $this->error('411057','订单状态有误');
  639. }
  640. $order->status='4'; //已取消
  641. $row=$order->save();
  642. if($row){
  643. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')取消订单成功,订单号'.$order->ordersn);
  644. return $this->success([]);
  645. }
  646. return $this->error();
  647. }
  648. /*删除订单*/
  649. // public function destoryOrder(Request $request){
  650. // $input=$request->all();
  651. // $order=Order::find($input['id']);
  652. // if($order->status<>'3' || $order->status<>'4'){ // 已取消 或 已完成
  653. // return $this->error('411057','订单状态有误');
  654. // }
  655. // $row=$order->delete();
  656. // if($row){
  657. // return $this->success([]);
  658. // }
  659. // return $this->error();
  660. // }
  661. /*修改订单地址*/
  662. public function updateOrderAddress(Request $request){
  663. $input=$request->all();
  664. $ooo=new Order();
  665. $validator = $ooo->validator($input);
  666. if($validator->fails()){
  667. return $this->error('400013',$validator->errors()->first());
  668. }
  669. $address=Address::find($input['id']);
  670. $address->username=$input['name'];
  671. $address->mobile=$input['mobile'];
  672. $address->address=$input['address'];
  673. $row=$address->save();
  674. if($row){
  675. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')修改订单地址成功,地址id:'.$address->id);
  676. return $this->success([]);
  677. }
  678. return $this->error();
  679. }
  680. /*确认收款*/
  681. public function confirmReceipt(Request $request){
  682. $input=$request->all();
  683. $row=Order::where('ordersn',$input['order'])->update(['status'=>'1']);
  684. if($row){
  685. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')确认订单收款,订单号:'.$input['order']);
  686. return $this->success([]);
  687. }
  688. return $this->error();
  689. }
  690. /* 获取转单信息 */
  691. public function getBreakupOrder(Request $request){
  692. $input=$request->all();
  693. $list=OrderBreakup::with(['user:id,nickname','sender:id,nickname','agent:id,nickname','ordergoods'
  694. => function ($query) {
  695. $query->select('breakup_id','goods_id',DB::raw('group_concat(distinct sku_id,"|",price,"|",num) as sku'))
  696. ->groupBy('breakup_id','goods_id');
  697. }])
  698. ->where('ordersn',$input['ordersn'])->get()->toArray();
  699. foreach($list as $keys => $value){
  700. foreach($value['ordergoods'] as $key=>$val){
  701. $goods=Goods::find($val['goods_id']);
  702. if($goods){
  703. $list[$keys]['ordergoods'][$key]['goodsname']=$goods->name;
  704. $list[$keys]['ordergoods'][$key]['imgurl']=$goods->img_url;
  705. }
  706. foreach(explode(',',$val['sku']) as $k =>$v) {
  707. $sku=explode('|',$v);
  708. $list[$keys]['ordergoods'][$key]['goodssku'][$k] = $this->getSku($sku[0]);
  709. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['price'] = $sku[1];
  710. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['num'] = $sku[2];
  711. }
  712. }
  713. }
  714. if($list){
  715. return $this->success($list);
  716. }
  717. return $this->error();
  718. }
  719. /*获取流水账单*/
  720. public function getBillsRunningWater(Request $request){
  721. $input=$request->all();
  722. $page_size=$input['page_size'];
  723. $page_index=$input['page_index'];
  724. $num = ($page_index - 1) * $page_size;
  725. $search_name=$input['search_name'];
  726. $count=Order::where('ordersn', 'like', '%' . $search_name . '%')
  727. ->where(function ($query) {
  728. $query->where('status',1)
  729. ->orWhere('status',2)
  730. ->orWhere('status',3);
  731. })
  732. ->count();
  733. if($count==0){
  734. $this->error('400001','没有数据');
  735. }
  736. $list=Order::where('ordersn', 'like', '%' . $search_name . '%')
  737. ->where(function ($query) {
  738. $query->where('status',1)
  739. ->orWhere('status',2)
  740. ->orWhere('status',3);
  741. })
  742. ->with(['address:id,username,address,mobile','user:id,realname','agent:id,realname',
  743. 'ordergoods'
  744. => function ($query) {
  745. $query->select('order_id','goods_id',DB::raw('group_concat(distinct sku_id,"|",price,"|",num) as sku'))
  746. ->groupBy('order_id','goods_id');
  747. }
  748. ])
  749. ->orderBy('id','desc')
  750. ->skip($num)->take($page_size)
  751. ->get()->toArray();
  752. foreach($list as $keys => $value){
  753. $list[$keys]['total']=0;
  754. $list[$keys]['totalprice']=0;
  755. foreach($value['ordergoods'] as $key=>$val){
  756. $goods=Goods::find($val['goods_id']);
  757. if($goods){
  758. $list[$keys]['ordergoods'][$key]['goodsname']=$goods->name;
  759. $list[$keys]['ordergoods'][$key]['imgurl']=$goods->img_url;
  760. }
  761. foreach(explode(',',$val['sku']) as $k =>$v) {
  762. $sku=explode('|',$v);
  763. $list[$keys]['ordergoods'][$key]['goodssku'][$k] = $this->getSku($sku[0]);
  764. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['price'] = $sku[1];
  765. $list[$keys]['ordergoods'][$key]['goodssku'][$k]['num'] = $sku[2];
  766. $list[$keys]['total']+=$sku[2];
  767. $list[$keys]['totalprice']+=$sku[1]*$sku[2];
  768. }
  769. }
  770. }
  771. return $this->success_list($list,'SUCCESS',$count);
  772. }
  773. }