Files
OMS/app/brush/lib/electron/taobao.php
2026-01-04 19:08:31 +08:00

232 lines
8.9 KiB
PHP

<?php
/**
* Copyright 2012-2026 ShopeX (https://www.shopex.cn)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author ykm 2015-12-16
* @describe 发起电子面单请求
*/
class brush_electron_taobao extends brush_electron_abstract{
protected $preBn = 'bet';
/**
* deliveryToSdf
* @param mixed $delivery delivery
* @return mixed 返回值
*/
public function deliveryToSdf($delivery){
$shop = $this->getChannelExtend();
$deliveryExtend = $this->getTradeOrderInfoCols($delivery);
$primary_bn = $this->preBn ? $this->preBn . $this->requestTime : $delivery[0]['delivery_bn'];
$sdf = parent::deliveryToSdf($delivery);
$sdf['primary_bn'] = $primary_bn;
$sdf['shop'] = $shop;
$sdf['delivery'] = $deliveryExtend;
return $sdf;
}
/**
* @param $arrDelivery array
* @return array
*/
public function getTradeOrderInfoCols($arrDelivery) {
$this->getDeliveryOrder($this->needRequestId);//先一步获取所有关联订单,避免多次查询,提高效率
$deliveryExtend = array();
foreach($arrDelivery as $delivery) {
$order_channels_type = $this->getOrderChannelsType($delivery['delivery_id']);
$item_name = $this->getItemName($delivery['delivery_id']);
$package_items = $this->getpackage_items($delivery['delivery_id']);
$failArray = array('delivery_id'=>$delivery['delivery_id'],'delivery_bn'=>$delivery['delivery_bn']);
if(empty($delivery['ship_province']) || empty($delivery['ship_addr'])){
$failArray['msg'] = '收货地址省份和详细地址不能少';
$this->directRet['fail'][] = $failArray;
continue;
}
if(empty($package_items)){
$failArray['msg'] = '包裹明细不能少';
$this->directRet['fail'][] = $failArray;
continue;
}
if(strlen($delivery['ship_district'])>60){
$failArray['msg'] = '地区长度最多20个汉字';
$this->directRet['fail'][] = $failArray;
continue;
}
$delivery['ship_mobile'] = trim($delivery['ship_mobile']);
$delivery['ship_tel'] = trim($delivery['ship_tel']);
$order = $this->getDeliveryOrder($delivery['delivery_id']);
$orderBn = $shopexB2bOrder = $tbfxOrder =array();
$totalAmount = 0;
foreach($order['order_info'] as $val) {
$totalAmount += $val['total_amount'];
if($val['createway'] == 'matrix') {
$frontShop = $this->getShop($val['shop_id']);
if($frontShop['node_type'] == 'shopex_b2b') {
$shopexB2bOrder[$val['order_id']] = $val;
} elseif ($frontShop['node_type'] == 'taobao' && $frontShop['business_type'] == 'fx') {
$tbfxOrder[$val['order_id']] = $val;
} else {
$orderBn[] = $val['order_bn'];
}
}
}
if($shopexB2bOrder) {
$shopexBn = $this->_getShopexBn($shopexB2bOrder);
is_array($shopexBn) && $orderBn = array_merge($orderBn, $shopexBn);
}
if($tbfxOrder) {
$tbfxBn = $this->_getTbfxBn($tbfxOrder);
is_array($tbfxBn) && $orderBn = array_merge($orderBn, $tbfxBn);
}
$tmpDelivery = $delivery;
//取货品描述
$goods_description = $this->getGoodsDesc($delivery['delivery_id']);
if($goods_description) $tmpDelivery['goods_description'] = $goods_description;
$tmpDelivery['total_amount'] = $totalAmount;
$tmpDelivery['order_channels_type'] = $order_channels_type;
$tmpDelivery['item_name'] = $item_name;
$tmpDelivery['package_items'] = $package_items;
$tmpDelivery['order_bn'] = $orderBn;
$deliveryExtend[] = $tmpDelivery;
}
return $deliveryExtend;
}
/**
* 获取订单店铺类型
* @param Int $delivery_id 发货单ID
*/
public function getOrderChannelsType($delivery_id) {
$deliveryOrder = $this->getDeliveryOrder($delivery_id);
$tbbusiness_type = 'other';
$createway = 'local';
$node_type = '';
foreach ($deliveryOrder['order_info'] as $k => $v) {
$createway = $v['createway'];
if ($v['createway'] != 'matrix') {
break;
}
}
if ($deliveryOrder && $createway == 'matrix') {
$firstOrderId = $deliveryOrder['order_id'][0];
$shop_id = $deliveryOrder['order_info'][$firstOrderId]['shop_id'];
$shop = $this->getShop($shop_id);
if ($shop) {
$tbbusiness_type = $shop['tbbusiness_type'];
$node_type = $shop['node_type'];
}
}
$order_channels_type = logisticsmanager_waybill_taobao::get_order_channels_type($tbbusiness_type, $node_type);
return $order_channels_type;
}
/**
* 获取商品名称
* @param Int $delivery_id 发货单ID
* @return string
*/
public function getItemName($delivery_id) {
$deliveryOrder = $this->getDeliveryOrder($delivery_id);
$item_name = 'other item name';
if ($deliveryOrder) {
$firstOrderId = $deliveryOrder['order_id'][0];
$orderItems = $this->getOrderItems($firstOrderId);
if ($orderItems) {
//订单明细中第一个商品名称
$item_name = $orderItems[0]['name'] ? $orderItems[0]['name']:'other item name';
if(isset($item_name[120])) {
$item_name = mb_substr($item_name, 0, 120, 'utf8');
}
}
}
return $item_name;
}
/**
* 获取包裹明细
* @param Int $delivery_id 发货单ID
* @return array
*/
public function getpackage_items($delivery_id)
{
$items = $this->getDeliveryItems($delivery_id);
$package = array();
foreach ($items as $item ) {
$product_name = $item['product_name'] ? $item['product_name'] : '商品名称';
if(isset($product_name[120])) {
$product_name = mb_substr($product_name, 0, 120, 'utf8');
}
$package[] = array('item_name'=>$product_name,'count'=>$item['number']);
}
return $package;
}
private function _getShopexBn($arrOrder) {
$fxw = app::get('ome')->model('fxw_orders')->getList('*', array('order_id'=>array_keys($arrOrder)));
$fxwData = array();
foreach($fxw as $val) {
$fxwData[$val['order_id']] = $val;
}
$shopexBn = array();
foreach($arrOrder as $order) {
$shopexBn[] = $fxwData[$order['order_id']]['dealer_order_id'] ? $fxwData[$order['order_id']]['dealer_order_id'] : $order['order_bn'];
}
return $shopexBn;
}
private function _getTbfxBn($arrOrder) {
$tbfx = app::get('ome')->model('tbfx_orders')->getList('*', array('order_id'=>array_keys($arrOrder)));
$tbfxData = array();
foreach($tbfx as $val) {
$tbfxData[$val['order_id']] = $val;
}
$tbfxBn = array();
foreach ($arrOrder as $order) {
$tbfxBn[] = $tbfxData[$order['order_id']]['tc_order_id'] ? $tbfxData[$order['order_id']]['tc_order_id'] : $order['order_bn'];
}
return $tbfxBn;
}
/**
* 获取GoodsDesc
* @param mixed $delivery_id ID
* @return mixed 返回结果
*/
public function getGoodsDesc($delivery_id)
{
$basicMaterialObj = app::get('material')->model('basic_material');
$extMaterialMdl = app::get('material')->model('basic_material_ext');
$goodsTypeMdl = app::get('ome')->model('goods_type');
$items = $this->getDeliveryItems($delivery_id);
$product_ids = array_column($items, 'product_id');
//ext
$extList = $extMaterialMdl->getlist('cat_id', array('bm_id'=>$product_ids));
$catIds = array_column($extList, 'cat_id');
//type
$typeList = $goodsTypeMdl->getList('type_id,name', array('type_id'=>$catIds));
if($typeList){
return $typeList[0]['name'];
}
}
}