getOrderFindField([ 'merchant_id' => $param['merchant_id'], 'bill_id' => $param['bill_id'], 'status' => ['neq', 'cancel'] ], "order_number", "id desc"); if (empty($order_number)) { return callBack(statusCode()['error'], "未找到该订单"); } $MakeClass = new \Common\Business\Make([ 'merchant_id' => $param['merchant_id'], 'data' => [ 'order_num' => $order_number ] ]); $result = $MakeClass->get_order_detail(); $result = json_decode($result, true); if ($result['error_code'] == 0) { return callBack(statusCode()['success'], "查询成功", $result['data']); } else { return callBack(statusCode()['error'], $result['msg']); } } catch (\Exception $e) { return callBack(statusCode()['error'], "查询失败"); } } /** * 取消订单 * @param $param * [ * merchant_id * bill_id 订单id * ] * @return mixed */ public function cancel_order($param) { try { $where = [ 'merchant_id' => $param['merchant_id'], 'bill_id' => $param['bill_id'], 'status' => ['neq', 'cancel'] ]; $MakeOrderModel = new MakeOrderModel(); $order_info = $MakeOrderModel->getOrderFind($where, "id,order_number", 'id desc'); $MakeClass = new \Common\Business\Make([ 'merchant_id' => $param['merchant_id'], 'data' => [ 'order_num' => $order_info['order_number'] ] ]); $result = $MakeClass->cancel_order(); $result = json_decode($result, true); if ($result['error_code'] == 0) { $MakeOrderModel->updateOrder([ 'id' => $order_info['id'] ], [ 'status' => 'cancel' ]); return callBack(statusCode()['success'], "取消成功"); } else { return callBack(statusCode()['error'], "取消失败"); } } catch (\Exception $e) { return callBack(statusCode()['error'], "取消失败"); } } /** * 添加配送记录表 * @param $param * [ * merchant_id * store_id * store 门店信息 * cashier 收银员信息 * bill_order 订单信息 * total_price 配送价格 * note 备注 * address 地址信息 * distance 距离(km) * ] * @return mixed */ public function addRecord($param) { $time = time(); $data = [ 'merchant_id' => $param['merchant_id'], 'store_id' => $param['store_id'], 'cashier_id' => $param['cashier']['id'], 'bill_id' => $param['bill_order']['id'], 'order_number' => $param['order_number'], 'bill_order_number' => $param['bill_order']['order_no'], 'pick_time' => $time, 'remark' => $param['note'], 'address' => json_encode($param['address']), 'pay_price' => $param['total_price'], 'total_price' => $param['total_price'], 'shop_id' => $param['store_id'], 'distance' => $param['distance'], 'status' => 'payed', //待接单 'add_time' => $time ]; try { $MakeOrderModel = new MakeOrderModel(); $make_id = $MakeOrderModel->addOrder($data); } catch (\Exception $e) { return callBack(statusCode()['error'], "发布订单成功,记录添加失败"); } if (!empty($make_id)) { return callBack(statusCode()['success'], "发布订单成功", ['delivery_record_id' => $make_id]); } else { return callBack(statusCode()['error'], "发布订单成功,记录添加失败"); } } /** * 发布订单 * @param $param * [ * merchant_id * store_id * store 门店信息 * cashier 收银员信息 * bill_order 订单信息 * total_price 配送价格 * distance 配送配送费 * note 备注 * begin_phone 收银员手机号 * ] * @return mixed */ public function createOrder($param) { $verifyResult = $this->createOrderVerify($param); if ($verifyResult['status'] != 1) { return $verifyResult; } $order_info = $param['bill_order']; $store = $param['store']; $cashier = $param['cashier']; $user_address = getAddress($order_info["user_address"], 1); //客户高德经纬度 if (empty($user_address['lng']) || empty($user_address['lat'])) { return callBack(statusCode()['error'], "高德地图获取经纬度失败,请检测合伙人地图设置"); } $address = [ 'begin_detail' => '', 'begin_address' => $store['address'], 'begin_lat' => $store['latitude'], 'begin_lng' => $store['longitude'], 'begin_username' => $cashier['name'] ? $cashier['name'] : $store['storetag'], 'begin_phone' => $param['begin_phone'], 'end_detail' => '', 'end_address' => $order_info['user_address'], 'end_lat' => $user_address['lat'], 'end_lng' => $user_address['lng'], 'end_username' => $order_info['user_name'], 'end_phone' => $order_info['user_phone'] ]; $title = 'http'; if ($_SERVER['HTTPS'] == 'on') { $title .= 's'; } $http = $title . '://' . $_SERVER['HTTP_HOST']; try { $data = [ 'goods_name' => $order_info['order_no'], 'pick_time' => date('Y-m-d H:i:s', time()), 'remark' => $param['note'] ? $param['note'] : '', 'pay_price' => $param['total_price'] ? $param['total_price'] : 0, 'total_price' => $param['total_price'] ? $param['total_price'] : 0, 'shop_id' => $param['store_id'], 'address' => json_encode($address), 'notify_url' => $http . '/index.php/NotifyApi/Make/orderCallBack', ]; $MakeClass = new \Common\Business\Make([ 'merchant_id' => $param['merchant_id'], 'store_id' => $param['store_id'], 'data' => $data ]); $result = $MakeClass->create_order(); $result = json_decode($result, true); if ($result['error_code'] == 0) { $param['order_number'] = $result['data']['order_number']; $param['address'] = $address; $result = $this->addRecord($param); return $result; } else { return callBack(statusCode()['error'], $result['msg']); } } catch (\Exception $e) { return callBack(statusCode()['error'], "发布失败"); } } /** * 发布订单前的验证 * @param $param * [ * merchant_id * bill_order 订单信息 * ] * @return mixed */ public function createOrderVerify($param) { $MakeModel = new MakeModel(); $make_status = $MakeModel->getFindField([ 'merchant_id' => $param['merchant_id'] ], "status"); if ($make_status != 1) { return callBack(statusCode()['error'], "已关闭码科配送"); } $where = [ 'merchant_id' => $param['merchant_id'], 'bill_id' => $param['bill_order']['id'], 'status' => ['neq', 'cancel'] ]; $MakeOrderModel = new MakeOrderModel(); $make_order_info = $MakeOrderModel->getFind($where); if (!empty($make_order_info)) { return callBack(statusCode()['error'], "该订单已配送" . $make_order_info['id']); } return callBack(statusCode()['success'], "验证成功"); } /** * 获取配送价格 * @param $param . * [ * order_no 订单号 * merchant_id * store_id * ] * @return mixed */ public function getDeliveryPrice($param) { $verifyResult = $this->getDeliveryPriceVerify($param); //验证 if ($verifyResult['status'] != 1) { return $verifyResult; } $order_info = $verifyResult['data']['order_info']; //订单信息 $store_info = $verifyResult['data']['store_info']; //门店信息 $user_address = getAddress($order_info["user_address"], 1); //客户高德经纬度 if (empty($user_address['lng']) || empty($user_address['lat'])) { return callBack(statusCode()['error'], "高德地图获取经纬度失败,请检测合伙人地图设置"); } try { $MakeClass = new \Common\Business\Make([ 'merchant_id' => $param['merchant_id'], 'store_id' => $param['store_id'], 'data' => [ 'fromcoord' => $store_info['latitude'] . ',' . $store_info['longitude'], 'tocoord' => $user_address['lat'] . ',' . $user_address['lng'], ] ]); $priceResult = $MakeClass->get_delivery_price(); $priceResult = json_decode($priceResult, true); if ($priceResult['error_code'] == 0) { return callBack(statusCode()['success'], "获取成功", $priceResult['data']); } else { return callBack(statusCode()['error'], $priceResult['msg']); } } catch (\Exception $e) { return callBack(statusCode()['error'], "获取失败"); } } /** * 获取价格的验证 * @param $param * [ * order_no 订单号 * merchant_id * store_id * ] * @return mixed */ public function getDeliveryPriceVerify($param) { $PlugClass = new Plug(); $plug_info = $PlugClass->PlugPermissions([ 'merchant_id' => $param['merchant_id'], 'identification_arr' => [ 'make' ] ]); if (empty($plug_info['data']['plug']['make'])) { return callBack(statusCode()['error'], "暂无插件权限"); } $MakeModel = new MakeModel(); $make_status = $MakeModel->getFindField([ 'merchant_id' => $param['merchant_id'] ], "status"); if ($make_status != 1) { return callBack(statusCode()['error'], "已关闭码科配送"); } $BillOrderClass = new BillOrder(); $orderResult = $BillOrderClass->orderStateVerify($param); if ($orderResult['status'] != 1) { return $orderResult; } $order_info = $orderResult['data']['order_info']; //订单信息 $StoreModel = new RetailStoreModel(); $store_info = $StoreModel->getFind(['id' => $param['store_id']]); //门店信息 if (empty($store_info['detail_address']) || empty($store_info['latitude']) || empty($store_info['longitude'])) { return callBack(statusCode()['error'], "请检查后台本门店详细地址与经纬度"); } return callBack(statusCode()['success'], "验证成功", ['order_info' => $order_info, 'store_info' => $store_info]); } /** * 码科配置 * @param $param * [ * merchant_id * status 1开启 2关闭 * domain_name 码科域名 * app_id 配送端appid * token 配送端token * ] * @return mixed */ public function makeSet($param) { $time = time(); $MakeModel = new MakeModel(); $info = $MakeModel->getFind([ 'merchant_id' => $param['merchant_id'] ]); $data = [ 'token' => trim($param['token']), 'app_id' => trim($param['app_id']), 'domain_name' => trim($param['domain_name']), 'status' => $param['status'], ]; if (!empty($info)) { $updateStatus = $MakeModel->updateOrder([ 'merchant_id' => $param['merchant_id'] ], $data); } else { $data['add_time'] = $time; $data['merchant_id'] = $param['merchant_id']; $updateStatus = $MakeModel->addOrder($data); } if ($updateStatus) { try { $MakeClass = new \Common\Business\Make([ 'merchant_id' => $param['merchant_id'] ]); $MakeClass->getToken(); //更新token $request_token = $MakeModel->getFindField([ 'merchant_id' => $param['merchant_id'] ], "request_token"); if (!empty($request_token)) { return callBack(statusCode()['success'], "操作成功,令牌已更新"); } else { return callBack(statusCode()['error'], "令牌更新失败,请检测参数是否正确"); } } catch (\Exception $e) { return callBack(statusCode()['error'], "暂无修改"); } } else { return callBack(statusCode()['error'], "暂无修改"); } } }