文件
mashangyoujiu/Application/Make/Business/Make.class.php

415 行
14 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?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'], "暂无修改");
}
}
}