You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

372 lines
14 KiB

7 years ago
7 years ago
4 years ago
7 years ago
7 years ago
7 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
6 years ago
7 years ago
7 years ago
6 years ago
7 years ago
7 years ago
6 years ago
7 years ago
6 years ago
7 years ago
6 years ago
7 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
6 years ago
7 years ago
6 years ago
7 years ago
7 years ago
7 years ago
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Admin\CommonController;
  4. use App\Http\Model\Order;
  5. use App\Http\Model\OrderGoods;
  6. use App\Http\Model\User;
  7. use App\Http\Model\Region;
  8. use Illuminate\Support\Facades\DB;
  9. use App\Common\ReturnData;
  10. use Illuminate\Http\Request;
  11. class OrderController extends BaseController
  12. {
  13. public function __construct()
  14. {
  15. parent::__construct();
  16. }
  17. public function index()
  18. {
  19. $res = '';
  20. $where = function ($query) use ($res) {
  21. if(isset($_REQUEST["keyword"]))
  22. {
  23. $query->where(function ($query2){$query2->where('order_sn', 'like', '%'.$_REQUEST['keyword'].'%')->orWhere("name", "like", '%'.$_REQUEST['keyword'].'%')->orWhere("mobile", "like", '%'.$_REQUEST['keyword'].'%');});
  24. }
  25. if(isset($_REQUEST["mobile"]))
  26. {
  27. $query->where('mobile', 'like', '%'.$_REQUEST['mobile'].'%');
  28. }
  29. if(isset($_REQUEST["order_sn"]))
  30. {
  31. $query->where('order_sn', 'like', '%'.$_REQUEST['order_sn'].'%');
  32. }
  33. if(isset($_REQUEST["name"]))
  34. {
  35. $query->where("name", "like", '%'.$_REQUEST['name'].'%');
  36. }
  37. //0或者不传表示全部,1待付款,2待发货,3待收货,4待评价(确认收货,交易成功),5退款/售后
  38. if(isset($_REQUEST["status"]))
  39. {
  40. if($_REQUEST["status"] == 1)
  41. {
  42. $query->where(array('order_status'=>0,'pay_status'=>0));
  43. }
  44. elseif($_REQUEST["status"] == 2)
  45. {
  46. $query->where(array('order_status'=>0,'shipping_status'=>0,'pay_status'=>1));
  47. }
  48. elseif($_REQUEST["status"] == 3)
  49. {
  50. $query->where(array('order_status'=>0,'refund_status'=>0,'shipping_status'=>1,'pay_status'=>1));
  51. }
  52. elseif($_REQUEST["status"] == 4)
  53. {
  54. $query->where(array('order_status'=>3,'refund_status'=>0,'shipping_status'=>2,'is_comment'=>0));
  55. }
  56. elseif($_REQUEST["status"] == 5)
  57. {
  58. $query->where(array('order_status'=>3,'refund_status'=>1));
  59. }
  60. }
  61. $query->where('is_delete', 0); //未删除
  62. };
  63. $posts = parent::pageList('order', $where);
  64. foreach($posts as $key=>$value)
  65. {
  66. $order_status_arr = model('Order')->getOrderStatusAttr($value);
  67. $posts[$key]->order_status_text = $order_status_arr?$order_status_arr['text']:'';
  68. $posts[$key]->order_status_num = $order_status_arr?$order_status_arr['num']:'';
  69. $posts[$key]->province_name = model('Region')->getRegionName(['id'=>$value->province]);
  70. $posts[$key]->city_name = model('Region')->getRegionName(['id'=>$value->city]);
  71. $posts[$key]->district_name = model('Region')->getRegionName(['id'=>$value->district]);
  72. }
  73. $data['posts'] = $posts;
  74. return view('admin.order.index', $data);
  75. }
  76. public function detail()
  77. {
  78. if(!empty($_GET["id"])){$id = $_GET["id"];}else{$id="";}
  79. if(preg_match('/[0-9]*/',$id)){}else{exit;}
  80. $data['id'] = $id;
  81. $data['post'] = Order::where('id', $id)->first();
  82. if($data['post'])
  83. {
  84. $order_status_arr = model('Order')->getOrderStatusAttr($data['post']);
  85. $data['post']['order_status_text'] = $order_status_arr?$order_status_arr['text']:'';
  86. $data['post']['order_status_num'] = $order_status_arr?$order_status_arr['num']:'';
  87. $data['post']['province_name'] = model('Region')->getRegionName(['id'=>$data['post']->province]);
  88. $data['post']['city_name'] = model('Region')->getRegionName(['id'=>$data['post']->city]);
  89. $data['post']['district_name'] = model('Region')->getRegionName(['id'=>$data['post']->district]);
  90. $data['post']['invoice_text'] = model('Order')->getInvoiceAttr($data['post']);
  91. $data['post']['place_type_text'] = model('Order')->getPlaceTypeAttr($data['post']);
  92. $data['post']['user'] = User::where(array('id'=>$data['post']['user_id']))->first(); //下单人信息
  93. $order_goods = OrderGoods::where(array('order_id'=>$data['post']['id']))->get(); //订单商品列表
  94. foreach($order_goods as $k=>$v)
  95. {
  96. $order_goods[$k]['refund_status_text'] = model('OrderGoods')->getRefundStatusAttr($v);
  97. }
  98. $data['post']['goodslist'] = $order_goods;
  99. }
  100. //echo '<pre>';print_r($data['post']);exit;
  101. $data['kuaidi'] = DB::table('kuaidi')->where(['status'=>0])->orderBy('listorder', 'asc')->get();
  102. return view('admin.order.detail', $data);
  103. }
  104. public function doadd()
  105. {
  106. $_POST['add_time'] = time();//更新时间
  107. $_POST['click'] = rand(200,500);//点击
  108. unset($_POST["_token"]);
  109. if(isset($_POST['editorValue'])){unset($_POST['editorValue']);}
  110. if(Order::insert($_POST))
  111. {
  112. success_jump('添加成功', route('admin_order'));
  113. }
  114. else
  115. {
  116. error_jump('添加失败!请修改后重新添加');
  117. }
  118. }
  119. public function add()
  120. {
  121. return view('admin.order.add');
  122. }
  123. public function edit()
  124. {
  125. if(!empty($_GET["id"])){$id = $_GET["id"];}else{$id="";}
  126. if(preg_match('/[0-9]*/',$id)){}else{exit;}
  127. $data['id'] = $id;
  128. $data['post'] = Order::where('id', $id)->first();
  129. return view('admin.order.edit', $data);
  130. }
  131. public function doedit()
  132. {
  133. if(!empty($_POST["id"])){$id = $_POST["id"];unset($_POST["id"]);}else {$id="";exit;}
  134. unset($_POST["_token"]);
  135. if(isset($_POST['editorValue'])){unset($_POST['editorValue']);}
  136. if(Order::where('id', $id)->update($_POST))
  137. {
  138. success_jump('修改成功', route('admin_order'));
  139. }
  140. else
  141. {
  142. error_jump('修改失败!请修改后重新添加');
  143. }
  144. }
  145. public function del()
  146. {
  147. if(!empty($_GET["id"])){$id = $_GET["id"];}else{error_jump("删除失败!请重新提交");} //if(preg_match('/[0-9]*/',$id)){}else{exit;}
  148. if(Order::whereIn("id", explode(',', $id))->update(array('is_delete'=>1)))
  149. {
  150. success_jump('删除成功');
  151. }
  152. else
  153. {
  154. error_jump("删除失败!请重新提交");
  155. }
  156. }
  157. //发货修改物流信息
  158. public function changeShipping(Request $request)
  159. {
  160. if(isset($_POST["id"]) && !empty($_POST["id"])){$id = $_POST["id"];}else{return ReturnData::create(ReturnData::PARAMS_ERROR);}
  161. $data['shipping_id'] = $request->input('shipping_id', '');
  162. $data['shipping_sn'] = $request->input('shipping_sn', '');
  163. if($data['shipping_id'] == ''){return ReturnData::create(ReturnData::PARAMS_ERROR);}
  164. if($data['shipping_id'] == 0)
  165. {
  166. $data['shipping_name'] = '无须物流';
  167. unset($data['shipping_sn']);
  168. }
  169. else
  170. {
  171. if($data['shipping_sn'] == ''){return ReturnData::create(ReturnData::PARAMS_ERROR);}
  172. $data['shipping_name'] = DB::table('kuaidi')->where('id', $data['shipping_id'])->value('name');
  173. }
  174. if(DB::table('order')->where(['id'=>$id,'shipping_status'=>0])->update($data) === false)
  175. {
  176. return ReturnData::create(ReturnData::SYSTEM_FAIL);
  177. }
  178. return ReturnData::create(ReturnData::SUCCESS);
  179. }
  180. //修改订单状态
  181. public function changeStatus(Request $request)
  182. {
  183. if(isset($_POST["id"]) && !empty($_POST["id"])){$id = $_POST["id"];}else{return ReturnData::create(ReturnData::PARAMS_ERROR);}
  184. $status = $request->input('status', '');
  185. if($status==''){return ReturnData::create(ReturnData::PARAMS_ERROR);}
  186. //2设为已付款,3发货,4设为已收货,7设为无效,8同意退款
  187. if($status==2)
  188. {
  189. $data['pay_status'] = 1;
  190. //...
  191. }
  192. elseif($status==3)
  193. {
  194. $data['shipping_status'] = 1;
  195. }
  196. elseif($status==4)
  197. {
  198. $data['order_status'] = 3;
  199. $data['shipping_status'] = 2;
  200. //...
  201. }
  202. elseif($status==7)
  203. {
  204. $data['order_status'] = 2;
  205. //返库存
  206. if(!Order::returnStock($id)){return ReturnData::create(ReturnData::SYSTEM_FAIL);}
  207. }
  208. elseif($status==8)
  209. {
  210. $data['refund_status'] = 2;
  211. $order = DB::table('order')->where('id', $id)->first();
  212. if($order->pay_money>0)
  213. {
  214. //返余额
  215. //增加用户余额
  216. DB::table('user')->where(array('id'=>$order->user_id))->increment('money', $order->pay_money);
  217. //添加用户余额记录
  218. DB::table('user_money')->insert(array('user_id'=>$order->user_id,'type'=>0,'money'=>$order->pay_money,'des'=>'退货-返余额','user_money'=>DB::table('user')->where(array('id'=>$order->user_id))->value('money'),'add_time'=>time()));
  219. }
  220. //返库存
  221. if(!Order::returnStock($id)){return ReturnData::create(ReturnData::SYSTEM_FAIL);}
  222. }
  223. if(DB::table('order')->where('id', $id)->update($data) === false)
  224. {
  225. return ReturnData::create(ReturnData::SYSTEM_FAIL);
  226. }
  227. return ReturnData::create(ReturnData::SUCCESS);
  228. }
  229. //导出订单Excel
  230. public function outputExcel(Request $request)
  231. {
  232. $res = '';
  233. $where = function ($query) use ($res) {
  234. if(isset($_REQUEST["keyword"]))
  235. {
  236. $query->where('order_sn', 'like', '%'.$_REQUEST['keyword'].'%')->orWhere("name", "like", '%'.$_REQUEST['keyword'].'%')->orWhere("mobile", "like", '%'.$_REQUEST['keyword'].'%');
  237. }
  238. if(isset($_REQUEST["min_addtime"]) && isset($_REQUEST["max_addtime"]) && !empty($_REQUEST["min_addtime"]) && !empty($_REQUEST["max_addtime"]))
  239. {
  240. $query->where('add_time', '>=', $_REQUEST['min_addtime'])->where('add_time', '<=', $_REQUEST["max_addtime"]);
  241. }
  242. if(isset($_REQUEST["mobile"]))
  243. {
  244. $query->where('mobile', 'like', '%'.$_REQUEST['mobile'].'%');
  245. }
  246. if(isset($_REQUEST["order_sn"]))
  247. {
  248. $query->where('order_sn', 'like', '%'.$_REQUEST['order_sn'].'%');
  249. }
  250. if(isset($_REQUEST["name"]))
  251. {
  252. $query->where("name", "like", '%'.$_REQUEST['name'].'%');
  253. }
  254. //0或者不传表示全部,1待付款,2待发货,3待收货,4待评价(确认收货,交易成功),5退款/售后
  255. if(isset($_REQUEST["status"]))
  256. {
  257. if($_REQUEST["status"] == 1)
  258. {
  259. $query->where(array('order_status'=>0,'pay_status'=>0));
  260. }
  261. elseif($_REQUEST["status"] == 2)
  262. {
  263. $query->where(array('order_status'=>0,'shipping_status'=>0,'pay_status'=>1));
  264. }
  265. elseif($_REQUEST["status"] == 3)
  266. {
  267. $query->where(array('order_status'=>0,'refund_status'=>0,'shipping_status'=>1));
  268. }
  269. elseif($_REQUEST["status"] == 4)
  270. {
  271. $query->where(array('order_status'=>3,'refund_status'=>0));
  272. }
  273. elseif($_REQUEST["status"] == 5)
  274. {
  275. $query->where(array('order_status'=>3,'refund_status'=>1));
  276. }
  277. }
  278. $query->where('is_delete', 0); //未删除
  279. };
  280. $cellData = [];
  281. array_push($cellData,['ID','订单号','时间','状态','商品总价','应付金额','支付金额','收货人','地址','电话','订单来源']);
  282. $order_list = DB::table('order')->where($where)->orderBy('id', 'desc')->get();
  283. if($order_list)
  284. {
  285. foreach($order_list as $k=>$v)
  286. {
  287. $order_status_arr = Order::getOrderStatusText(object_to_array($v, 1));
  288. $order_list[$k]->order_status_text = $order_status_arr?$order_status_arr['text']:'';
  289. $order_list[$k]->order_status_num = $order_status_arr?$order_status_arr['num']:'';
  290. $order_list[$k]->province_name = Region::getRegionName($v->province);
  291. $order_list[$k]->city_name = Region::getRegionName($v->city);
  292. $order_list[$k]->district_name = Region::getRegionName($v->district);
  293. $order_list[$k]->place_type_text = Order::getPlaceTypeText(['place_type'=>$v->place_type]);
  294. array_push($cellData,[$v->id,$v->order_sn,date('Y-m-d H:i:s',$v->add_time),$order_list[$k]->order_status_text,$v->goods_amount,$v->order_amount,$v->pay_money,$v->name,$order_list[$k]->province_name.$order_list[$k]->city_name.$order_list[$k]->district_name.' '.$v->address,$v->mobile,$order_list[$k]->place_type_text]);
  295. }
  296. }
  297. //导出EXCEL
  298. \Excel::create('订单列表',function($excel) use ($cellData){
  299. // Set the title
  300. $excel->setTitle('order list');
  301. // Chain the setters
  302. $excel->setCreator('FLi')->setCompany('FanCheng');
  303. // Call them separately
  304. $excel->setDescription('A demonstration to change the file properties');
  305. //第一个工作簿,Sheet1是工作簿的名称
  306. $excel->sheet('Sheet1', function($sheet) use ($cellData){
  307. $sheet->rows($cellData);
  308. });
  309. })->download('xls');
  310. }
  311. }