667 行
30 KiB
PHP
可执行文件
667 行
30 KiB
PHP
可执行文件
<?php
|
||
namespace Api\Controller;
|
||
use Think\Controller;
|
||
//[1.5.44]
|
||
class DeliveryController extends Controller{
|
||
/**
|
||
* 获取UU配送费和距离
|
||
* @param order_no 订单号
|
||
*/
|
||
public function getUuDeliveryPrice($parameter)
|
||
{
|
||
$verify_bill_order = D("RetailBillOrder")->order_existence_verify($parameter); //验证订单
|
||
if($verify_bill_order['status'] == 0){
|
||
return $verify_bill_order;
|
||
}
|
||
$billOrder = $verify_bill_order['bill_order'];
|
||
$verify_bill_online = D("RetailBillOnline")->delivery_verify($billOrder);
|
||
if($verify_bill_online['status'] == 0){
|
||
return $verify_bill_online;
|
||
}
|
||
$onlineOrder = $verify_bill_online['online_order']; //online_order 信息
|
||
if ($onlineOrder["order_genre"] == 2) {
|
||
//拼团订单
|
||
$BillGroupModel = D('RetailBillGroup');
|
||
$state = $BillGroupModel->getFindField(array($BillGroupModel::BILL_ID => $billOrder["id"]), $BillGroupModel::STATE);
|
||
if ($state != 2) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '该订单未拼团成功,不能进行配送';
|
||
return $result;
|
||
}
|
||
}
|
||
$verify_delivery = D('RetailDeliveryConfig')->delivery_verify();
|
||
if($verify_delivery['status'] == 0){
|
||
return $verify_delivery;
|
||
}
|
||
$deliveryConfig = $verify_delivery['delivery_config'];
|
||
$StoreModel = D('RetailStore');
|
||
$store = $StoreModel->getFind(array('id'=>$billOrder['store_id']));
|
||
if (empty($store[$StoreModel::DETAIL_ADDRESS]) || empty($store[$StoreModel::LATITUDE]) || empty($store[$StoreModel::LONGITUDE])) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '请检查后台本门店详细地址与经纬度';
|
||
return $res;
|
||
}
|
||
$lngLat = getAddress($onlineOrder["user_address"], 2);
|
||
if (empty($lngLat['lng']) || empty($lngLat['lat'])) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '百度地图获取经纬度失败,请检测合伙人地图设置';
|
||
return $res;
|
||
}
|
||
$UuMerchantModel = D('RetailUuMerchant');
|
||
$openid = $UuMerchantModel->getFindField(array($UuMerchantModel::MERCHANT_ID => $parameter['merchant_id']), $UuMerchantModel::OPENID);
|
||
$store_position = Convert_GCJ02_To_BD09($store[$StoreModel::LATITUDE],$store[$StoreModel::LONGITUDE]);
|
||
$data = array(
|
||
'from_address' => $store[$StoreModel::DETAIL_ADDRESS],
|
||
'to_address' => $onlineOrder["user_address"],
|
||
'city_name' => $store[$StoreModel::CITY],
|
||
'county_name' => $store[$StoreModel::AREA],
|
||
'send_type' => 0,
|
||
'to_lat' => $lngLat['lat'],
|
||
'to_lng' => $lngLat['lng'],
|
||
'from_lat' => $store_position['lat'],
|
||
'from_lng' => $store_position['lng'],
|
||
'openid' => $openid,
|
||
'appid' => $deliveryConfig['uu_appid'],
|
||
);
|
||
file_put_contents('./deliveryUU.txt', json_encode($data) . "\r\n", FILE_APPEND);
|
||
$content = A('Retail/Uudelivery')->getorderprice($data, $deliveryConfig['uu_appkey']);//获取uu价格
|
||
$content = json_decode($content, true);
|
||
if ($content['return_code'] == 'ok' && $content['appid']) {
|
||
$UuOrderModel = D('RetailUuOrder');
|
||
$item = array(
|
||
$UuOrderModel::ORIGIN_ID => $billOrder["id"],
|
||
$UuOrderModel::ORDER_ID => $billOrder["order_no"],
|
||
$UuOrderModel::PRICE_TOKEN => $content['price_token'],
|
||
$UuOrderModel::TOTAL_MONEY => $content['total_money'],
|
||
$UuOrderModel::NEED_PAY_MONEY => $content['need_paymoney'],
|
||
$UuOrderModel::TOTAL_PRICE_OFF => $content['total_priceoff'],
|
||
$UuOrderModel::DISTANCE => $content['distance'],
|
||
$UuOrderModel::FREIGHT_MONEY => $content['freight_money'],
|
||
$UuOrderModel::COUPON_AMOUNT => $content['coupon_amount'],
|
||
$UuOrderModel::EXPIRES_IN => $content['expires_in'],
|
||
$UuOrderModel::MERCHANT_ID => $parameter['merchant_id'],
|
||
$UuOrderModel::STORE_ID => $parameter['store_id'],
|
||
$UuOrderModel::ADD_TIME => time(),
|
||
$UuOrderModel::ORDER_GENRE => $onlineOrder["order_genre"]
|
||
);
|
||
$add = $UuOrderModel->addOrder($item);
|
||
if ($add) {
|
||
D("RetailBillOnline")->updateOrder(array("bill_id"=>$billOrder['id']), array("delivery_record_id" => $add));
|
||
$res['status'] = 1;
|
||
$res['msg'] = '实际需要支付金额' . $content['need_paymoney'] . '元,配送距离' . $content['distance'] . '米';
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '价格计算成功,存表失败,请重新配送';
|
||
}
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = $content['return_msg'];
|
||
}
|
||
return $res;
|
||
}
|
||
/**
|
||
* 配送
|
||
* option_type 1收银机 2后台
|
||
* operation_id 后台操作者Id
|
||
* order_no 订单编号
|
||
* type 1商家配送 2达达配送 3UU配送
|
||
* uu_phone 发件人手机号
|
||
* special_type 特殊处理类型,是否需要保温箱 1需要 0不需要
|
||
* note 备注
|
||
*
|
||
*
|
||
*/
|
||
public function deliveryOrder($parameter)
|
||
{
|
||
$option_type = $parameter['option_type']?$parameter['option_type']:1;
|
||
$merchant_id = $parameter['merchant_id'];
|
||
$store_id = $parameter["store_id"];
|
||
$store = $parameter['store'];
|
||
$cashier = $parameter["cashier"];
|
||
$cashier_id = $parameter["cashier_id"];
|
||
$operation_id = $parameter['operation_id'];
|
||
$order_no = $parameter["order_no"];
|
||
$type = $parameter["type"];
|
||
$uu_phone = $parameter["uu_phone"];
|
||
$special_type = $parameter["special_type"]?$parameter["special_type"]: 0;
|
||
$note = $parameter["note"];
|
||
if (empty($uu_phone) && $option_type == 1) {
|
||
$CashierModel = D('RetailCashier');
|
||
$uu_phone = $cashier[$CashierModel::MOBILE];
|
||
}
|
||
if (empty($order_no) || empty($type)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = "缺少参数";
|
||
return $result;
|
||
}
|
||
//查询该订单
|
||
$BillModel = D('RetailBillOrder');
|
||
$verify_bill_order = $BillModel->order_existence_verify($parameter);
|
||
if($verify_bill_order['status'] == 0){
|
||
return $verify_bill_order;
|
||
}
|
||
$billOrder = $verify_bill_order['bill_order']; //订单信息
|
||
$OnlineModel = D('RetailBillOnline');
|
||
$verify_online_order = $OnlineModel->delivery_verify($billOrder);
|
||
if($verify_online_order['status'] == 0){
|
||
return $verify_online_order;
|
||
}
|
||
$onlineOrder = $verify_online_order['online_order']; //线上订单
|
||
if ($onlineOrder[$OnlineModel::ORDER_GENRE] == 2) {
|
||
//拼团订单
|
||
$BillGroupModel = D('RetailBillGroup');
|
||
$state = $BillGroupModel->getFindField(array($BillGroupModel::BILL_ID => $billOrder[$BillModel::ID]), $BillGroupModel::STATE);
|
||
if ($state != 2) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '该订单未拼团成功,不能进行配送';
|
||
return $result;
|
||
}
|
||
}
|
||
if ($type == 2) {
|
||
$da_parameter = array(
|
||
'bill_order'=>$billOrder,
|
||
'online_order'=>$onlineOrder,
|
||
'store'=>$store,
|
||
'merchant_id'=>$merchant_id,
|
||
'store_id'=>$store_id
|
||
);
|
||
$res = $this->toDaDaDelivery($da_parameter);//达达配送
|
||
} else if ($type == 3) {
|
||
$uu_parameter = array(
|
||
'bill_order'=>$billOrder,
|
||
'online_order'=>$onlineOrder,
|
||
'special_type'=>$special_type,
|
||
'uu_phone'=>$uu_phone,
|
||
'note'=>$note,
|
||
'store'=>$store,
|
||
'merchant_id'=>$merchant_id,
|
||
'store_id'=>$store_id
|
||
);
|
||
$res = $this->toUUDelivery($uu_parameter);//UU配送
|
||
} else {
|
||
$res = array(
|
||
'status' => 1,
|
||
'msg' => '配送成功'
|
||
);
|
||
}
|
||
if ($res['status'] == 1) {
|
||
$time = time();
|
||
if($option_type == 2){
|
||
$bSave = array(
|
||
$BillModel::OPERATION_ID => $operation_id
|
||
);
|
||
}else if($option_type == 1){
|
||
$bSave = array(
|
||
$BillModel::CASHIER_ID => $cashier_id
|
||
);
|
||
}
|
||
$bUpdate = $BillModel->updateOrder(array("id"=>$billOrder['id']), $bSave);
|
||
$oSave = array(
|
||
$OnlineModel::STATUS => $type == 1 ? 2 : 1,
|
||
$OnlineModel::DELIVERY_TYPE => $type,
|
||
$OnlineModel::DELIVERY_RECORD_ID => $res['delivery_record_id'],
|
||
$OnlineModel::DELIVERY_TIME => strval($time),
|
||
);
|
||
$oUpdate = $OnlineModel->updateOrder(array("bill_id"=>$billOrder['id']), $oSave);
|
||
if ($oUpdate) {
|
||
$result = $res;
|
||
} else {
|
||
$BillModel->updateOrder(array("id"=>$billOrder['id']), array($BillModel::FINISH_TIME => '', $BillModel::CASHIER_ID => null));
|
||
$result['status'] = 0;
|
||
$result['msg'] = '配送成功,订单更新失败,请联系管理员';
|
||
}
|
||
if($billOrder['order_type'] == 3){
|
||
//换货订单减少商家库存
|
||
$param = array(
|
||
'bill_order'=>$billOrder
|
||
);
|
||
A("Api/Inventory")->CustomerStockDec($param);
|
||
}
|
||
$SmallProgramUserModel = D('RetailSmallProgramUser');
|
||
$xcxVipInfo = $SmallProgramUserModel->getFind(array($SmallProgramUserModel::ID => $billOrder[$BillModel::UID]));
|
||
$StoreModel = D('RetailStore');
|
||
$SellModel = D('RetailSell');
|
||
$sMap = array(
|
||
$SellModel::BILL_ID => $billOrder[$BillModel::ID]
|
||
);
|
||
$sFields = array(
|
||
$SellModel::GOODS_NAME,
|
||
);
|
||
$sellOrder = $SellModel->getSelect($sMap, $sFields, '', '1,2');
|
||
if (count($sellOrder) > 1) {
|
||
$goods_name = $sellOrder[0][$SellModel::GOODS_NAME] . '等商品';
|
||
}else{
|
||
$goods_name = $sellOrder[0][$SellModel::GOODS_NAME];
|
||
}
|
||
switch ($onlineOrder[$OnlineModel::ORDER_GENRE]) {
|
||
case '1':
|
||
$order_type = '普通订单';
|
||
break;
|
||
case '2':
|
||
$order_type = '拼团订单';
|
||
break;
|
||
case '3':
|
||
$order_type = '秒杀订单';
|
||
break;
|
||
case '4':
|
||
$order_type = '预售订单';
|
||
break;
|
||
default:
|
||
$order_type = '普通订单';
|
||
}
|
||
$tempSend = array(
|
||
'merchant_id' => $billOrder[$BillModel::MERCHANT_ID],
|
||
'openid' => $xcxVipInfo[$SmallProgramUserModel::OPENID],
|
||
'form_id' => $onlineOrder[$OnlineModel::FORM_ID],
|
||
'type' => 2,//'1自提通知 2发货通知',
|
||
'sendData' => array(
|
||
'store_name' => $store[$StoreModel::STORE_NAME],
|
||
'delivery_type' => $type == 1 ? '商家配送' : ($type == 2 ? '达达配送' : 'UU跑腿配送'),
|
||
'delivery_time' => date('Y-m-d H:i:s'),
|
||
'order_no' => $billOrder[$BillModel::ORDER_NO],
|
||
'user_address' => $onlineOrder[$OnlineModel::USER_ADDRESS],
|
||
'user_phone' => $onlineOrder[$OnlineModel::USER_PHONE],
|
||
'username' => $onlineOrder[$OnlineModel::USER_NAME],
|
||
'price' => $billOrder[$BillModel::ALL_MONEY],
|
||
'add_time' => date('Y-m-d H:i:s', $billOrder[$BillModel::ADD_TIME]),
|
||
'goods_name' => $goods_name,
|
||
'store_address' => $store[$StoreModel::ADDRESS],
|
||
'store_phone' => $store[$StoreModel::PHONE],
|
||
'user_remark' => $onlineOrder[$OnlineModel::REMARK],
|
||
'order_type' => $order_type,
|
||
),
|
||
);
|
||
A('Api/XcxMark')->sendMark($tempSend);//小程序模板通知
|
||
} else {
|
||
$result = $res;
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* 达达配送
|
||
* @param $billOrder 订单主表
|
||
* @param $onlineOrder 线上表
|
||
* @return mixed
|
||
*/
|
||
protected function toDaDaDelivery($parameter)
|
||
{
|
||
$billOrder =$parameter['bill_order'];
|
||
$onlineOrder = $parameter['online_order'];
|
||
$store = $parameter['store'];
|
||
$merchant_id = $parameter['merchant_id'];
|
||
$store_id = $parameter['store_id'];
|
||
$BillModel = D('RetailBillOrder');
|
||
$OnlineModel = D('RetailBillOnline');
|
||
$DeliveryConfigModel = D('RetailDeliveryConfig');
|
||
$deliveryConfig = $DeliveryConfigModel->getFind();
|
||
if (empty($deliveryConfig)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '请先联系合伙人完善开发者信息';
|
||
return $result;
|
||
}
|
||
$da_app_key = $deliveryConfig[$DeliveryConfigModel::DA_APP_KEY];
|
||
$da_app_secret = $deliveryConfig[$DeliveryConfigModel::DA_APP_SECRET];
|
||
if (empty($da_app_key) || empty($da_app_secret)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '请联系合伙人完善达达配送所需信息';
|
||
return $result;
|
||
}
|
||
$StoreModel = D('RetailStore');
|
||
if ($store[$StoreModel::DADA_OPEN_STATE] != 2) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = "该门店未开启达达配送";
|
||
return $result;
|
||
}
|
||
if ($store[$StoreModel::DADA_SYNC_STATE] != 2) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = "门店未同步达达配送";
|
||
return $result;
|
||
}
|
||
$store_city = substr($store[$StoreModel::CITY], 0, -3);
|
||
$DaDaCityModel = D('RetailDaDaCity');
|
||
$cMap = array(
|
||
$DaDaCityModel::CITY_NAME => array('like', $store_city . "%")
|
||
);
|
||
$city_code = $DaDaCityModel->getFindField($cMap, $DaDaCityModel::CITY_CODE);
|
||
if (empty($city_code)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '订单所在城市有误';
|
||
return $result;
|
||
}
|
||
if (!$onlineOrder[$OnlineModel::USER_ADDRESS]) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '收货人信息有误';
|
||
return $result;
|
||
}
|
||
$DaMerchantModel = D('RetailDaMerchant');
|
||
$da_merchant_id = $DaMerchantModel->getFindField(array($DaMerchantModel::MERCHANT_ID => $merchant_id), $DaMerchantModel::RESULT_ID);
|
||
if (empty($da_merchant_id)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '请先在达达配送注册达达商户';
|
||
return $result;
|
||
}
|
||
$lngLat = getAddress($onlineOrder[$OnlineModel::USER_ADDRESS], 1);
|
||
$title = 'http';
|
||
if ($_SERVER['HTTPS'] == 'on') {
|
||
$title .= 's';
|
||
}
|
||
$http = $title . '://' . $_SERVER['HTTP_HOST'];
|
||
$data = array(
|
||
'origin_id' => $billOrder[$BillModel::ORDER_NO],
|
||
'shop_no' => $store[$StoreModel::ORIGIN_SHOP_ID],
|
||
'city_code' => $city_code,
|
||
'cargo_price' => $billOrder[$BillModel::ALL_MONEY],
|
||
'is_prepay' => 0,
|
||
'receiver_name' => $onlineOrder[$OnlineModel::USER_NAME],
|
||
'receiver_address' => $onlineOrder[$OnlineModel::USER_ADDRESS],
|
||
'receiver_lat' => $lngLat['lat'],
|
||
'receiver_lng' => $lngLat['lng'],
|
||
'receiver_phone' => $onlineOrder[$OnlineModel::USER_PHONE],
|
||
'cargo_weight'=>1,
|
||
'callback' => $http . '/index.php/NotifyApi/DaDa/orderCallBack'
|
||
);
|
||
$DaOrderModel = D('RetailDaOrder');
|
||
$oldDaOrder = $DaOrderModel->getFind(array($DaOrderModel::ORDER_NO => strval($billOrder[$BillModel::ORDER_NO])));
|
||
if ($onlineOrder[$OnlineModel::PICKUP_TYPE] == 2 && ($onlineOrder[$OnlineModel::CANCEL_DELIVERY_STATUS] == 1 || empty($oldDaOrder))) {
|
||
//第一次下单
|
||
$success = A('Retail/DadaCeshi')->addorder($da_app_key, $da_app_secret, $da_merchant_id, $data);
|
||
} else if ($onlineOrder[$OnlineModel::PICKUP_TYPE] == 2 && $onlineOrder[$OnlineModel::CANCEL_DELIVERY_STATUS] == 2 && !empty($oldDaOrder)) {
|
||
$success = A('Retail/DadaCeshi')->reAddOrder($da_app_key, $da_app_secret, $da_merchant_id, $data);
|
||
} else {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '您的操作有误';
|
||
return $result;
|
||
}
|
||
file_put_contents('./deliveryDaDa.txt', $success . "\r\n", FILE_APPEND);
|
||
$success = json_decode($success, true);
|
||
if ($success['status'] == 'success') {
|
||
$item = array(
|
||
$DaOrderModel::ORDER_GENRE => $onlineOrder[$OnlineModel::ORDER_GENRE],
|
||
$DaOrderModel::ORDER_NO => $billOrder[$BillModel::ORDER_NO],
|
||
$DaOrderModel::ORDER_STATUS => 1,//待接单=1 待取货=2 配送中=3 已完成=4 已取消=5 已过期=7 指派单=8 妥投异常之物品返回中=9 妥投异常之物品返回完成=10 创建达达运单失败=1000
|
||
$DaOrderModel::MERCHANT_ID => $merchant_id,
|
||
$DaOrderModel::STORE_ID => $store_id,
|
||
$DaOrderModel::ADD_TIME => time(),
|
||
$DaOrderModel::DISTANCE => $success['result']['distance'],
|
||
$DaOrderModel::FEE => $success['result']['fee'],
|
||
$DaOrderModel::DELIVER_FEE => $success['result']['deliverFee'],
|
||
);
|
||
$clerk_id = $DaOrderModel->addOrder($item);
|
||
if ($clerk_id) {
|
||
$result['delivery_record_id'] = $clerk_id;
|
||
$result['status'] = 1;
|
||
$result['msg'] = $success['msg'] . "配送距离" . $success['result']['distance'] . "米,实际配送费" . $success['result']['fee'] . "运费" . $success['result']['deliverFee'];
|
||
} else {
|
||
$result['status'] = 1;
|
||
$result['msg'] = $success['msg'] . "配送距离" . $success['result']['distance'] . "米,实际配送费" . $success['result']['fee'] . "运费" . $success['result']['deliverFee'] . '订单状态未修改';
|
||
}
|
||
} else {
|
||
$result['status'] = 0;
|
||
$result['msg'] = $success['msg'];
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
|
||
/**
|
||
* UU配送
|
||
* @param $billOrder 订单主表
|
||
* @param $onlineOrder 订单线上表
|
||
* @param $special_type 特殊处理类型,是否需要保温箱 1需要 0不需要
|
||
* @param $uu_phone 发件人手机号
|
||
* @param $note 备注
|
||
* @return mixed
|
||
*/
|
||
protected function toUUDelivery($parameter)
|
||
{
|
||
$billOrder =$parameter['bill_order'];
|
||
$onlineOrder = $parameter['online_order'];
|
||
$special_type = $parameter['special_type'];
|
||
$uu_phone = $parameter['uu_phone'];
|
||
$note = $parameter['note'];
|
||
$store = $parameter['store'];
|
||
$merchant_id = $parameter['merchant_id'];
|
||
$store_id = $parameter['store_id'];
|
||
$OnlineModel = D('RetailBillOnline');
|
||
if (!$billOrder) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '参数错误,请重新下单';
|
||
return $res;
|
||
}
|
||
$UuOrderModel = D('RetailUuOrder');
|
||
$orderInfo = $UuOrderModel->getFind(array($UuOrderModel::ID => $onlineOrder[$OnlineModel::DELIVERY_RECORD_ID]));
|
||
if (empty($orderInfo)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '未找到订单,刷新重试';
|
||
return $res;
|
||
}
|
||
|
||
$DeliveryConfigModel = D('RetailDeliveryConfig');
|
||
$deliveryConfig = $DeliveryConfigModel->getFind();
|
||
if (empty($deliveryConfig)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '请先联系合伙人完善开发者信息';
|
||
return $result;
|
||
}
|
||
$uu_app_id = $deliveryConfig[$DeliveryConfigModel::UU_APPID];
|
||
$uu_ip = $deliveryConfig[$DeliveryConfigModel::UU_IP];
|
||
$uu_app_key = $deliveryConfig[$DeliveryConfigModel::UU_APP_KEY];
|
||
if (empty($uu_app_id) || empty($uu_ip) || empty($uu_app_key)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '请联系合伙人完善UU配送所需信息';
|
||
return $result;
|
||
}
|
||
$UuMerchantModel = D('RetailUuMerchant');
|
||
$openid = $UuMerchantModel->getFindField(array($UuMerchantModel::MERCHANT_ID => $parameter['merchant_id']), $UuMerchantModel::OPENID);
|
||
$title = 'http';
|
||
if ($_SERVER['HTTPS'] == 'on') {
|
||
$title .= 's';
|
||
}
|
||
$http = $title . '://' . $_SERVER['HTTP_HOST'];
|
||
$data = array(
|
||
'price_token' => $orderInfo[$UuOrderModel::PRICE_TOKEN],
|
||
'order_price' => $orderInfo[$UuOrderModel::TOTAL_MONEY],
|
||
'balance_paymoney' => $orderInfo[$UuOrderModel::NEED_PAY_MONEY],
|
||
'receiver' => $onlineOrder[$OnlineModel::USER_NAME],
|
||
'receiver_phone' => $onlineOrder[$OnlineModel::USER_PHONE],
|
||
'push_type' => 0,
|
||
'special_type' => $special_type,
|
||
'callme_withtake' => 1,
|
||
'pubusermobile' => $uu_phone,
|
||
'openid' => $openid,
|
||
'appid' => $uu_app_id,
|
||
'callback_url' => $http . '/index.php/NotifyApi/Uu/orderCallBack',
|
||
);
|
||
if (!empty($note)) {
|
||
$data['note'] = $note;
|
||
}
|
||
|
||
$content = A('Retail/Uudelivery')->addorder($data, $uu_app_key);
|
||
$content = json_decode($content, true);
|
||
if ($content['return_code'] == 'ok' && $content['appid'] == $data['appid']) {
|
||
$save = array(
|
||
$UuOrderModel::ORDER_CODE => $content['ordercode'],
|
||
$UuOrderModel::STATE => 1
|
||
);
|
||
$uuSave = $UuOrderModel->updateOrder(array($UuOrderModel::ID => $orderInfo[$UuOrderModel::ID]), $save);
|
||
if ($uuSave) {
|
||
$res['delivery_record_id'] = $onlineOrder[$OnlineModel::DELIVERY_RECORD_ID];
|
||
$res['status'] = 1;
|
||
$res['msg'] = '下单成功';
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '下单成功,订单状态修改失败';
|
||
}
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = $content['return_msg'];
|
||
}
|
||
return $res;
|
||
}
|
||
|
||
/**
|
||
* 取消配送
|
||
* order_no 订单号
|
||
* reason //UU取消配送原因
|
||
* reason_id //达达取消配送原因id
|
||
*/
|
||
public function cancelDelivery($parameter)
|
||
{
|
||
$order_no = $parameter["order_no"];
|
||
$reason = $parameter["reason"]?$parameter["reason"]:'';
|
||
$reason_id = $parameter["reason_id"]?$parameter["reason_id"]:0;
|
||
$merchant_id = $parameter["merchant_id"];
|
||
$store_id = $parameter["store_id"];
|
||
if (empty($order_no)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = "缺少参数";
|
||
return $result;
|
||
}
|
||
//查询该订单
|
||
$BillModel = D('RetailBillOrder');
|
||
$bMap = array(
|
||
$BillModel::ORDER_NO => strval($order_no),
|
||
$BillModel::STORE_ID => $store_id,
|
||
$BillModel::PAY_STATE => 1,//支付成功
|
||
$BillModel::TYPE => 1,//商城订单
|
||
$BillModel::ORDER_TYPE => array("in","1,3"),//购买订单 换货订单
|
||
);
|
||
$billOrder = $BillModel->getFind($bMap);//主订单
|
||
if (empty($billOrder)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '暂未查询到该订单';
|
||
return $result;
|
||
}
|
||
$OnlineModel = D('RetailBillOnline');
|
||
$oMap = array(
|
||
$OnlineModel::BILL_ID => $billOrder[$BillModel::ID]
|
||
);
|
||
$onlineOrder = $OnlineModel->getFind($oMap);//线上订单
|
||
if (empty($onlineOrder)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '数据库操作有误';
|
||
return $result;
|
||
}
|
||
if (($onlineOrder[$OnlineModel::DELIVERY_TYPE] == 2 || $onlineOrder[$OnlineModel::DELIVERY_TYPE] == 3) && (empty($reason) && empty($reason_id))) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = "缺少取消原因";
|
||
return $result;
|
||
}
|
||
if ($onlineOrder[$OnlineModel::STATUS] == 3) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '订单已收货,请刷新页面查看';
|
||
return $result;
|
||
}
|
||
$type = $onlineOrder[$OnlineModel::DELIVERY_TYPE];
|
||
if ($type == 2 || $type == 3) {
|
||
$DeliveryConfigModel = D('RetailDeliveryConfig');
|
||
$deliveryConfig = $DeliveryConfigModel->getFind();
|
||
if (empty($deliveryConfig)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '请先联系合伙人完善开发者信息';
|
||
return $result;
|
||
}
|
||
if ($type == 2) {
|
||
//达达配送
|
||
$DaMerchantModel = D('RetailDaMerchant');
|
||
$result_id = $DaMerchantModel->getFindField(array($DaMerchantModel::MERCHANT_ID => $merchant_id), $DaMerchantModel::RESULT_ID);
|
||
if (empty($result_id)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '请先在达达配送注册达达商户';
|
||
return $res;
|
||
}
|
||
$data = array();
|
||
$data['order_id'] = $billOrder[$BillModel::ORDER_NO];
|
||
$data['cancel_reason_id'] = $reason_id;
|
||
$success = A('Retail/DadaCeshi')->formalCancel($deliveryConfig[$DeliveryConfigModel::DA_APP_KEY], $deliveryConfig[$DeliveryConfigModel::DA_APP_SECRET], $result_id, $data);
|
||
$success = json_decode($success, true);
|
||
if ($success['status'] == 'success') {
|
||
$DaOrderModel = D('RetailDaOrder');
|
||
$dMap = array(
|
||
$DaOrderModel::ID => $onlineOrder[$OnlineModel::DELIVERY_RECORD_ID]
|
||
);
|
||
$cancel_reason = M('retail_da_reason')->where(array('reasonid' => $reason_id))->getField('reason');
|
||
$save_d = array(
|
||
$DaOrderModel::DEDUCT_FEE => $success['result']['deduct_fee'],
|
||
$DaOrderModel::ORDER_STATUS => 5,
|
||
$DaOrderModel::CANCEL_REASON => $cancel_reason,
|
||
$DaOrderModel::CANCEL_FROM => 2,
|
||
);
|
||
$clerk_save = $DaOrderModel->updateOrder($dMap, $save_d);
|
||
if (!$clerk_save) {
|
||
$res['status'] = 1;
|
||
$res['msg'] = $success['msg'] . "订单修改失败";
|
||
} else {
|
||
$res['status'] = 1;
|
||
$res['msg'] = $success['msg'] . "扣除费用" . $success['result']['deduct_fee'] . "元";
|
||
}
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = $success['msg'];
|
||
}
|
||
} else {
|
||
//UU配送
|
||
$uu_app_id = $deliveryConfig[$DeliveryConfigModel::UU_APPID];
|
||
$uu_ip = $deliveryConfig[$DeliveryConfigModel::UU_IP];
|
||
$uu_app_key = $deliveryConfig[$DeliveryConfigModel::UU_APP_KEY];
|
||
if (empty($uu_app_id) || empty($uu_ip) || empty($uu_app_key)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '请联系合伙人完善UU配送所需信息';
|
||
return $result;
|
||
}
|
||
$UuOrderModel = D('RetailUuOrder');
|
||
$uuMap = array($UuOrderModel::ID => $onlineOrder[$OnlineModel::DELIVERY_RECORD_ID]);
|
||
$uu_order_info = $UuOrderModel->getFind($uuMap);
|
||
if (!$uu_order_info) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '未找到该uu订单';
|
||
return $res;
|
||
}
|
||
$UuMerchantModel = D('RetailUuMerchant');
|
||
$openid = $UuMerchantModel->getFindField(array($UuMerchantModel::MERCHANT_ID => $merchant_id), $UuMerchantModel::OPENID);
|
||
$data['order_code'] = $uu_order_info[$UuOrderModel::ORDER_CODE];
|
||
$data['reason'] = $reason ? $reason : '';
|
||
$data['openid'] = $openid;
|
||
$data['appid'] = $uu_app_id;
|
||
$content = A('Retail/Uudelivery')->cancelorder($data, $uu_app_key);
|
||
$content = json_decode($content, true);
|
||
if ($content['return_code'] == 'ok' && $content['appid'] == $data['appid']) {
|
||
$save = $UuOrderModel->updateOrder($uuMap, array($UuOrderModel::STATE => '-1'));
|
||
if ($save) {
|
||
$res['status'] = 1;
|
||
$res['msg'] = '取消配送成功';
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '取消成功,订单状态修改失败';
|
||
}
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = $content['return_msg'];
|
||
}
|
||
}
|
||
} else {
|
||
$res['status'] = 1;
|
||
$res['msg'] = '取消配送成功';
|
||
}
|
||
if ($res['status'] == 1) {
|
||
if($billOrder['order_type'] == 3){
|
||
//换货订单商家库存增加
|
||
$param = array(
|
||
'bill_order'=>$billOrder
|
||
);
|
||
A("Api/Inventory")->CustomerStockInc($param);
|
||
}
|
||
$saveOnline = array(
|
||
$OnlineModel::DELIVERY_TYPE => 1,//配送方式
|
||
$OnlineModel::DELIVERY_RECORD_ID => 0,//配送id
|
||
$OnlineModel::STATUS => 1,//状态:未发货
|
||
$OnlineModel::CANCEL_DELIVERY_STATUS => 2,//1取消过配送
|
||
);
|
||
}
|
||
$OnlineModel->updateOrder($oMap, $saveOnline);
|
||
return $res;
|
||
}
|
||
|
||
|
||
} |