123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- <?php
- namespace app\api\controller;
- use app\common\controller\SenderApi;
- use app\common\model\SenderOrder;
- use app\common\model\UserOrder;
- use app\common\model\UserOrderLog;
- use think\Db;
- /**
- * 配送端订单接口
- */
- class SenderOrderController extends SenderApi
- {
- protected $noNeedLogin = [];
- protected $noNeedRight=['nums'];
- /**
- * 订单列表
- * @ApiParams (name=page,description=page)
- * @ApiParams (name=limit,description=limit)
- * @ApiParams (name=type,description="1待接单2进行中3已完成4已结算5已取消")
- * @ApiReturnParams (name=id,description=订单ID)
- * @ApiReturnParams (name=from_city,description=取得城市)
- * @ApiReturnParams (name=to_city,description=去的城市)
- * @ApiReturnParams (name=pet_category,description=宠物分类)
- * @ApiReturnParams (name=spec,description=规格)
- * @ApiReturnParams (name=agree_date,description=取宠日期)
- * @ApiReturnParams (name=agree_time,description=取宠时间)
- * @ApiReturnParams (name=no,description=订单号)
- * @ApiReturnParams(name=distance,type=string,description=距离km)
- * @ApiReturnParams(name=status,type=string,description="0待支付1待接单10取宠中20运输中30送宠中40送宠完成待用户确认50已完成待结算60已结算65拒绝结算70退款中80已取消")
- * @ApiReturnParams(name=current_send_order[id],type=string,description="配送员订单ID")
- */
- public function list(){
- $data=input();
- $this->validate($data,[
- 'type'=>['require','integer'],
- ]);
- $user=$this->auth->getUser();
- if($data['type']==1) {
- $list = UserOrder::wait($user)
- ->field($field=[
- 'user_order.from_city',
- 'user_order.to_city',
- 'user_order.id',
- 'user_order.pet_category',
- 'user_order.spec',
- 'user_order.agree_date',
- 'user_order.agree_time',
- 'user_order.no',
- 'user_order.status',
- 'user_order.distance',
- 'user_order.num',
- 'user_order.piece',
- 'user_order.discount_amount',
- 'user_order.real_amount',
- 'user_order.freight',
- 'user_order.total_amount',
- 'user_order.pay_time',
- ])
- ->paginate(input('limit', 10));
- $list->each(function (UserOrder $order){
- $order['id']="1_{$order['id']}";
- $order->orders=$order->toArray();
- });
- }elseif ($data['type']==2){
- $list = $user->senderOrder()
- ->run()
- ->with('orders')
- ->paginate(input('limit',10))->toArray();
- foreach ($list['data'] as $key=>&$item){
- $sendOrder=$item;
- $order=$item['orders'];
- unset($sendOrder['orders']);
- $order['current_send_order']=$sendOrder;
- $order['id']=$sendOrder['id'];
- $item=$order;
- }
- }elseif ($data['type']==3){
- $list = $user->senderOrder()
- ->complete()
- ->with('orders')
- ->paginate(input('limit',10))->toArray();
- foreach ($list['data'] as $key=>&$item){
- $sendOrder=$item;
- $order=$item['orders'];
- unset($sendOrder['orders']);
- $order['current_send_order']=$sendOrder;
- $order['id']=$sendOrder['id'];
- $item=$order;
- }
- }elseif ($data['type']==4){
- $list = $user->senderOrder()
- ->set()
- ->with('orders')
- ->paginate(input('limit',10))->toArray();
- foreach ($list['data'] as $key=>&$item){
- $sendOrder=$item;
- $order=$item['orders'];
- unset($sendOrder['orders']);
- $order['current_send_order']=$sendOrder;
- $order['id']=$sendOrder['id'];
- $item=$order;
- }
- }elseif ($data['type']==5){
- $list = $user->senderOrder()
- ->cancel()
- ->with('orders')
- ->paginate(input('limit',10))->toArray();
- foreach ($list['data'] as $key=>&$item){
- $sendOrder=$item;
- $order=$item['orders'];
- unset($sendOrder['orders']);
- $order['current_send_order']=$sendOrder;
- $order['id']=$sendOrder['id'];
- $item=$order;
- }
- }
- $this->success('',$list);
- }
- /**
- * 接单
- * @ApiParams (name=id,description=订单ID)
- */
- public function get(){
- $user=$this->auth->getUser();
- if($user->need_verification){
- $this->error('您的资料未完善或等待审核中,请稍后再试');
- }
- $data=input();
- $this->validate($data,[
- 'id'=>['require'],
- ]);
- $data['id']=str_replace('1_','',$data['id']);
- Db::startTrans();
- $order=UserOrder::lock(true)->findOrFail($data['id']);
- $order->accept($user);
- Db::commit();
- $this->success();
- }
- /**
- * 订单详情
- * @ApiParams (name=id,description=订单ID)
- * @ApiReturnParams(name=id,type=string,description=订单id)
- * @ApiReturnParams(name=from_addr[name],type=string,description=取件人)
- * @ApiReturnParams(name=from_addr[mobile],type=string,description=取件人手机号)
- * @ApiReturnParams(name=from_addr[address],type=string,description=取件人地址)
- * @ApiReturnParams(name=to_addr[name],type=string,description=送件人)
- * @ApiReturnParams(name=to_addr[mobile],type=string,description=送件人手机号)
- * @ApiReturnParams(name=to_addr[address],type=string,description=送件人地址)
- * @ApiReturnParams(name=pet_category,type=string,description=宠物类别)
- * @ApiReturnParams(name=spec,type=string,description=规格)
- * @ApiReturnParams(name=real_amount,type=string,description=金额)
- * @ApiReturnParams(name=num,type=string,description=宠物数量)
- * @ApiReturnParams(name=pick_up,type=string,description=0不接不送1接宠2送宠4接送宠)
- * @ApiReturnParams(name=has_cage,type=string,description=有无宠具)
- * @ApiReturnParams(name=weight,type=string,description=重量)
- * @ApiReturnParams(name=piece,type=string,description=件数)
- * @ApiReturnParams(name=remark,type=string,description=备注)
- * @ApiReturnParams(name=images,type=string,description=照片)
- * @ApiReturnParams(name=discount_amount,type=string,description=优惠总金额)
- * @ApiReturnParams(name=coupon_amount,type=string,description=优惠券金额)
- * @ApiReturnParams(name=no,type=string,description=订单编号)
- * @ApiReturnParams(name=created_at,type=string,description=下单时间)
- * @ApiReturnParams(name=pay_type,type=string,description=支付方式1余额2微信)
- * @ApiReturnParams(name=pay_time,type=string,description=支付时间)
- * @ApiReturnParams(name=completed_at,type=string,description=完成时间)
- * @ApiReturnParams(name=protect_amount,type=string,description=安心保金额)
- * @ApiReturnParams(name=protect_max,type=string,description=安心保保多少)
- * @ApiReturnParams(name=protect_valid,type=string,description=安心保是否生效)
- * @ApiReturnParams (name=status,description="0待支付1待接单10取宠中20运输中30送宠中40送宠完成待用户确认50已完成待结算60已结算65拒绝结算70退款中80已取消")
- * @ApiReturnParams (name=cancel_at,description="用户取消时间")
- * @ApiReturnParams (name=refund_at,description="退款时间")
- * @ApiReturnParams (name=agree_date,description="取宠时间日期")
- * @ApiReturnParams (name=agree_time,description="取宠具体时间")
- * @ApiReturnParams (name=freight,description="fast快车air空运special专车")
- * @ApiReturnParams (name=refund_status,description="-1未申请0审核中1审核通过2驳回")
- * @ApiReturnParams (name=refund_amount,description="退款金额")
- * @ApiReturnParams (name=refund_images,description="退款图片")
- * @ApiReturnParams (name=refund_reason,description="退款原因")
- * @ApiReturnParams (name=refund_at,description="退款时间")
- * @ApiReturnParams (name=user_remark[],description="用户及后台备注")
- * @ApiReturnParams (name=current_send_order[id],description=配送员订单ID)
- * @ApiReturnParams (name=current_send_order[fee_1],description=取件费)
- * @ApiReturnParams (name=current_send_order[fee_2],description=运输费)
- * @ApiReturnParams (name=current_send_order[fee_3],description=派送费)
- * @ApiReturnParams (name=current_send_order[fee_4],description=笼具费)
- * @ApiReturnParams (name=current_send_order[fee_5],description=寄养费)
- * @ApiReturnParams (name=current_send_order[fee_6],description=填写其它费)
- * @ApiReturnParams (name=current_send_order[type],description="配送员类型1取2送")
- * @ApiReturnParams (name=current_send_order[user],description="用户信息对象")
- */
- public function detail(){
- $data=input();
- $this->validate($data,[
- 'id'=>['require']
- ]);
- $user=$this->auth->getUser();
- if(strpos($data['id'],'_')!==false){
- $order=UserOrder::findOrFail($id=str_replace('1_','',$data['id']));
- $order['current_send_order']=null;
- $order['id']="1_{$order['id']}";
- }else {
- $senderOrder = $user->senderOrder()->findOrFail($data['id']);
- $order = $senderOrder->orders;
- $order['user_remark']=$order->log()->where('status',0)->select();
- unset($senderOrder->orders);
- $order['current_send_order'] = $senderOrder;
- $order['id']=$senderOrder['id'];
- }
- $this->success('',$order);
- }
- /**
- * 删除订单
- * @ApiParams (name=id,description=订单ID)
- */
- public function delete(){
- $data=input();
- $this->validate($data,[
- 'id'=>['require']
- ]);
- $user=$this->auth->getUser();
- Db::startTrans();
- $order=$user->senderOrder()->lock(true)->now()->findOrFail($data['id']);
- $order->remove();
- Db::commit();
- $this->success();
- }
- /**
- * 上传视频或备注,更新订单状态
- * @ApiParams (name=id,description=订单ID)
- * @ApiParams (name=txt,required=false,description=备注)
- * @ApiParams (name=media[0],required=false,description=视频数组)
- * @ApiParams (name=status,required=true,description="状态,10取宠视频,20运输视频,30送宠视频,0状态更新")
- */
- public function remark(){
- $data=input();
- $this->validate($data,[
- 'id'=>['require'],
- 'media|图片或视频'=>['array','max:3'],
- 'status|状态'=>['require','in:'.implode(',',array_keys(UserOrderLog::$status))],
- ]);
- if(isset($data['media']) && !is_array($data['media'])){
- $this->error('视频必须是个数组');
- }
- $user=$this->auth->getUser();
- Db::startTrans();
- $senderOrder=$user->senderOrder()->lock(true)->findOrFail($data['id']);
- $order=$senderOrder->orders;
- $order->updateStatus($data['status'],$user);
- $order->log()->save([
- 'status'=>$data['status']?$order['status']:$data['status'],
- 'txt' =>$data['txt']??'',
- 'media' =>$data['media']??[],
- ]);
- Db::commit();
- $this->success();
- }
- /**
- * 配送详情
- * @ApiParams (name=id,decription=订单ID)
- * @ApiReturnParams (name=addr,description="取宠地址")
- * @ApiReturnParams (name=created_at,description="时间")
- * @ApiReturnParams (name=status,description="0待支付1待接单10取宠中20运输中30送宠中40送宠完成待用户确认50已完成待结算60已结算65拒绝结算70退款中80已取消")
- * @ApiReturnParams (name=txt,description="描述")
- * @ApiReturnParams (name=media,description="视频")
- */
- public function send_detail(){
- $data=input();
- $this->validate($data,[
- 'id'=>['require']
- ]);
- $user=$this->auth->getUser();
- $senderOrder=SenderOrder::findOrFail($data['id']);
- $this->success('',$senderOrder->orders->send_detail??[]);
- }
- /**
- * 申请结算
- * @ApiParams (name=id,description="配送员订单ID")
- * @ApiParams (name=fee_1,description=取件费)
- * @ApiParams (name=fee_2,description=运输费)
- * @ApiParams (name=fee_3,description=派送费)
- * @ApiParams (name=fee_4,description=笼具费)
- * @ApiParams (name=fee_5,description=寄养费)
- * @ApiParams (name=fee_6,description=填写其它费)
- */
- public function settle(){
- $data=input();
- $this->validate($data,[
- 'id'=>['require'],
- 'fee_1|取件费'=>['require','egt:0','number'],
- 'fee_2|运输费'=>['require','egt:0','number'],
- 'fee_3|派送费'=>['require','egt:0','number'],
- 'fee_4|笼具费'=>['require','egt:0','number'],
- 'fee_5|寄养费'=>['require','egt:0','number'],
- 'fee_6|填写其它费'=>['require','egt:0','number'],
- ]);
- $user=$this->auth->getUser();
- Db::startTrans();
- $senderOrder=$user->senderOrder()->now()->findOrFail($data['id']);
- $senderOrder->applySettle($data);
- Db::commit();
- $this->success();
- }
- /**
- * 顶部订单数量
- */
- public function nums(){
- $user=$this->auth->getUser();
- if($user->is_super)
- {
- $nums = [
- 1 => UserOrder::waitGet()->count(),
- 2 => UserOrder::running()->count(),
- 3 => UserOrder::completed()->count(),
- 4 => UserOrder::caled()->count(),
- 5 => UserOrder::canceled()->count(),
- ];
- }else
- {
- $nums = [
- 1 => UserOrder::wait($user)->count(),
- 2 => $user->senderOrder()->run()->count(),
- 3 => $user->senderOrder()->complete()->count(),
- 4 => $user->senderOrder()->set()->count(),
- 5 => $user->senderOrder()->cancel()->count(),
- ];
- }
- $this->success('',$nums);
- }
- }
|