OrderController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. <?php
  2. namespace App\Admin\Controllers\Company;
  3. use App\Admin\Extensions\Form\ValidateForm;
  4. use App\Http\Controllers\Controller;
  5. use App\Models\Order;
  6. use App\Services\Common\OrderService;
  7. use App\Services\Common\PayService;
  8. use Encore\Admin\Controllers\HasResourceActions;
  9. use Encore\Admin\Facades\Admin;
  10. use Encore\Admin\Form;
  11. use Encore\Admin\Grid;
  12. use Encore\Admin\Layout\Content;
  13. use Encore\Admin\Show;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\Route;
  16. class OrderController extends Controller
  17. {
  18. use HasResourceActions;
  19. /**
  20. * Index interface.
  21. *
  22. * @param Content $content
  23. * @return Content
  24. */
  25. public function index(Content $content)
  26. {
  27. $name = Route::currentRouteName();
  28. $arr = explode('.', $name);
  29. if ($arr[1] == 'company') {
  30. $type_id = 1;
  31. } else {
  32. $type_id = 2;
  33. }
  34. return $content
  35. ->header('订单管理')
  36. ->description('列表')
  37. ->body($this->grid($type_id));
  38. }
  39. /**
  40. * Show interface.
  41. *
  42. * @param mixed $id
  43. * @param Content $content
  44. * @return Content
  45. */
  46. public function show($id, Content $content)
  47. {
  48. return $content
  49. ->header('订单管理')
  50. ->description('详情')
  51. ->body($this->detail($id));
  52. }
  53. public function detail($id)
  54. {
  55. $show = new Show(Order::findOrFail($id));
  56. $show->oid('订单ID');
  57. $show->order_type('订单类型')->as(function ($order_type) {
  58. $arr = [
  59. 1=>"套餐升级",
  60. 2=>"充值积分",
  61. 3=>"简历置顶",
  62. 4=>"醒目标签",
  63. 5=>"简历模板",
  64. 6=>"简历包",
  65. 7=>"短信包",
  66. 8=>"职位置顶",
  67. 9=>"职位紧急",
  68. 10=>"企业模板",
  69. 12=>"预约刷新职位",
  70. 13=>"职位刷新",
  71. 14=>"简历下载",
  72. 15=>"职位包",
  73. 16=>"招聘会包",
  74. ];
  75. return $arr[$order_type];
  76. });
  77. $show->pay_type('支付类型')->as(function ($pay_type) {
  78. switch ($pay_type) {
  79. case 1:
  80. return '积分';
  81. break;
  82. case 2:
  83. return '现金';
  84. break;
  85. case 3:
  86. return '现金+积分';
  87. break;
  88. }
  89. });
  90. $show->is_pay('支付状态')->as(function ($is_pay) {
  91. switch ($is_pay) {
  92. case 1:
  93. return '待支付';
  94. break;
  95. case 2:
  96. return '已支付';
  97. break;
  98. case 3:
  99. return '已取消';
  100. break;
  101. }
  102. });
  103. $show->amount('总金额');
  104. $show->pay_amount('现金支付金额');
  105. $show->pay_points('支付积分');
  106. $show->payment_cn('支付方式');
  107. $show->description('订单描述');
  108. $show->service_name('购买服务名称');
  109. $show->payment_time('支付时间')->as(function ($payment_time) {
  110. if ($payment_time) {
  111. return date('Y-m-d H:i:s', $payment_time);
  112. }
  113. });
  114. return $show;
  115. }
  116. /**
  117. * Edit interface.
  118. *
  119. * @param mixed $id
  120. * @param Content $content
  121. * @return Content
  122. */
  123. public function edit($id, Content $content)
  124. {
  125. $name = Route::currentRouteName();
  126. $arr = explode('.', $name);
  127. if ($arr[1] == 'company') {
  128. $type_id = 1;
  129. } else {
  130. $type_id = 2;
  131. }
  132. return $content
  133. ->header('订单管理')
  134. ->description('编辑')
  135. ->body($this->form($type_id)->edit($id));
  136. }
  137. /**
  138. * Make a grid builder.
  139. *
  140. * @return Grid
  141. */
  142. protected function grid($type)
  143. {
  144. $grid = new Grid(new Order);
  145. $grid ->model()->where('utype', $type)
  146. /*->when(get_subsite_id()>0, function ($querys) use ($type) {
  147. if ($type ==1) {
  148. $relations = 'companys';
  149. } else {
  150. $relations = 'members';
  151. }
  152. $querys->whereHas($relations, function ($query) {
  153. $query->where('subsite_id', get_subsite_id());
  154. });
  155. })*/
  156. ->orderBy('created_at', 'desc')->orderBy("is_pay", 'asc');
  157. $grid->is_pay('支付状态')->display(function ($is_pay) {
  158. if ($is_pay == 1) {
  159. return '<span style="color: #FF3300">待付款</span>';
  160. } elseif ($is_pay == 2) {
  161. return '<span style="color: #009900">已付款</span>';
  162. } else {
  163. return '已取消';
  164. }
  165. });
  166. $grid->amount('金额')->width(150);
  167. if ($type == 1) {
  168. $grid->column('companys.companyname', '企业名称')->width(200);
  169. } else {
  170. $grid->column('members.username', '会员名称')->width(200);
  171. }
  172. $grid->service_name('说明')->width(150);
  173. if ($type == 1) {
  174. $grid->column('companys.username', '企业会员')->width(200);
  175. } else {
  176. $grid->column('members.username', '个人会员')->width(200);
  177. }
  178. $grid->oid('订单号')->width(200);
  179. $grid->created_at('申请时间');
  180. $grid->payment_cn('支付方式')->width(150)->display(function ($payment_cn) {
  181. if ($payment_cn=="积分"){
  182. return "积分支付";
  183. } else{
  184. return $payment_cn;
  185. }
  186. });
  187. $grid->filter(function ($filter) use ($type) {
  188. $filter->column(1/2, function ($filter) use ($type) {
  189. $filter->equal('uid', '企业ID');
  190. if ($type == 1) {
  191. $filter->like('companys.username', '会员名称');
  192. $filter->like('companys.companyname', '企业名称');
  193. } else {
  194. $filter->like('members.username', '会员名称');
  195. }
  196. $filter->equal('is_pay', '支付状态')->select([1=>'待付款',2=>'已付款',3=>'已取消']);
  197. $filter->equal('payment', '支付方式')->select(['offline'=>'线下转帐','alipay'=>'支付宝','wechat'=>'微信','points'=>"积分支付"]);
  198. });
  199. $filter->column(1/2, function ($filter) {
  200. $filter->like('oid', '订单号');
  201. $filter->equal('order_type', '订单类型')->select(
  202. [
  203. 1=>'套餐升级',
  204. 2=>'充值积分',
  205. 3=>'简历置顶',
  206. 4=>'醒目标签',
  207. 5=>'简历模板',
  208. 6=>'简历包',
  209. 7=>'短信包',
  210. 8=>'职位置顶',
  211. 9=>'职位紧急',
  212. 10=>'企业模板',
  213. 11=>'职位刷新',
  214. 12=>'简历下载'
  215. ]
  216. );
  217. $filter->between('created_at', '注册时间')->datetime();
  218. });
  219. });
  220. $grid->actions(function ($actions) use ($type) {
  221. if ($type == 1) {
  222. if (Admin::user()->can('order_manager_edit')) {
  223. $actions->disableEdit(false);
  224. }
  225. } else {
  226. if (Admin::user()->can('person_order_edit')) {
  227. $actions->disableEdit(false);
  228. }
  229. }
  230. // if ($type == 1) {
  231. // if (Admin::user()->can('order_manager_delete')) {
  232. // $actions->disableDelete(false);
  233. // }
  234. // } else {
  235. // if (Admin::user()->can('person_order_delete')) {
  236. // $actions->disableDelete(false);
  237. // }
  238. // }
  239. });
  240. return $grid;
  241. }
  242. /**
  243. * Make a form builder.
  244. *
  245. * @return Form
  246. */
  247. protected function form($type)
  248. {
  249. $form = new ValidateForm(new Order);
  250. $form->display('id')->setWidth(2);
  251. if ($type == 1) {
  252. $form->display('companys.username', '企业会员')->setWidth(2);
  253. } else {
  254. $form->display('members.username', '个人会员')->setWidth(2);
  255. }
  256. $form->radio('is_pay', '支付状态')->options([1=>'待付款',2=>'已付款',3=>'已取消']);
  257. $form->display('amount', '订单金额')->setWidth(2);
  258. $form->display('pay_amount', '现金支付金额')->setWidth(2);
  259. $form->display('pay_points', '积分支付')->setWidth(2);
  260. $form->display('payment_cn', "支付方式")->setWidth(2);
  261. $form->display('created_at', '申请时间')->setWidth(2);
  262. $form->display('payment_time', '支付时间')->setWidth(2)->with(function ($payment_time) {
  263. if ($payment_time) {
  264. return date('Y-m-d H:i:s', $payment_time);
  265. }
  266. });
  267. $form->display('oid', '订单号')->setWidth(2);
  268. $form->display('service_name', '订单描述')->setWidth(8);
  269. $form->text('notes', '添加备注')->setWidth(8);
  270. return $form;
  271. }
  272. public function update(PayService $payService, Request $request, $id,OrderService $orderService)
  273. {
  274. $order = Order::where('id', $id)->first();
  275. if ($order->payment != "offline") {
  276. admin_error('只有线下转帐的订单可以修改支付状态!');
  277. return back();
  278. }
  279. if ($order->is_pay != 1) {
  280. admin_error('只有线下转帐且状态为未付款订单可以修改支付状态!');
  281. return back();
  282. }
  283. $data = $this->form($id)->getValidateInput();
  284. $up_data['is_pay'] = $data['is_pay'];
  285. if ($data['is_pay'] == 2) {
  286. $up_data['out_trade_no'] = $order->oid;
  287. $up_data['notes'] = $data['notes'];
  288. $up_data['admin_id'] = Admin::user()->id;
  289. $up_data['operate_time'] = date('Y-m-d H:i:s', time());
  290. if (!$payService->offlineHook($up_data)) {
  291. admin_toastr('订单修改失败', 'error');
  292. }
  293. }else{//加个已取消
  294. Order::where('id', $id)->update(['is_pay'=>3]);
  295. }
  296. admin_toastr('订单修改成功', 'success');
  297. return redirect(route('order.company.index'));
  298. }
  299. }