getQueryFilter($param); // 执行查询 $list = $this->with(['userRiceCard.riceCardGoods','userRiceDeliveryExpress']) ->alias('delivery') ->field('delivery.*') ->where($filter) ->order(['delivery_status'=>'asc','create_time'=>'desc']) ->paginate($listRows); return $list; } /** * 检索查询条件 * @param array $param * @return \think\db\BaseQuery */ private function getQueryFilter(array $param) { // 商品列表获取条件 $params = $this->setQueryDefaultValue($param, [ 'is_delete' => 0, ]); // 筛选条件 $filter = []; // 兑换起止时间 if (!empty($params['betweenTime'])) { $times = between_time($params['betweenTime']); $filter[] = ['create_time', 'between', [$times['start_time'], $times['end_time']]]; } // 发货起止时间 if (!empty($params['betweenDeliveryTime'])) { $times = between_time($params['betweenDeliveryTime']); $filter[] = ['delivery_time', 'between', [$times['start_time'], $times['end_time']]]; } // 收件人 !empty($params['name']) && $filter[] = ['name', 'like', "%{$params['name']}%"]; // 收件人手机号码 !empty($params['phone']) && $filter[] = ['phone', 'like', "%{$params['phone']}%"]; //米卡名称 if(isset($params['cardId'])&&$params['cardId']>-1){ $filter[] = ['card_id','=',$params['cardId']]; } //配送状态 if(isset($params['statusText'])&&$params['statusText']>0){ switch ($params['statusText']){ case 1://待配送 $filter[] = ['delivery_status','=',DeliveryStatusEnum::NOT_DELIVERED]; break; case 2://配送中 $filter[] = ['delivery_status','=',DeliveryStatusEnum::DELIVERED]; $filter[] = ['receipt_status','=',ReceiptStatusEnum::NOT_RECEIVED]; break; case 3://配送完成 $filter[] = ['receipt_status','=',ReceiptStatusEnum::RECEIVED]; break; } } // 实例化新查询对象 return $filter; } /** * 确认发货/拆分发货 * @param $data * @return array|bool|false * @throws \Exception */ public function delivery($param) { $param = $this->setQueryDefaultValue($param, [ 'is_update' => 0, //1更改物流 0去发货 不传默认0 ]); // 验证订单是否满足发货条件 if (!$this->verifyDelivery($param)) { return false; } // 请求快递100订阅接口 foreach ($param['express_list'] as $item) { $express = ExpressModel::detail($item['express_id']); // 请求快递100订阅接口 $subscribe = KuaidiService::subscribe($item['express_no'],4,$express['kuaidi100_code']??''); if(!$subscribe->result){ if(stripos($subscribe->message,"重复订阅") === false){ //重复订阅允许提交物流 $this->error = '物流单号订阅异常:'.$subscribe->message; return false; } } } //添加测试的时间 if(env('SERVE_ENV')=='test'){ } //事物处理 $this->transaction(function () use ($param) { // 更新订单发货状态 $this->save([ 'is_split_package' => count($param['express_list'])>1?1:0, 'delivery_status' => DeliveryStatusEnum::DELIVERED, 'delivery_time' => time() ]); // 新增订单商品拆分包裹记录 UserRiceDeliveryExpressModel::add($this,$param); }); return true; } /** * 验证订单是否满足发货条件 * @param $orderGoods * @param $param * @return bool */ private function verifyDelivery($data) { if(!$this){ $this->error = "不存在!"; return false; } if($this['delivery_status']!=DeliveryStatus::NOT_DELIVERED){ $this->error = "已经发货了"; return false; } return true; } /** * 修改下单用户收货信息 * @param array $param * @return int */ public function updAddress(array $param) { if ($this['delivery_status'] != DeliveryStatus::NOT_DELIVERED) { $this->error = '未发货才能修改收货地址哦'; return false; } // 更新收货地址 return $this->save([ 'name' => $param['name'], 'phone' => $param['phone'], 'province_id' => $param['province_id'], 'city_id' => $param['city_id'], 'region_id' => $param['region_id'], 'detail' => $param['detail'], ]); } }