request->get(['courier_id','status','page_size','page_num','keywords']); //验证参数 if(empty($params['courier_id'])) return $this->fail('参数错误'); if(empty($params['keywords'])) $params['keywords'] = ''; //返回数据 return $this->data(LogisticsLogic::list($params)); } /* * 获取物流信息详情 * @method get * @param int $logistics_id 物流id * @return \think\response\Json */ public function logisticsDetail(): \think\response\Json { //获取参数 $logistics_id = $this->request->get('logistics_id'); //验证参数 if(empty($logistics_id)) return $this->fail('参数错误'); //返回数据 return $this->data(LogisticsLogic::detail($logistics_id)); } /* * 生成物流信息 * @method post * @param int $order_id 订单id * @param string $order_sn 订单编号 * @return \think\response\Json */ public function logisticsCreate(): \think\response\Json { //获取参数 $params = $this->request->post(['order_id','order_sn']); //验证参数 if(empty($params['order_id']) || empty($params['order_sn'])) return $this->fail('参数错误'); //生成数据 $result = LogisticsLogic::create($params); //返回数据 return $result['code'] ==1 ? $this->success('生成成功') : $this->fail($result['msg']); } /* * 配送员提取商品 * @method post * @param int $logistics_id 物流id * @return \think\response\Json */ public function courierTakeGoods(): \think\response\Json { //获取参数 $params = $this->request->post(['logistics_id','user_id']); //验证参数 if(empty($params['logistics_id']) || empty($params['user_id'])) return $this->fail('参数错误'); //提取商品 $result = LogisticsLogic::takeGoods($params); //返回数据 return $result['code'] ==1 ? $this->success('提取成功') : $this->fail($result['msg']); } /* * 配送员完成配送 * @method post * @param int $logistics_id 物流id * @return \think\response\Json */ public function courierCompleteDelivery(): \think\response\Json { //获取参数 $params = $this->request->post(['logistics_id','user_id']); //验证参数 if(empty($params['logistics_id']) || empty($params['user_id'])) return $this->fail('参数错误'); //完成配送 $result = LogisticsLogic::doneDelivery($params); //返回数据 return $result['code'] ==1 ? $this->success('配送完成') : $this->fail($result['msg']); } /* * 用户确认收货 * @method post * @param int $logistics_id 物流id * @return \think\response\Json */ public function userConfirmReceipt(): \think\response\Json { //获取参数 $logistics_id = input('logistics_id', 0, 'intval'); $user_id = input('user_id', 0, 'intval'); //获取物流信息 $logistics = Db::name('logistics')->where('id', $logistics_id)->where('user_id',$user_id)->find(); if (!$logistics) return $this->fail('物流信息不存在'); if ($logistics['status'] == 4) return $this->fail('不可更改物流状态'); //设置记录信息 $record = [ 'lst_id' => $logistics['id'], 'type' => 1, 'user_name' => $logistics['user_name'], 'user_phone' => $logistics['user_phone'], 'content' => '已确认收货', 'create_time' => time(), ]; //更改物流信息状态 $res = $this->logisticsUpdate($logistics_id, 3,$record); if($res){ return $this->success('操作成功'); }else{ return $this->fail('操作失败'); } } /* * 用户取消订单 * @method post * @param int $logistics_id 物流id * @return \think\response\Json */ public function userCancelOrder(): \think\response\Json { //获取参数 $logistics_id = input('logistics_id', 0, 'intval'); $user_id = input('user_id', 0, 'intval'); //获取物流信息 $logistics = Db::name('logistics')->where('id', $logistics_id)->where('user_id',$user_id)->find(); if (!$logistics) return $this->fail('物流信息不存在'); if ($logistics['status'] == 2 || $logistics['status'] == 3 || $logistics['status'] == 4) return $this->fail('订单已完成不能取消订单'); //设置记录信息 $record = [ 'lst_id' => $logistics['id'], 'type' => 1, 'user_name' => $logistics['user_name'], 'user_phone' => $logistics['user_phone'], 'content' => '已取消订单', 'create_time' => time(), ]; //更改物流信息状态 $res = $this->logisticsUpdate($logistics_id, 4,$record); if($res){ return $this->success('操作成功', [], 1, 200); }else{ return $this->fail('操作失败', [], 0, 200); } } /* * 更新物流信息 * @method post * @param int $logistics_id 物流id * @return bool */ private function logisticsUpdate($id,$status,$data):bool { if(empty($id) || empty($status) || empty($data)) return false; Db::startTrans(); try { $update = [ 'status' => $status, 'update_time' => time(), ]; switch($status){ case 1: $update['qh_time'] = time(); break; case 2: $update['pc_time'] = time(); break; case 3: $update['sh_time'] = time(); break; case 4: $update['qx_time'] = time(); break; default: break; } Db::name('logistics')->where('id', $id)->update($update); Db::name('logistics_record')->insert($data); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); return false; } } }