SenderOrderController.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\SenderApi;
  4. use app\common\model\UserOrder;
  5. use app\common\model\UserOrderLog;
  6. use think\Db;
  7. /**
  8. * 配送端订单接口
  9. */
  10. class SenderOrderController extends SenderApi
  11. {
  12. protected $noNeedLogin = [];
  13. /**
  14. * 订单列表
  15. * @ApiParams (name=page,description=page)
  16. * @ApiParams (name=limit,description=limit)
  17. * @ApiParams (name=type,description="1待接单2进行中3已完成4已结算5已取消")
  18. * @ApiReturnParams (name=id,description=订单ID)
  19. * @ApiReturnParams (name=from_city,description=取得城市)
  20. * @ApiReturnParams (name=to_city,description=去的城市)
  21. * @ApiReturnParams (name=pet_category,description=宠物分类)
  22. * @ApiReturnParams (name=spec,description=规格)
  23. * @ApiReturnParams (name=agree_date,description=取宠日期)
  24. * @ApiReturnParams (name=agree_time,description=取宠时间)
  25. * @ApiReturnParams (name=no,description=订单号)
  26. */
  27. public function list(){
  28. $data=input();
  29. $this->validate($data,[
  30. 'type'=>['require','integer'],
  31. ]);
  32. $user=$this->auth->getUser();
  33. if($data['type']==1) {
  34. $list = UserOrder::wait($user)
  35. ->field($field=[
  36. 'a.from_city', 'a.to_city', 'a.id', 'a.pet_category', 'a.spec', 'a.agree_date', 'a.agree_time', 'a.no','a.status',
  37. ])
  38. ->paginate(input('limit', 10));
  39. $list->each(function (UserOrder $order){
  40. $order->orders=$order->toArray();
  41. });
  42. }elseif ($data['type']==2){
  43. $list = $user->senderOrder()
  44. ->run()
  45. ->with('orders')
  46. ->paginate(input('limit',10));
  47. }elseif ($data['type']==3){
  48. $list = $user->senderOrder()
  49. ->complete()
  50. ->with('orders')
  51. ->paginate(input('limit',10));
  52. }elseif ($data['type']==4){
  53. $list = $user->senderOrder()
  54. ->set()
  55. ->with('orders')
  56. ->paginate(input('limit',10));
  57. }elseif ($data['type']==5){
  58. $list = $user->senderOrder()
  59. ->cancel()
  60. ->with('orders')
  61. ->paginate(input('limit',10));
  62. }
  63. $this->success('',$list);
  64. }
  65. /**
  66. * 接单
  67. * @ApiParams (name=id,description=订单ID)
  68. */
  69. public function get(){
  70. $user=$this->auth->getUser();
  71. $data=input();
  72. $this->validate($data,[
  73. 'id'=>['require'],
  74. ]);
  75. Db::startTrans();
  76. $order=UserOrder::lock(true)->findOrFail($data['id']);
  77. $order->accept($user);
  78. Db::commit();
  79. $this->success();
  80. }
  81. /**
  82. * 订单详情
  83. * @ApiParams (name=id,description=订单ID)
  84. * @ApiReturnParams(name=id,type=string,description=订单id)
  85. * @ApiReturnParams(name=from_addr[name],type=string,description=取件人)
  86. * @ApiReturnParams(name=from_addr[mobile],type=string,description=取件人手机号)
  87. * @ApiReturnParams(name=from_addr[address],type=string,description=取件人地址)
  88. * @ApiReturnParams(name=to_addr[name],type=string,description=送件人)
  89. * @ApiReturnParams(name=to_addr[mobile],type=string,description=送件人手机号)
  90. * @ApiReturnParams(name=to_addr[address],type=string,description=送件人地址)
  91. * @ApiReturnParams(name=pet_category,type=string,description=宠物类别)
  92. * @ApiReturnParams(name=spec,type=string,description=规格)
  93. * @ApiReturnParams(name=real_amount,type=string,description=金额)
  94. * @ApiReturnParams(name=num,type=string,description=宠物数量)
  95. * @ApiReturnParams(name=pick_up,type=string,description=0不接不送1接宠2送宠4接送宠)
  96. * @ApiReturnParams(name=has_cage,type=string,description=有无宠具)
  97. * @ApiReturnParams(name=weight,type=string,description=重量)
  98. * @ApiReturnParams(name=piece,type=string,description=件数)
  99. * @ApiReturnParams(name=remark,type=string,description=备注)
  100. * @ApiReturnParams(name=images,type=string,description=照片)
  101. * @ApiReturnParams(name=discount_amount,type=string,description=优惠总金额)
  102. * @ApiReturnParams(name=coupon_amount,type=string,description=优惠券金额)
  103. * @ApiReturnParams(name=no,type=string,description=订单编号)
  104. * @ApiReturnParams(name=created_at,type=string,description=下单时间)
  105. * @ApiReturnParams(name=pay_type,type=string,description=支付方式1余额2微信)
  106. * @ApiReturnParams(name=protect_amount,type=string,description=安心保金额)
  107. * @ApiReturnParams(name=protect_max,type=string,description=安心保保多少)
  108. * @ApiReturnParams(name=protect_valid,type=string,description=安心保是否生效)
  109. * @ApiReturnParams (name=status,description="0待支付1待接单10取宠中20运输中30送宠中40送宠完成待用户确认50已完成待结算60已结算65拒绝结算70退款中80已取消")
  110. * @ApiReturnParams (name=cancel_at,description="用户取消时间")
  111. * @ApiReturnParams (name=refund_at,description="退款时间")
  112. * @ApiReturnParams (name=agree_date,description="取宠时间日期")
  113. * @ApiReturnParams (name=agree_time,description="取宠具体时间")
  114. * @ApiReturnParams (name=freight,description="fast快车air空运special专车")
  115. * @ApiReturnParams (name=refund_status,description="-1未申请0审核中1审核通过2驳回")
  116. * @ApiReturnParams (name=refund_amount,description="退款金额")
  117. * @ApiReturnParams (name=refund_images,description="退款图片")
  118. * @ApiReturnParams (name=refund_reason,description="退款原因")
  119. * @ApiReturnParams (name=refund_at,description="退款时间")
  120. * @ApiReturnParams (name=fee_1,decription=取件费)
  121. * @ApiReturnParams (name=fee_2,decription=运输费)
  122. * @ApiReturnParams (name=fee_3,decription=派送费)
  123. * @ApiReturnParams (name=fee_4,decription=笼具费)
  124. * @ApiReturnParams (name=fee_5,decription=寄养费)
  125. * @ApiReturnParams (name=fee_6,decription=填写其它费)
  126. * @ApiReturnParams (name=current_sender_order[][type],decription="配送员类型1取2送")
  127. * @ApiReturnParams (name=current_sender_order[][user],decription="用户信息对象")
  128. */
  129. public function detail(){
  130. $data=input();
  131. $this->validate($data,[
  132. 'id'=>['require']
  133. ]);
  134. $order=UserOrder::findOrFail($data['id']);
  135. $order->append(['current_sender_order','current_sender_order.user']);
  136. $this->success('',$order);
  137. }
  138. /**
  139. * 删除订单
  140. * @ApiParams (name=id,description=订单ID)
  141. *
  142. */
  143. public function delete(){
  144. $data=input();
  145. $this->validate($data,[
  146. 'id'=>['require']
  147. ]);
  148. $user=$this->auth->getUser();
  149. $order=$user->senderOrder()->where('user_order_id',$data['id'])->findOrFail();
  150. $order->remove();
  151. $this->success();
  152. }
  153. /**
  154. * 上传视频或备注,更新订单状态
  155. * @ApiParams (name=id,description=订单ID)
  156. * @ApiParams (name=txt,required=false,description=备注)
  157. * @ApiParams (name=media[0],required=false,description=视频数组)
  158. * @ApiParams (name=status,required=true,description="状态,10取宠视频,20运输视频,30送宠视频,0状态更新")
  159. */
  160. public function remark(){
  161. $data=input();
  162. $this->validate($data,[
  163. 'id'=>['require'],
  164. 'media'=>['array','max:3'],
  165. 'status'=>['require','in:'.implode(',',array_keys(UserOrderLog::$status))],
  166. ]);
  167. if(isset($data['media']) && !is_array($data['media'])){
  168. $this->error('视频必须是个数组');
  169. }
  170. $user=$this->auth->getUser();
  171. Db::startTrans();
  172. $order=UserOrder::lock(true)->findOrFail($data['id']);
  173. $order->updateStatus($data['status'],$user);
  174. $order->log()->save([
  175. 'status'=>$order['status'],
  176. 'txt' =>$data['txt']??'',
  177. 'media' =>$data['media']??[],
  178. ]);
  179. Db::commit();
  180. $this->success();
  181. }
  182. /**
  183. * 配送详情
  184. * @ApiParams (name=id,decription=订单ID)
  185. * @ApiReturnParams (name=addr,description="取宠地址")
  186. * @ApiReturnParams (name=created_at,description="时间")
  187. * @ApiReturnParams (name=status,description="0待支付1待接单10取宠中20运输中30送宠中40送宠完成待用户确认50已完成待结算60已结算65拒绝结算70退款中80已取消")
  188. * @ApiReturnParams (name=txt,description="描述")
  189. * @ApiReturnParams (name=media,description="视频")
  190. */
  191. public function send_detail(){
  192. $data=input();
  193. $this->validate($data,[
  194. 'id'=>['require']
  195. ]);
  196. $user=$this->auth->getUser();
  197. $senderOrder=$user->senderOrder()->sender($data['id'])->findOrFail();
  198. $this->success('',$senderOrder->orders->send_detail??[]);
  199. }
  200. /**
  201. * 申请结算
  202. * @ApiParams (name=id,description="配送员订单ID")
  203. * @ApiParams (name=fee_1,description=取件费)
  204. * @ApiParams (name=fee_2,description=运输费)
  205. * @ApiParams (name=fee_3,description=派送费)
  206. * @ApiParams (name=fee_4,description=笼具费)
  207. * @ApiParams (name=fee_5,description=寄养费)
  208. * @ApiParams (name=fee_6,description=填写其它费)
  209. */
  210. public function settle(){
  211. $data=input();
  212. $this->validate($data,[
  213. 'id'=>['require'],
  214. 'fee_1'=>['require','egt:0'],
  215. 'fee_2'=>['require','egt:0'],
  216. 'fee_3'=>['require','egt:0'],
  217. 'fee_4'=>['require','egt:0'],
  218. 'fee_5'=>['require','egt:0'],
  219. 'fee_6'=>['require','egt:0'],
  220. ]);
  221. $user=$this->auth->getUser();
  222. Db::startTrans();
  223. $senderOrder=$user->senderOrder()->findOrFail($data['id']);
  224. $senderOrder->settle($data);
  225. Db::commit();
  226. $this->success();
  227. }
  228. }