415 行
14 KiB
PHP
可执行文件
415 行
14 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Make\Business;
|
||
|
||
use Common\Business\BillOrder;
|
||
use Common\Business\Plug;
|
||
use Common\Model\RetailStoreModel;
|
||
use Make\Model\MakeModel;
|
||
use Make\Model\MakeOrderModel;
|
||
|
||
/**
|
||
* 码科类
|
||
* Class Make
|
||
* [
|
||
* 取消订单 cancel_order
|
||
* 添加配送记录表 addRecord
|
||
* 发布订单 createOrder
|
||
* 发布订单前的验证 createOrderVerify
|
||
* 获取价格的验证 getDeliveryPriceVerify
|
||
* 获取配送价格 getDeliveryPrice
|
||
* 码科配置 makeSet
|
||
* ]
|
||
* @package Make\Business
|
||
*/
|
||
class Make
|
||
{
|
||
/**
|
||
* 订单详情
|
||
* @param $param
|
||
* [
|
||
* bill_id 订单id
|
||
* merchant_id
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function order_info($param)
|
||
{
|
||
try {
|
||
$MakeOrderModel = new MakeOrderModel();
|
||
$order_number = $MakeOrderModel->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'], "暂无修改");
|
||
}
|
||
}
|
||
} |