OrderController.php 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Events\CancelOrderEvent;
  4. use App\Events\TipSend;
  5. use App\Events\FinishAccount;
  6. use App\Handlers\ExpressHandler;
  7. use App\Models\AgentNo;
  8. use App\Models\GoodSku;
  9. use App\Models\Inventory;
  10. use App\Models\OrderCancel;
  11. use App\Models\OrderRefund;
  12. use App\Models\OrderDetail;
  13. use App\Models\OrderShare;
  14. use App\Models\OrderW;
  15. use App\Models\Scan;
  16. use App\Models\User;
  17. use App\Models\ShopCar;
  18. use App\Models\VipLog;
  19. use EasyWeChat\Factory;
  20. use Illuminate\Http\Request;
  21. use App\Models\Order;
  22. use App\Models\Goods;
  23. use App\Models\Store;
  24. use App\Models\Comment;
  25. use App\Models\Amount;
  26. use App\Models\DwbsUser;
  27. use Illuminate\Support\Facades\Auth;
  28. use Illuminate\Support\Facades\DB;
  29. use Illuminate\Support\Facades\Log;
  30. use Illuminate\Support\Facades\Validator;
  31. class OrderController extends Controller
  32. {
  33. //我的订单首页
  34. public function getOrderIndex()
  35. {
  36. $user=Auth::user();
  37. $order_num=Order::where('user_id',$user->id)->count();
  38. // if($order_num==0){
  39. // return $this->error('450100','未查询到订单信息,无法登陆');
  40. // }
  41. $total=Order::where('user_id',$user->id)
  42. ->whereIn('apply_cancel',[0,1,3])
  43. ->whereIn('is_refund',[0,1,2])
  44. ->select('status',DB::raw('count(status) as count'))
  45. ->groupBy('status')->get();
  46. // foreach($total as $key=>$val){
  47. // if($val->status==3){
  48. // $total[$key]->count=Order::where('user_id',$user->id)->where('status',3)->count();
  49. // }
  50. // }
  51. $order=Order::with(['cancel'=>function($query){$query->where('using',1);},'refund','store:id,name,img,phone'])
  52. ->whereIn('apply_cancel',[0,1,3])
  53. ->whereIn('is_refund',[0,1,2])
  54. ->where('user_id',$user->id)->orderByDesc('created_at')->first();
  55. if(!empty($order)){
  56. $goods_ids=OrderDetail::where('order_no',$order->order_no)->groupBy('goods_id')->pluck('goods_id');
  57. $goods=[];
  58. foreach($goods_ids as $key=>$val){
  59. $goods[$key]=Goods::where('id',$val)->first();
  60. $goods[$key]->sku=OrderDetail::where('order_no',$order->order_no)->where('goods_id',$val)->get();
  61. }
  62. $order->goods=$goods;
  63. }
  64. $data['user']=$user;
  65. $data['total']=$total;
  66. $data['order']=$order;
  67. $refund_total=OrderRefund::where('user_id',$user->id)->count();
  68. $cancel_total=Order::where('user_id',$user->id)
  69. ->whereIn('apply_cancel',[1,2,3])->count();
  70. $data['refund_total']=$refund_total+$cancel_total;
  71. $data['all_total']=Order::where('user_id',$user->id)
  72. ->whereIn('apply_cancel',[0,1,3])
  73. ->count();
  74. $data['order_num']=$order_num;
  75. return $this->success($data);
  76. }
  77. //获取订单状态数量
  78. public function getOrderStatusNum(){
  79. $where['user_id']=Auth::user()->id;
  80. $data=Order::where($where)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1,2]);
  81. $data1=clone $data;
  82. $data2=clone $data;
  83. $data3=clone $data;
  84. $num['noPay']=$data->where('status',0)->count();
  85. $num['noSend']=$data1->where('status',1)->count();
  86. $num['noReceive']=$data2->where('status',2)->count();
  87. $num['Finish']=$data3->where('status',3)->count();
  88. return $this->success($num);
  89. }
  90. //获取用户订单列表
  91. public function getOrderList(Request $request)
  92. {
  93. $input=$request->all();
  94. $page_index=$input['page_index'];
  95. $page_size=$input['page_size'];
  96. $order_no=$input['order_no'];
  97. $num=$page_size*($page_index-1);
  98. $status=$input['status'];
  99. $where=$wheres=[];
  100. if($status!='all'){
  101. $where['status']=$status;
  102. }
  103. $where['user_id']=Auth::user()->id;
  104. if($order_no){
  105. $wheres=function($query)use($order_no){
  106. $query->where('order_no','like','%'.$order_no.'%');
  107. };
  108. }
  109. $orders=Order::with(['cancel'=>function($query){$query->where('using',1);},'refund','store:id,name,img,phone'])
  110. ->where($where)->where($wheres)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1,2])
  111. ->orderByDesc('id')->skip($num)->take($page_size)->get();
  112. $count=Order::where($where)->where($wheres)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1,2])->count();
  113. foreach($orders as $key=>$val){
  114. $goods_ids=OrderDetail::where('order_no',$val->order_no)->groupBy('goods_id')->pluck('goods_id');
  115. $goods=[];
  116. foreach($goods_ids as $k=>$v){
  117. $goods[$k]=Goods::where('id',$v)->first();
  118. $goods[$k]->sku=OrderDetail::where('order_no',$val->order_no)->where('goods_id',$v)->get();
  119. }
  120. $orders[$key]->goods=$goods;
  121. }
  122. return $this->success_list($orders,'成功',$count);
  123. }
  124. //获取退货订单详情
  125. public function getRefundOrderDetail(Request $request){
  126. $order_no=$request->input('order_no');
  127. $order_refund=OrderRefund::where('order_no',$order_no)->get();
  128. foreach($order_refund as $key => $val){
  129. $goods_ids = OrderDetail::where('order_no', $val->refund_no)->groupBy('goods_id')->pluck('goods_id');
  130. $goods = [];
  131. foreach ($goods_ids as $k => $v) {
  132. $goods[$k] = Goods::where('id', $v)->first();
  133. $goods[$k]->sku = OrderDetail::where('order_no', $val->refund_no)->where('goods_id', $v)->get();
  134. }
  135. $order_refund[$key]->goods=$goods;
  136. }
  137. return $this->success($order_refund);
  138. }
  139. //扫码后判断店铺信息
  140. // public function getUserStoreDiff(Request $request){
  141. // $user=User::where('id',Auth::user()->id)->first();
  142. // $order_no=$request->input('order_no');
  143. // $order=OrderShare::where('order_no',$order_no)->first();
  144. // $data['type']='noReplace';
  145. // if(empty($user->store_id)){
  146. // User::where('id',Auth::user()->id)->update(['store_id'=>$order->store_id]);
  147. // }else{
  148. // if($user->store_id!=$order->store_id){
  149. // $data['type']='replace';
  150. // $data['store_id']=$order->store_id;
  151. // $data['is_vip'] = $user->is_vip;
  152. // $data['before_store']=Store::where('id',$user->store_id)->value('name');
  153. // $data['after_store']=Store::where('id',$order->store_id)->value('name');
  154. // }
  155. // }
  156. // return $this->success($data);
  157. // }
  158. //替换店铺
  159. public function replaceStore(Request $request){
  160. $store_id=$request->input('store_id');
  161. $res=User::where('id',Auth::user()->id)->update(['store_id'=>$store_id,'is_vip'=>0]);
  162. if($res){
  163. return $this->success([]);
  164. }else{
  165. return $this->error();
  166. }
  167. }
  168. //扫码获取分享订单
  169. // public function getShareOrder(Request $request){
  170. // $user=User::where('id',Auth::user()->id)->first();
  171. // $order_no=$request->input('order_no');
  172. // Log::info($order_no);
  173. // $order=OrderShare::where('order_no',$order_no)->first();
  174. // $order->address=[];
  175. // if($order->user_id==$user->id){
  176. // if($order->address_id){
  177. // $order->address=Address::where('id',$order->address_id)->first();
  178. // }
  179. // }
  180. // $goods_ids=OrderDetail::where('order_no',$order_no)->groupBy('goods_id')->pluck('goods_id');
  181. // $goods=[];
  182. // foreach($goods_ids as $key=>$val){
  183. // $goods[$key]=Goods::where('id',$val)->first();
  184. // $goods[$key]->sku=OrderDetail::where('order_no',$order->order_no)->where('goods_id',$val)->get();
  185. // }
  186. // $order->goods=$goods;
  187. // $order->store=Store::where('id',$user->store_id)->select('id','name','img')->first();
  188. // $order->vip=$this->getOrderPrice($user->id,$order->total);
  189. // return $this->success($order);
  190. // }
  191. //判断订单价格
  192. protected function getOrderPrice($user_id,$store_id,$num){
  193. $vipLog=VipLog::where('user_id',$user_id)->where('store_id',$store_id)->first();
  194. if($vipLog){
  195. return 'vip_ed';//vip价格
  196. }else{
  197. if($num>=2){
  198. return 'vip_ing';//vip价格
  199. }else{
  200. return 'normal';//正常价
  201. }
  202. }
  203. }
  204. //记录下单时代理关系
  205. protected function saveAgentNoLog($user_id,$agent_id,$order_no){
  206. $one=$agent_id;
  207. $one_agent=DwbsUser::where('id',$one)->first();
  208. $data=[];
  209. $data[0]['order_no'] = $order_no;
  210. $data[0]['user_id'] = $user_id;
  211. // $data[0]['agent_id'] = $one;
  212. $data[0]['level'] = $one_agent->level;
  213. $data[0]['nickname'] = $one_agent->nickname;
  214. $data[0]['phone'] = $one_agent->mobile;
  215. $data[0]['created_at'] = date("Y-m-d H:i:s");
  216. $data[0]['updated_at'] = date("Y-m-d H:i:s");
  217. if($one_agent->level==2 || $one_agent->level==1){
  218. $two=DwbsUser::where('id',$one)->value('agent_id');
  219. $two_agent=DwbsUser::where('id',$two)->first();
  220. $data[1]['order_no'] = $order_no;
  221. $data[1]['user_id'] = $user_id;
  222. // $data[1]['agent_id'] = $two;
  223. $data[1]['level'] = $two_agent->level;
  224. $data[1]['nickname'] = $two_agent->nickname;
  225. $data[1]['phone'] = $two_agent->mobile;
  226. $data[1]['created_at'] = date("Y-m-d H:i:s");
  227. $data[1]['updated_at'] = date("Y-m-d H:i:s");
  228. if($two_agent->level==2){
  229. $three=DwbsUser::where('id',$two)->value('agent_id');
  230. $three_agent=DwbsUser::where('id',$three)->first();
  231. $data[2]['order_no'] = $order_no;
  232. $data[2]['user_id'] = $user_id;
  233. // $data[2]['agent_id'] = $three;
  234. $data[2]['level'] = $three_agent->level;
  235. $data[2]['nickname'] = $three_agent->nickname;
  236. $data[2]['phone'] = $three_agent->mobile;
  237. $data[2]['created_at'] = date("Y-m-d H:i:s");
  238. $data[2]['updated_at'] = date("Y-m-d H:i:s");
  239. }
  240. }
  241. return $data;
  242. }
  243. //提交订单
  244. public function submitOrderInfo(Request $request)
  245. {
  246. $user_id=Auth::user()->id;
  247. $user=User::where('id',$user_id)->first();
  248. $input=$request->all();
  249. $sku=$input['sku'];
  250. $is_car=$input['is_car'];
  251. $store_id=$input['store_id'];
  252. // $agent_id=Store::where('id',$store_id)->value('user_id');
  253. $store=Store::where('id',$store_id)->first();
  254. if(empty($store)){
  255. return $this->error('450001','代理店铺不存在或者已被删除');
  256. }
  257. if($store->status==1){
  258. return $this->error('450001','代理店铺已被禁用');
  259. }
  260. $agent_id=$store->user_id;
  261. $agent=DwbsUser::where('id',$agent_id)->first();
  262. if(empty($agent)){
  263. return $this->error('450001','代理不存在或已被删除');
  264. }
  265. if($agent->status==1){
  266. return $this->error('450001','代理已被禁用');
  267. }
  268. $remark=$input['remark'];
  269. $order_no=Order::order_no('dd');
  270. $account=$vip_account=$cost_account=$num=0;
  271. $list=$sku_ids=$snapshot=[];
  272. foreach($sku as $key=>$val){
  273. if($val[1] > 0){
  274. $num += $val[1];
  275. }
  276. }
  277. $vip=$this->getOrderPrice($user->id,$store_id,$num);
  278. $arr_test=Store::getTest();
  279. foreach($sku as $key=>$val){
  280. $sku_info=[];
  281. if($val[1] > 0){
  282. $goodSku=GoodSku::with(['goods'])->where('id',$val[0])->first();
  283. if(!array_key_exists($goodSku->goods_id,$snapshot)){
  284. $snapshot[$goodSku->goods_id]['name']=$goodSku->goods->name;
  285. $snapshot[$goodSku->goods_id]['main_attr']=$goodSku->goods->main_attr;
  286. $snapshot[$goodSku->goods_id]['img']=$goodSku->goods->img;
  287. $snapshot[$goodSku->goods_id]['price']=$goodSku->goods->price;
  288. $snapshot[$goodSku->goods_id]['sku']=[];
  289. }
  290. if(empty($goodSku)){
  291. return $this->error('450001','商品规格不存在,刷新页面重新下单');
  292. }
  293. if(in_array($store_id,$arr_test)){
  294. $storeInventory=Inventory::where(['store_id'=>$store_id,'goods_id'=>$goodSku->goods_id,'sku_id'=>$val[0]])->lockForUpdate()->first();
  295. $storeInve_num=!empty($storeInventory)?$storeInventory->num:0;
  296. if($val[1] > $storeInve_num){
  297. return $this->error('450001','【'.$goodSku->goods->main_attr.'-'.$goodSku->type.'-'.$goodSku->size.'】库存不足');
  298. }
  299. }
  300. if($vip=='vip_ed' || $vip=='vip_ing'){
  301. $list[$key]['price']=$goodSku->goods->vip_price;
  302. $sku_info['price']=$goodSku->goods->vip_price;
  303. $list[$key]['account']=$goodSku->goods->vip_price * $val[1];
  304. $account += $goodSku->goods->vip_price * $val[1];
  305. }else{
  306. $list[$key]['price']=$goodSku->goods->price;
  307. $sku_info['price']=$goodSku->goods->price;
  308. $list[$key]['account']=$goodSku->goods->price * $val[1];
  309. $account += $goodSku->goods->price * $val[1];
  310. }
  311. if($agent->level==1){
  312. $cost_account += $goodSku->goods->super_price * $val[1];
  313. $list[$key]['cost_price']=$goodSku->goods->super_price;
  314. $list[$key]['cost_account']=$goodSku->goods->super_price * $val[1];
  315. }
  316. if($agent->level==2){
  317. $cost_account += $goodSku->goods->top_price * $val[1];
  318. $list[$key]['cost_price']=$goodSku->goods->top_price;
  319. $list[$key]['cost_account']=$goodSku->goods->top_price * $val[1];
  320. }
  321. if($agent->level==3){
  322. $cost_account += $goodSku->goods->crown_price * $val[1];
  323. $list[$key]['cost_price']=$goodSku->goods->crown_price;
  324. $list[$key]['cost_account']=$goodSku->goods->crown_price * $val[1];
  325. }
  326. $list[$key]['origin_price']=$goodSku->goods->price;
  327. $list[$key]['order_no']=$order_no;
  328. $list[$key]['goods_id']=$goodSku->goods_id;
  329. $list[$key]['store_id']=$store_id;
  330. $list[$key]['user_id']=$user->id;
  331. $list[$key]['sku_id']=$goodSku->id;
  332. $list[$key]['num']=$val[1];
  333. $list[$key]['size']=$goodSku->size;
  334. $list[$key]['type']=$goodSku->type;
  335. $list[$key]['style']=1;
  336. $list[$key]['created_at']=date("Y-m-d H:i:s");
  337. $list[$key]['updated_at']=date("Y-m-d H:i:s");
  338. $sku_info['origin_price']=$goodSku->goods->price;
  339. $sku_info['sku_id']=$goodSku->id;
  340. $sku_info['num']=$val[1];
  341. $sku_info['size']=$goodSku->size;
  342. $sku_info['type']=$goodSku->type;
  343. array_push($snapshot[$goodSku->goods_id]['sku'],$sku_info);
  344. if ($is_car==1) {
  345. $sku_ids[] = $val[0];
  346. }
  347. }
  348. }
  349. $data=[
  350. 'order_no'=>$order_no,
  351. 'store_id'=>$store_id,
  352. 'user_id'=>$user->id,
  353. 'remark'=>$remark,
  354. 'status'=>0,
  355. 'is_help'=>0,
  356. 'is_pay'=>0,
  357. 'is_tip_send'=>0,
  358. 'is_comment'=>0,
  359. 'total'=>$num,
  360. 'account'=>$account,
  361. 'cost_account'=>$cost_account,
  362. 'snapshot'=>json_encode($snapshot)
  363. ];
  364. $agent_id=Store::where('id',$store_id)->value('user_id');
  365. $agent_data=$this->saveAgentNoLog($user->id,$agent_id,$order_no);
  366. DB::beginTransaction();
  367. try{
  368. $result=Order::create($data);
  369. foreach($list as $k=>$v){
  370. $list[$k]['order_id']=$result->id;
  371. }
  372. OrderDetail::insert($list);
  373. AgentNo::insert($agent_data);
  374. if ($is_car==1) {
  375. ShopCar::where('user_id', $data['user_id'])->whereIn('sku_id', $sku_ids)->delete();
  376. }
  377. DB::commit();
  378. return $this->success($order_no);
  379. }catch(\Exception $e){
  380. DB::rollBack();
  381. return $this->error('450001',$e->getMessage());
  382. }
  383. }
  384. //修改订单备注信息
  385. public function editOrderRemark(Request $request){
  386. $order_no=$request->input('order_no');
  387. $remark=$request->input('remark');
  388. $res=Order::where('order_no',$order_no)->update([
  389. 'remark'=>$remark
  390. ]);
  391. if($res){
  392. return $this->success([]);
  393. }else{
  394. return $this->error();
  395. }
  396. }
  397. //获取订单信息(id)
  398. public function getOrderInfo(Request $request)
  399. {
  400. $input=$request->all();
  401. $id=$input['id'];
  402. $order=Order::with(['address','cancel'=>function($query){$query->where('using',1);},'store:id,name,img,phone','refund'])
  403. ->where('id',$id)->first();
  404. $goods_ids=OrderDetail::where('order_no',$order->order_no)->groupBy('goods_id')->pluck('goods_id');
  405. $goods=[];
  406. foreach($goods_ids as $key=>$val){
  407. $goods[$key]=Goods::where('id',$val)->first();
  408. $goods[$key]->sku=OrderDetail::where('order_no',$order->order_no)->where('goods_id',$val)->get();
  409. }
  410. $order->goods=$goods;
  411. return $this->success($order);
  412. }
  413. //根据订单号查询订单
  414. public function getOrderNoInfo(Request $request)
  415. {
  416. $input=$request->all();
  417. $order_no=$input['order_no'];
  418. $data=Order::withTrashed()->with(['user:id,nickname,phone,avatar','address','cancel'=>function($query){$query->where('using',1);},'store:id,name,img,phone','refund']);
  419. $order=$data->where('order_no',$order_no)->first();
  420. $user_id=Auth::user()->id;
  421. if(empty($order)){
  422. return $this->error('450018','订单不存在');
  423. }
  424. if($user_id != $order->user_id){
  425. $user=User::where('id',$user_id)->first();
  426. $order_user=User::where('id',$order->user_id)->first();
  427. if(empty($user->phone) && empty($order_user->openId)){
  428. return $this->error('450005','是否与该订单所绑定手机账号:'.$order_user->phone.'进行合并');
  429. }
  430. return $this->error('450019','这是其他人的订单,你无法进入');
  431. }
  432. $goods_ids=OrderDetail::where('order_no',$order->order_no)->groupBy('goods_id')->pluck('goods_id');
  433. $goods=[];
  434. foreach($goods_ids as $key=>$val){
  435. $goods[$key]=Goods::where('id',$val)->first();
  436. $goods[$key]->sku=OrderDetail::where('order_no',$order->order_no)->where('goods_id',$val)->get();
  437. }
  438. $order->goods=$goods;
  439. return $this->success($order);
  440. }
  441. //扫码获取订单,并合并用户
  442. public function getScanOrder(Request $request){
  443. $order_no=$request->input('order_no');
  444. $data=Order::withTrashed()->with(['user:id,nickname,phone,avatar','address','cancel'=>function($query){$query->where('using',1);},'store:id,name,img,phone','refund']);
  445. $order=$data->where('order_no',$order_no)->first();
  446. $user_id=Auth::user()->id;
  447. // $user=User::where('id',$user_id)->first();
  448. if(empty($order)){
  449. return $this->error('450018','扫码订单不存在');
  450. }
  451. // $token=null;
  452. // if($user_id != $order->user_id){
  453. //
  454. // $order_user=User::where('id',$order->user_id)->first();
  455. // if(empty($user->phone) && empty($order_user->openId)){
  456. // DB::transaction(function()use($order_user,$user){
  457. // $order_user->openId=$user->openId;
  458. // $order_user->avatar=$user->avatar;
  459. // $order_user->nickname=$user->nickname;
  460. // $order_user->name=$user->name;
  461. // $order_user->save();
  462. // $user->delete();
  463. // },5);
  464. // $order->user->nickname=$user->nickname;
  465. // $token = Auth::guard('api')->fromUser($order_user);
  466. // }else{
  467. // return $this->error('450019','这是其他人的订单,你无法进入');
  468. // }
  469. // }
  470. $goods_ids=OrderDetail::where('order_no',$order->order_no)->groupBy('goods_id')->pluck('goods_id');
  471. $goods=[];
  472. foreach($goods_ids as $key=>$val){
  473. $goods[$key]=Goods::where('id',$val)->first();
  474. $goods[$key]->sku=OrderDetail::where('order_no',$order->order_no)->where('goods_id',$val)->get();
  475. }
  476. if($order_no){
  477. $scan=Scan::where('user_id',$user_id)->where('store_id',$order->store_id)->first();
  478. if(!$scan){
  479. Scan::create([
  480. 'user_id'=>$user_id,
  481. 'store_id'=>$order->store_id,
  482. 'goods_id'=>null,
  483. 'order_no'=>$order_no,
  484. 'is_store'=>3
  485. ]);
  486. }
  487. }
  488. $order->goods=$goods;
  489. $result['order']=$order;
  490. return $this->success($result);
  491. }
  492. //提醒发货
  493. public function tipSend(Request $request)
  494. {
  495. $input=$request->all();
  496. $order_id=$input['order_id'];
  497. $order=Order::with('store')->where('id',$order_id)->first();
  498. if($order->status != 1){
  499. return $this->error('450001','订单状态不符,请核对后再操作');
  500. }
  501. if($order->is_tip_send == 1 && time() < strtotime($order->tip_send_at."+1 day")){
  502. return $this->error('450001','近期已提醒,请稍后重试(24小时内不再提醒)');
  503. }
  504. $order->is_tip_send=1;
  505. $order->tip_send_at=date("Y-m-d H:i:s");
  506. $res=$order->save();
  507. if($res){
  508. $user=DwbsUser::where('id',$order->store->user_id)->first();
  509. if($user->openid){
  510. $data['openid']=$user->openid;
  511. $data['data']=[
  512. 'first' => '您有新的客户订单等待发货,请及时处理',
  513. 'keyword1' => $order->order_no,
  514. 'keyword2' => number_format($order->account, 2),
  515. 'keyword3' => Auth::user()->nickname,
  516. 'keyword4' => '已付款,待发货'
  517. ];
  518. event(new TipSend($data));
  519. }
  520. return $this->success([]);
  521. }else{
  522. return $this->error();
  523. }
  524. }
  525. //确认已自提
  526. public function sureOneSelfTake(Request $request){
  527. $order_no=$request->input('order_no');
  528. $order=Order::where('order_no',$order_no)->first();
  529. $order->status = 3;
  530. $order->order_status = 0;
  531. $res=$order->save();
  532. if($res){
  533. event(new FinishAccount($order->order_no));
  534. return $this->success([]);
  535. }else{
  536. return $this->error();
  537. }
  538. }
  539. //确认收货
  540. public function surePickUp(Request $request)
  541. {
  542. $input=$request->all();
  543. $order_id=$input['order_id'];
  544. $order=Order::with('address')->where('id',$order_id)->first();
  545. if(empty($order)){
  546. return $this->error('450001','该订单不存在');
  547. }
  548. if($order->status==3){
  549. return $this->error('450001','该订单已确认收货');
  550. }
  551. // if($order->status==2){
  552. // $CustomerName = null;
  553. // if($order->express_code=='SF'){
  554. // $CustomerName = substr($order->address->phone,-4);
  555. // }
  556. // $express=new ExpressHandler();
  557. // $express->getExpress($order->express_no, $order->express_code, $order->order_no, $CustomerName);
  558. // }
  559. $order->status=3;
  560. $order->order_status=0;//用户收货
  561. $res=$order->save();
  562. if($res){
  563. event(new FinishAccount($order->order_no));
  564. return $this->success([]);
  565. }else{
  566. return $this->error();
  567. }
  568. }
  569. //提交评价
  570. // public function addComment(Request $request){
  571. // $input=$request->all();
  572. // $rules=[
  573. // 'content'=>'required|max:255',
  574. // ];
  575. // $message=[
  576. // 'content.required'=>'评价内容不能为空.',
  577. // 'content.max'=>'评价内容不能大于255个字符.'
  578. // ];
  579. // $validator = Validator::make($input,$rules,$message);
  580. // if($validator->fails()){
  581. // return $this->error('400013',$validator->errors()->first());
  582. // }
  583. // try {
  584. // DB::transaction(function () use ($input) {
  585. // if (isset($input['order_id']) && !empty($input['order_id'])) {
  586. // $order_id = $input['order_id'];
  587. // Order::where('id', $order_id)->update(['is_comment' => 1]);
  588. // } else {
  589. // $order_id = null;
  590. // }
  591. // $user = Auth::user();
  592. // Comment::create([
  593. // 'star' => $input['star']??0,
  594. // 'content' => $input['content'],
  595. // 'comment_id' => 0,
  596. // 'user_id' => $user->id,
  597. // 'store_id' => $user->store_id,
  598. // 'order_id' => $order_id,
  599. // 'is_reply' => 1,
  600. // 'is_see' => 0
  601. // ]);
  602. // }, 5);
  603. // return $this->success([]);
  604. // }catch(\Exception $e){
  605. // return $this->error($e->getMessage());
  606. // }
  607. // }
  608. //我的评价
  609. public function getComment(Request $request){
  610. $input=$request->all();
  611. $page_index=$input['page_index'];
  612. $page_size=$input['page_size'];
  613. $num=$page_size*($page_index-1);
  614. $user=Auth::user();
  615. $count= Comment::where('user_id',$user->id)->where('comment_id',0)->count();
  616. $list= Comment::with(['comment','store:id,name,img','user:id,avatar,nickname,phone'])
  617. ->where('user_id',$user->id)->where('comment_id',0)
  618. ->orderByDesc('id')->skip($num)->take($page_size)->get();
  619. return $this->success_list($list,'成功',$count);
  620. }
  621. //查询订单物流信息
  622. public function getOrderExpress(Request $request){
  623. $order_no=$request->input('order_no');
  624. $order=Order::with('address')->where('order_no',$order_no)->first();
  625. if(empty($order)){
  626. return $this->error('450001','订单信息有误');
  627. }
  628. if($order->express_state==3){ //已签收
  629. $express=json_decode($order->express_info,true);
  630. }else{ //未签收
  631. $express=new ExpressHandler();
  632. $CustomerName = null;
  633. if($order->express_code=='SF'){
  634. $CustomerName = substr($order->express_phone,-4);
  635. }
  636. $express=$express->getExpress($order->express_no, $order->express_code, $order->order_no, $CustomerName);
  637. }
  638. $data['express']=$express;
  639. $data['express_state']=$order->express_state;
  640. $data['express_company']=$order->express_company;
  641. $data['express_no']=$order->express_no;
  642. $data['express_time']=$order->express_time;
  643. return $this->success($data);
  644. }
  645. //用户发起退款
  646. public function startRefundAmount(Request $request){
  647. $order_no=$request->input('order_no');
  648. $res=Order::where('order_no',$order_no)
  649. ->update(['status'=>4,'refund_status'=>'APPLY','refund_time'=>date("Y-m-d H:i:s")]);//申请退款
  650. if($res){
  651. return $this->success([]);
  652. }else{
  653. return $this->error();
  654. }
  655. }
  656. //获取支付成功提示页面信息
  657. public function getPayResult(Request $request){
  658. Log::info('0');
  659. $sub_mchid_id=$request->input('sub_mch_id');
  660. $out_trade_nos=$request->input('out_trade_no');
  661. $check_code=$request->input('check_code');
  662. $out_trade_no=explode('_',$out_trade_nos)[1];
  663. $order=Order::with('store:id,name,img')->where('order_no',$out_trade_no)
  664. ->select('id','order_no','wechat_pay_no','total','account','pay_money','is_help')->first();
  665. Log::info(json_encode($order));
  666. if(empty($order)){
  667. return $this->error('450001','获取商家小票信息失败1.0');
  668. }
  669. Log::info($check_code);
  670. $url='https://api.appadmin.woaidakele.cn/receipts.html?sub_mch_id='.$sub_mchid_id.'&out_trade_no='.$out_trade_nos.'&transaction_id='.$order->wechat_pay_no;
  671. Log::info($url);
  672. if($check_code==md5($url)){
  673. Log::info('1.2');
  674. return $this->success($order);
  675. }else{
  676. Log::info('1.0');
  677. return $this->error('450001','获取商家小票信息失败1.1');
  678. }
  679. }
  680. //取消订单
  681. public function cancelOrder(Request $request){
  682. $id=$request->input('id');
  683. if($request->has('reason')){
  684. $reason=$request->input('reason');
  685. }else{
  686. $reason=null;
  687. }
  688. $order=Order::where('id',$id)->first();
  689. if($order->apply_cancel==1){
  690. return $this->error('450001','该订单正在取消审核中,不能再次取消');
  691. }
  692. if($order->apply_cancel==2){
  693. return $this->error('450001','该订单已取消,不能再次取消');
  694. }
  695. DB::beginTransaction();
  696. if($order->status==0){
  697. $order->apply_cancel=2;
  698. $order->cancel_at=date("Y-m-d H:i:s");
  699. try {
  700. $order->save();
  701. OrderCancel::create([
  702. 'user_id' => $order->user_id,
  703. 'store_id' => $order->store_id,
  704. 'order_id' => $order->id,
  705. 'status' => 2,
  706. 'using' => 1,
  707. 'type' => 1, //客户自己取消
  708. 'reason' => $reason.'/用户取消'
  709. ]);
  710. DB::commit();
  711. return $this->success([]);
  712. }catch(\Exception $e){
  713. DB::rollBack();
  714. return $this->error($e->getMessage());
  715. }
  716. }elseif($order->status==1){
  717. try{
  718. $order->apply_cancel=1;
  719. $order->cancel_at=date("Y-m-d H:i:s");
  720. $order->save();
  721. OrderCancel::where('user_id',$order->user_id)
  722. ->where('store_id',$order->store_id)
  723. ->where('order_id',$order->id)->update(['using'=>0]);
  724. OrderCancel::create([
  725. 'user_id' =>$order->user_id,
  726. 'store_id'=>$order->store_id,
  727. 'order_id'=>$order->id,
  728. 'status' =>1,
  729. 'using' =>1,
  730. 'type' => 1, //客户自己取消
  731. 'reason' =>$reason.'/用户取消'
  732. ]);
  733. //取消订单通知
  734. $user=User::where('id',$order->user_id)->first();
  735. $store=Store::where('id',$order->store_id)->first();
  736. $agent=DwbsUser::withTrashed()->where('id',$store->user_id)->first();
  737. if($agent->openid){
  738. $data['openid']=$agent->openid;
  739. $data['data']=[
  740. 'first' => '您的客户【'.$user->nickname.'】提交了新的取消订单申请,请及时处理',
  741. 'keyword1' => $user->nickname,
  742. 'keyword2' => $order->order_no,
  743. 'keyword3' => '已支付',
  744. 'keyword4' => $order->cancel_at
  745. ];
  746. event(new CancelOrderEvent($data));
  747. }
  748. DB::commit();
  749. return $this->success([]);
  750. }catch(\Exception $e){
  751. DB::rollBack();
  752. return $this->error($e->getMessage());
  753. }
  754. }else{
  755. return $this->error('450001','该订单不能取消');
  756. }
  757. }
  758. }