SenderOrderController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\SenderApi;
  4. use app\common\model\SenderOrder;
  5. use app\common\model\UserOrder;
  6. use app\common\model\UserOrderLog;
  7. use think\Db;
  8. /**
  9. * 配送端订单接口
  10. */
  11. class SenderOrderController extends SenderApi
  12. {
  13. protected $noNeedLogin = [];
  14. protected $noNeedRight=['nums'];
  15. /**
  16. * 订单列表
  17. * @ApiParams (name=page,description=page)
  18. * @ApiParams (name=limit,description=limit)
  19. * @ApiParams (name=type,description="1待接单2进行中3已完成4已结算5已取消")
  20. * @ApiReturnParams (name=id,description=订单ID)
  21. * @ApiReturnParams (name=from_city,description=取得城市)
  22. * @ApiReturnParams (name=to_city,description=去的城市)
  23. * @ApiReturnParams (name=pet_category,description=宠物分类)
  24. * @ApiReturnParams (name=spec,description=规格)
  25. * @ApiReturnParams (name=agree_date,description=取宠日期)
  26. * @ApiReturnParams (name=agree_time,description=取宠时间)
  27. * @ApiReturnParams (name=no,description=订单号)
  28. * @ApiReturnParams(name=distance,type=string,description=距离km)
  29. * @ApiReturnParams(name=status,type=string,description="0待支付1待接单10取宠中20运输中30送宠中40送宠完成待用户确认50已完成待结算60已结算65拒绝结算70退款中80已取消")
  30. * @ApiReturnParams(name=current_send_order[id],type=string,description="配送员订单ID")
  31. */
  32. public function list(){
  33. $data=input();
  34. $this->validate($data,[
  35. 'type'=>['require','integer'],
  36. ]);
  37. $user=$this->auth->getUser();
  38. if($data['type']==1) {
  39. $list = UserOrder::wait($user)
  40. ->field($field=[
  41. 'user_order.from_city',
  42. 'user_order.to_city',
  43. 'user_order.id',
  44. 'user_order.pet_category',
  45. 'user_order.spec',
  46. 'user_order.agree_date',
  47. 'user_order.agree_time',
  48. 'user_order.no',
  49. 'user_order.status',
  50. 'user_order.distance',
  51. 'user_order.num',
  52. 'user_order.piece',
  53. 'user_order.discount_amount',
  54. 'user_order.real_amount',
  55. 'user_order.freight',
  56. 'user_order.total_amount',
  57. 'user_order.pay_time',
  58. ])
  59. ->paginate(input('limit', 10));
  60. $list->each(function (UserOrder $order){
  61. $order['id']="1_{$order['id']}";
  62. $order->orders=$order->toArray();
  63. });
  64. }elseif ($data['type']==2){
  65. $list = $user->senderOrder()
  66. ->run()
  67. ->with('orders')
  68. ->paginate(input('limit',10))->toArray();
  69. foreach ($list['data'] as $key=>&$item){
  70. $sendOrder=$item;
  71. $order=$item['orders'];
  72. unset($sendOrder['orders']);
  73. $order['current_send_order']=$sendOrder;
  74. $order['id']=$sendOrder['id'];
  75. $item=$order;
  76. }
  77. }elseif ($data['type']==3){
  78. $list = $user->senderOrder()
  79. ->complete()
  80. ->with('orders')
  81. ->paginate(input('limit',10))->toArray();
  82. foreach ($list['data'] as $key=>&$item){
  83. $sendOrder=$item;
  84. $order=$item['orders'];
  85. unset($sendOrder['orders']);
  86. $order['current_send_order']=$sendOrder;
  87. $order['id']=$sendOrder['id'];
  88. $item=$order;
  89. }
  90. }elseif ($data['type']==4){
  91. $list = $user->senderOrder()
  92. ->set()
  93. ->with('orders')
  94. ->paginate(input('limit',10))->toArray();
  95. foreach ($list['data'] as $key=>&$item){
  96. $sendOrder=$item;
  97. $order=$item['orders'];
  98. unset($sendOrder['orders']);
  99. $order['current_send_order']=$sendOrder;
  100. $order['id']=$sendOrder['id'];
  101. $item=$order;
  102. }
  103. }elseif ($data['type']==5){
  104. $list = $user->senderOrder()
  105. ->cancel()
  106. ->with('orders')
  107. ->paginate(input('limit',10))->toArray();
  108. foreach ($list['data'] as $key=>&$item){
  109. $sendOrder=$item;
  110. $order=$item['orders'];
  111. unset($sendOrder['orders']);
  112. $order['current_send_order']=$sendOrder;
  113. $order['id']=$sendOrder['id'];
  114. $item=$order;
  115. }
  116. }
  117. $this->success('',$list);
  118. }
  119. /**
  120. * 接单
  121. * @ApiParams (name=id,description=订单ID)
  122. */
  123. public function get(){
  124. $user=$this->auth->getUser();
  125. if($user->need_verification){
  126. $this->error('您的资料未完善或等待审核中,请稍后再试');
  127. }
  128. $data=input();
  129. $this->validate($data,[
  130. 'id'=>['require'],
  131. ]);
  132. $data['id']=str_replace('1_','',$data['id']);
  133. Db::startTrans();
  134. $order=UserOrder::lock(true)->findOrFail($data['id']);
  135. $order->accept($user);
  136. Db::commit();
  137. $this->success();
  138. }
  139. /**
  140. * 订单详情
  141. * @ApiParams (name=id,description=订单ID)
  142. * @ApiReturnParams(name=id,type=string,description=订单id)
  143. * @ApiReturnParams(name=from_addr[name],type=string,description=取件人)
  144. * @ApiReturnParams(name=from_addr[mobile],type=string,description=取件人手机号)
  145. * @ApiReturnParams(name=from_addr[address],type=string,description=取件人地址)
  146. * @ApiReturnParams(name=to_addr[name],type=string,description=送件人)
  147. * @ApiReturnParams(name=to_addr[mobile],type=string,description=送件人手机号)
  148. * @ApiReturnParams(name=to_addr[address],type=string,description=送件人地址)
  149. * @ApiReturnParams(name=pet_category,type=string,description=宠物类别)
  150. * @ApiReturnParams(name=spec,type=string,description=规格)
  151. * @ApiReturnParams(name=real_amount,type=string,description=金额)
  152. * @ApiReturnParams(name=num,type=string,description=宠物数量)
  153. * @ApiReturnParams(name=pick_up,type=string,description=0不接不送1接宠2送宠4接送宠)
  154. * @ApiReturnParams(name=has_cage,type=string,description=有无宠具)
  155. * @ApiReturnParams(name=weight,type=string,description=重量)
  156. * @ApiReturnParams(name=piece,type=string,description=件数)
  157. * @ApiReturnParams(name=remark,type=string,description=备注)
  158. * @ApiReturnParams(name=images,type=string,description=照片)
  159. * @ApiReturnParams(name=discount_amount,type=string,description=优惠总金额)
  160. * @ApiReturnParams(name=coupon_amount,type=string,description=优惠券金额)
  161. * @ApiReturnParams(name=no,type=string,description=订单编号)
  162. * @ApiReturnParams(name=created_at,type=string,description=下单时间)
  163. * @ApiReturnParams(name=pay_type,type=string,description=支付方式1余额2微信)
  164. * @ApiReturnParams(name=pay_time,type=string,description=支付时间)
  165. * @ApiReturnParams(name=completed_at,type=string,description=完成时间)
  166. * @ApiReturnParams(name=protect_amount,type=string,description=安心保金额)
  167. * @ApiReturnParams(name=protect_max,type=string,description=安心保保多少)
  168. * @ApiReturnParams(name=protect_valid,type=string,description=安心保是否生效)
  169. * @ApiReturnParams (name=status,description="0待支付1待接单10取宠中20运输中30送宠中40送宠完成待用户确认50已完成待结算60已结算65拒绝结算70退款中80已取消")
  170. * @ApiReturnParams (name=cancel_at,description="用户取消时间")
  171. * @ApiReturnParams (name=refund_at,description="退款时间")
  172. * @ApiReturnParams (name=agree_date,description="取宠时间日期")
  173. * @ApiReturnParams (name=agree_time,description="取宠具体时间")
  174. * @ApiReturnParams (name=freight,description="fast快车air空运special专车")
  175. * @ApiReturnParams (name=refund_status,description="-1未申请0审核中1审核通过2驳回")
  176. * @ApiReturnParams (name=refund_amount,description="退款金额")
  177. * @ApiReturnParams (name=refund_images,description="退款图片")
  178. * @ApiReturnParams (name=refund_reason,description="退款原因")
  179. * @ApiReturnParams (name=refund_at,description="退款时间")
  180. * @ApiReturnParams (name=user_remark[],description="用户及后台备注")
  181. * @ApiReturnParams (name=current_send_order[id],description=配送员订单ID)
  182. * @ApiReturnParams (name=current_send_order[fee_1],description=取件费)
  183. * @ApiReturnParams (name=current_send_order[fee_2],description=运输费)
  184. * @ApiReturnParams (name=current_send_order[fee_3],description=派送费)
  185. * @ApiReturnParams (name=current_send_order[fee_4],description=笼具费)
  186. * @ApiReturnParams (name=current_send_order[fee_5],description=寄养费)
  187. * @ApiReturnParams (name=current_send_order[fee_6],description=填写其它费)
  188. * @ApiReturnParams (name=current_send_order[type],description="配送员类型1取2送")
  189. * @ApiReturnParams (name=current_send_order[user],description="用户信息对象")
  190. */
  191. public function detail(){
  192. $data=input();
  193. $this->validate($data,[
  194. 'id'=>['require']
  195. ]);
  196. $user=$this->auth->getUser();
  197. if(strpos($data['id'],'_')!==false){
  198. $order=UserOrder::findOrFail($id=str_replace('1_','',$data['id']));
  199. $order['current_send_order']=null;
  200. $order['id']="1_{$order['id']}";
  201. }else {
  202. $senderOrder = $user->senderOrder()->findOrFail($data['id']);
  203. $order = $senderOrder->orders;
  204. $order['user_remark']=$order->log()->where('status',0)->select();
  205. unset($senderOrder->orders);
  206. $order['current_send_order'] = $senderOrder;
  207. $order['id']=$senderOrder['id'];
  208. }
  209. $this->success('',$order);
  210. }
  211. /**
  212. * 删除订单
  213. * @ApiParams (name=id,description=订单ID)
  214. */
  215. public function delete(){
  216. $data=input();
  217. $this->validate($data,[
  218. 'id'=>['require']
  219. ]);
  220. $user=$this->auth->getUser();
  221. Db::startTrans();
  222. $order=$user->senderOrder()->lock(true)->now()->findOrFail($data['id']);
  223. $order->remove();
  224. Db::commit();
  225. $this->success();
  226. }
  227. /**
  228. * 上传视频或备注,更新订单状态
  229. * @ApiParams (name=id,description=订单ID)
  230. * @ApiParams (name=txt,required=false,description=备注)
  231. * @ApiParams (name=media[0],required=false,description=视频数组)
  232. * @ApiParams (name=status,required=true,description="状态,10取宠视频,20运输视频,30送宠视频,0状态更新")
  233. */
  234. public function remark(){
  235. $data=input();
  236. $this->validate($data,[
  237. 'id'=>['require'],
  238. 'media|图片或视频'=>['array','max:3'],
  239. 'status|状态'=>['require','in:'.implode(',',array_keys(UserOrderLog::$status))],
  240. ]);
  241. if(isset($data['media']) && !is_array($data['media'])){
  242. $this->error('视频必须是个数组');
  243. }
  244. $user=$this->auth->getUser();
  245. Db::startTrans();
  246. $senderOrder=$user->senderOrder()->lock(true)->findOrFail($data['id']);
  247. $order=$senderOrder->orders;
  248. $order->updateStatus($data['status'],$user);
  249. $order->log()->save([
  250. 'status'=>$data['status']?$order['status']:$data['status'],
  251. 'txt' =>$data['txt']??'',
  252. 'media' =>$data['media']??[],
  253. ]);
  254. Db::commit();
  255. $this->success();
  256. }
  257. /**
  258. * 配送详情
  259. * @ApiParams (name=id,decription=订单ID)
  260. * @ApiReturnParams (name=addr,description="取宠地址")
  261. * @ApiReturnParams (name=created_at,description="时间")
  262. * @ApiReturnParams (name=status,description="0待支付1待接单10取宠中20运输中30送宠中40送宠完成待用户确认50已完成待结算60已结算65拒绝结算70退款中80已取消")
  263. * @ApiReturnParams (name=txt,description="描述")
  264. * @ApiReturnParams (name=media,description="视频")
  265. */
  266. public function send_detail(){
  267. $data=input();
  268. $this->validate($data,[
  269. 'id'=>['require']
  270. ]);
  271. $user=$this->auth->getUser();
  272. $senderOrder=SenderOrder::findOrFail($data['id']);
  273. $this->success('',$senderOrder->orders->send_detail??[]);
  274. }
  275. /**
  276. * 申请结算
  277. * @ApiParams (name=id,description="配送员订单ID")
  278. * @ApiParams (name=fee_1,description=取件费)
  279. * @ApiParams (name=fee_2,description=运输费)
  280. * @ApiParams (name=fee_3,description=派送费)
  281. * @ApiParams (name=fee_4,description=笼具费)
  282. * @ApiParams (name=fee_5,description=寄养费)
  283. * @ApiParams (name=fee_6,description=填写其它费)
  284. */
  285. public function settle(){
  286. $data=input();
  287. $this->validate($data,[
  288. 'id'=>['require'],
  289. 'fee_1|取件费'=>['require','egt:0','number'],
  290. 'fee_2|运输费'=>['require','egt:0','number'],
  291. 'fee_3|派送费'=>['require','egt:0','number'],
  292. 'fee_4|笼具费'=>['require','egt:0','number'],
  293. 'fee_5|寄养费'=>['require','egt:0','number'],
  294. 'fee_6|填写其它费'=>['require','egt:0','number'],
  295. ]);
  296. $user=$this->auth->getUser();
  297. Db::startTrans();
  298. $senderOrder=$user->senderOrder()->now()->findOrFail($data['id']);
  299. $senderOrder->applySettle($data);
  300. Db::commit();
  301. $this->success();
  302. }
  303. /**
  304. * 顶部订单数量
  305. */
  306. public function nums(){
  307. $user=$this->auth->getUser();
  308. if($user->is_super)
  309. {
  310. $nums = [
  311. 1 => UserOrder::waitGet()->count(),
  312. 2 => UserOrder::running()->count(),
  313. 3 => UserOrder::completed()->count(),
  314. 4 => UserOrder::caled()->count(),
  315. 5 => UserOrder::canceled()->count(),
  316. ];
  317. }else
  318. {
  319. $nums = [
  320. 1 => UserOrder::wait($user)->count(),
  321. 2 => $user->senderOrder()->run()->count(),
  322. 3 => $user->senderOrder()->complete()->count(),
  323. 4 => $user->senderOrder()->set()->count(),
  324. 5 => $user->senderOrder()->cancel()->count(),
  325. ];
  326. }
  327. $this->success('',$nums);
  328. }
  329. }