Order.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. namespace app\api\controller\company;
  3. use app\common\controller\Apic;
  4. use think\Db;
  5. use alipaysdkphpallmaster\aop\AopClient;
  6. use alipaysdkphpallmaster\aop\request\AlipayTradePayRequest;
  7. /**
  8. * 订单管理
  9. */
  10. class Order extends Apic
  11. {
  12. protected $noNeedLogin = [];
  13. protected $noNeedRight = '*';
  14. //
  15. public function lists(){
  16. $keyword = input('keyword','');
  17. $status = input('status','all');
  18. $where = [
  19. 'company_id' => $this->auth->id,
  20. ];
  21. if($status !== 'all'){
  22. $where['status'] = $status;
  23. }
  24. if($status == 20){ //待还车
  25. $where['status'] = 20;
  26. $where['endtime'] = ['gt',time()];
  27. }
  28. if($status == 200){ //逾期
  29. $where['status'] = 20;
  30. $where['endtime'] = ['elt',time()];
  31. }
  32. if($status == 30){
  33. $where['status'] = ['IN',[-1,-2,30]];
  34. }
  35. if(!empty($keyword))
  36. {
  37. $where['user_truename|user_mobile|orderno'] = ['LIKE','%'.$keyword.'%'];
  38. }
  39. $list = Db::name('order')->where($where)->order('id desc')->autopage()->select();
  40. $list = list_domain_image($list,['car_image','idcard_images','driver_images','get_yibiao_images','get_carvideo','back_yibiao_images','back_carvideo']);
  41. foreach($list as $key => &$val){
  42. $val['status_text'] = $this->status_text($val['status'],$val['endtime']);
  43. if($val['status'] == 20 && time() >= $val['endtime']){
  44. $val['status'] = 200; //強制改掉
  45. }
  46. //追加取消
  47. $val['cancel_info'] = (object)[];
  48. if($val['status'] == -1 || $val['status'] == -2){
  49. //取消订单追加取消原因
  50. $val['cancel_info'] = Db::name('order_cancel')->where('order_id',$val['id'])->find();
  51. }
  52. //追加评价
  53. $val['comment_info'] = (object)[];
  54. if($val['status'] == 30){
  55. //完成订单追加评价
  56. $comment_info = Db::name('order_comment')->where('order_id',$val['id'])->find();
  57. if($comment_info){
  58. $val['comment_info'] = $comment_info;
  59. }
  60. }
  61. }
  62. $this->success(1,$list);
  63. }
  64. //详情
  65. public function info(){
  66. $id = input('id',0);
  67. $info = Db::name('order')->where('id',$id)->find();
  68. $info = info_domain_image($info,['car_image','idcard_images','driver_images','get_yibiao_images','get_carvideo','back_yibiao_images','back_carvideo']);
  69. $info['status_text'] = $this->status_text($info['status'],$info['endtime']);
  70. if($info['status'] == 20 && time() >= $info['endtime']){
  71. $info['status'] = 200; //強制改掉
  72. }
  73. //完成订单追加评价
  74. $comment_info = Db::name('order_comment')->alias('c')
  75. ->field('c.*,user.avatar,user.mobile')
  76. ->join('user','c.user_id = user.id','LEFT')
  77. ->where('c.order_id',$id)->find();
  78. $comment_info = info_domain_image($comment_info,['avatar']);
  79. if(!empty($comment_info)){
  80. $comment_info['mobile'] = str_replace(substr($comment_info['mobile'],3,5),'****',$comment_info['mobile']);
  81. }
  82. $info['comment_info'] = $comment_info;
  83. //取消订单追加取消原因
  84. $info['cancel_info'] = Db::name('order_cancel')->where('order_id',$id)->find();
  85. $this->success(1,$info);
  86. }
  87. //取消理由
  88. public function cancel_config(){
  89. $list = Db::name('company_cancel_config')->order('id asc')->select();
  90. $this->success(1,$list);
  91. }
  92. //取消
  93. public function cancel(){
  94. $id = input('id',0);
  95. $reason = input('reason','');
  96. Db::startTrans();
  97. $info = Db::name('order')->where('id',$id)->where('company_id',$this->auth->id)->lock(true)->find();
  98. if($info['status'] == -2){
  99. Db::rollback();
  100. $this->error('当前订单已经申请取消,已付款订单审核后可退款');
  101. }
  102. if($info['status'] != 0 && $info['status'] != 10){
  103. Db::rollback();
  104. $this->error('当前订单状态不能取消');
  105. }
  106. //未付款取消
  107. if($info['status'] == 0){
  108. $rs = Db::name('order')->where('id',$id)->update(['status'=>-1]);
  109. }
  110. //已付款取消
  111. if($info['status'] == 10){
  112. $rs = Db::name('order')->where('id',$id)->update(['status'=>-2]);
  113. //扣除车行收益
  114. //从计划任务里走
  115. }
  116. if($rs === false){
  117. Db::rollback();
  118. $this->error('申请取消失败');
  119. }
  120. $data = [
  121. 'user_id' => $info['user_id'],
  122. 'company_id' => $info['company_id'],
  123. 'order_id' => $info['id'],
  124. 'reason' => '商家取消:'.$reason,
  125. 'refund_price' => 0,
  126. 'type' => $info['status'], //分类:0=未付款,10=已付款
  127. 'createtime' => time(),
  128. 'status' => $info['status'] == 0 ? 2 : 0, //状态:0=未处理,1=已处理,2=无需处理
  129. 'from' => 2, //取消方:1=用户取消,2=商户取消
  130. ];
  131. $rs_cancle = Db::name('order_cancel')->insertGetId($data);
  132. if(!$rs_cancle){
  133. Db::rollback();
  134. $this->error('申请取消失败');
  135. }
  136. //解除汽车占用
  137. $rs_car = Db::name('car')->where('id',$info['car_id'])->update(['status'=>1]);
  138. if(!$rs_car){
  139. Db::rollback();
  140. $this->error('申请取消失败');
  141. }
  142. Db::commit();
  143. $this->success('取消成功');
  144. }
  145. }