mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-30 20:45:33 +08:00
【新增】抖店优先发货对接
【新增】抖店优质快递对接 【新增】抖店加价发顺丰对接 【新增】抖店顺丰包邮支持协商更换物流
This commit is contained in:
@@ -15,19 +15,15 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
/**
|
||||
* @author ykm 2015-12-15
|
||||
* @describe 淘宝请求电子面单类
|
||||
* @author ykm 2026-03
|
||||
* @describe 爱库存电子面单
|
||||
*/
|
||||
class erpapi_logistics_matrix_aikucun_request_electron extends erpapi_logistics_request_electron
|
||||
{
|
||||
protected $directNum = 1;
|
||||
|
||||
/**
|
||||
* bufferRequest
|
||||
* @return mixed 返回值
|
||||
*/
|
||||
|
||||
public function bufferRequest(){
|
||||
public function bufferRequest($sdf)
|
||||
{
|
||||
return $this->directNum;
|
||||
}
|
||||
|
||||
|
||||
@@ -78,10 +78,11 @@ class erpapi_router_mapping
|
||||
'store.item.skus.add' => 'shop.goods.add',
|
||||
'ome.reissue.query' => 'shop.reissue.query',
|
||||
'ome.reissue.cancel' => 'shop.reissue.cancel',
|
||||
'qimen.taobao.erp.order.add' => 'qimen.order.add',
|
||||
'qimen.taobao.erp.order.update' => 'qimen.order.update',
|
||||
'ome.shopbee.fxordermsg' => 'shop.bookingrefund.fxordermsg', // 供销供应商订单信息同步
|
||||
'ome.reshipping.add' => 'shop.reshipping.add',
|
||||
'ome.order.tagchange' => 'shop.shopbee.tagchange',
|
||||
'qimen.taobao.erp.order.add' => 'qimen.order.add',
|
||||
'qimen.taobao.erp.order.update' => 'qimen.order.update',
|
||||
);
|
||||
|
||||
public static $_rsp_nodetype_mapping = array(
|
||||
|
||||
@@ -270,9 +270,27 @@ class erpapi_shop_matrix_luban_response_order extends erpapi_shop_response_order
|
||||
if($this->_ordersdf['extend_field']['sku_order_tag_ui']){
|
||||
foreach ($this->_ordersdf['extend_field']['sku_order_tag_ui'] as $oid => $skuVal) {
|
||||
foreach ($skuVal as $sk => $sv) {
|
||||
if ($sv['key'] == 'sf_free_shipping') {
|
||||
$this->_ordersdf['sf_free_shipping'] = 'true';
|
||||
break;
|
||||
$sv['extra'] = is_string($sv['extra']) ? json_decode($sv['extra'], true) : [];
|
||||
switch ($sv['key']) {
|
||||
case 'sf_free_shipping':
|
||||
$this->_ordersdf['sf_free_shipping'] = 'true';
|
||||
break;
|
||||
case 'PriorityDelivery':
|
||||
if ($sv['extra'] && $sv['extra']['suggestDeliveryUnix']) {
|
||||
$this->_ordersdf['latest_delivery_time'] = $sv['extra']['suggestDeliveryUnix'];
|
||||
}
|
||||
break;
|
||||
case 'high_quality_express':
|
||||
if ($sv['extra'] && $sv['extra']['express_company_code']) {
|
||||
$this->_ordersdf['biz_delivery_code'] = json_encode(is_string($sv['extra']['express_company_code']) ? [$sv['extra']['express_company_code']] : $sv['extra']['express_company_code']);
|
||||
}
|
||||
break;
|
||||
case 'paid_shunfeng_express':
|
||||
case 'paid_shunfeng_express_tk':
|
||||
|
||||
$this->_ordersdf['shipping_name'] = 'SF';
|
||||
$this->_ordersdf['assign_express_code'] = 'SF';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -280,7 +298,7 @@ class erpapi_shop_matrix_luban_response_order extends erpapi_shop_response_order
|
||||
|
||||
if ($this->_ordersdf['sf_free_shipping'] == 'true') {
|
||||
$dly = app::get('ome')->model('dly_corp')->db_dump([
|
||||
'type|in' => ['shunfeng', 'shunfengkuaiyun'],
|
||||
'type|in' => ['shunfeng', 'shunfengkuaiyun','SF'],
|
||||
'disabled' => 'false',
|
||||
]);
|
||||
if ($dly){
|
||||
|
||||
@@ -148,8 +148,15 @@ class erpapi_shop_matrix_taobao_request_delivery extends erpapi_shop_request_del
|
||||
}
|
||||
}
|
||||
|
||||
// 判断订单是否编辑过商品
|
||||
//@todo:只有平台子订单 oid 被删除且不存在对应未删除商品时,才算编辑过商品;
|
||||
$isModifyGoods = false;
|
||||
if ($sdf['orderinfo']['is_modify'] == 'true') {
|
||||
$isModifyGoods = kernel::single('ome_order')->isOrderGoodsModified($sdf['orderinfo']['order_id']);
|
||||
}
|
||||
|
||||
//[部分拆单 OR 多包裹]订单没有编辑过商品,按拆单子单回写
|
||||
if(($sdf['is_split'] == 1 || $is_packages) && $sdf['orderinfo']['is_modify'] != 'true') {
|
||||
if(($sdf['is_split'] == 1 || $is_packages) && !$isModifyGoods) {
|
||||
//按多包裹
|
||||
if($packageInfo){
|
||||
$param['packages'] = json_encode($packageInfo['packages']);
|
||||
@@ -171,7 +178,7 @@ class erpapi_shop_matrix_taobao_request_delivery extends erpapi_shop_request_del
|
||||
$param['consign_type'] = 0;
|
||||
|
||||
//订单编辑过商品
|
||||
if($sdf['orderinfo']['is_modify'] == 'true'){
|
||||
if($isModifyGoods){
|
||||
//注销oid_list子订单列表
|
||||
unset($param['oid_list']);
|
||||
|
||||
|
||||
@@ -153,8 +153,15 @@ class erpapi_shop_matrix_tmall_request_delivery extends erpapi_shop_request_deli
|
||||
}
|
||||
}
|
||||
|
||||
// 判断订单是否编辑过商品
|
||||
//@todo:只有平台子订单 oid 被删除且不存在对应未删除商品时,才算编辑过商品;
|
||||
$isModifyGoods = false;
|
||||
if ($sdf['orderinfo']['is_modify'] == 'true') {
|
||||
$isModifyGoods = kernel::single('ome_order')->isOrderGoodsModified($sdf['orderinfo']['order_id']);
|
||||
}
|
||||
|
||||
//[部分拆单 OR 多包裹]订单没有编辑过商品,按拆单子单回写
|
||||
if(($sdf['is_split'] == 1 || $is_packages) && $sdf['orderinfo']['is_modify'] != 'true') {
|
||||
if(($sdf['is_split'] == 1 || $is_packages) && !$isModifyGoods) {
|
||||
//按多包裹
|
||||
if($packageInfo){
|
||||
$param['packages'] = json_encode($packageInfo['packages']);
|
||||
@@ -176,7 +183,7 @@ class erpapi_shop_matrix_tmall_request_delivery extends erpapi_shop_request_deli
|
||||
$param['consign_type'] = 0;
|
||||
|
||||
//订单编辑过商品
|
||||
if($sdf['orderinfo']['is_modify'] == 'true'){
|
||||
if($isModifyGoods){
|
||||
//注销oid_list子订单列表
|
||||
unset($param['oid_list']);
|
||||
|
||||
|
||||
@@ -117,6 +117,10 @@ class erpapi_shop_response_plugins_order_orderextend extends erpapi_shop_respons
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($platform->_ordersdf['assign_express_code'] && is_string($platform->_ordersdf['assign_express_code'])) {
|
||||
$extend['assign_express_code'] = $platform->_ordersdf['assign_express_code'];
|
||||
}
|
||||
|
||||
// 抖店顺丰包邮,指定快递编码
|
||||
if ($platform->_ordersdf['sf_free_shipping']) {
|
||||
|
||||
@@ -32,21 +32,39 @@ class erpapi_shop_response_plugins_order_orderlabels extends erpapi_shop_respons
|
||||
foreach ($platform->_ordersdf['extend_field']['sku_order_tag_ui'] as $oid => $skuVal) {
|
||||
// 商品单标签,只要有一个商品是顺丰包邮,则整单打顺丰包邮的标签
|
||||
foreach ($skuVal as $sk => $sv) {
|
||||
if ($sv['key'] == 'sf_free_shipping') {
|
||||
$labels[] = [
|
||||
'label_code' => 'sf_free_shipping',
|
||||
// 'label_name' => '顺丰包邮',
|
||||
];
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 全款预售
|
||||
foreach ($skuVal as $sk => $sv) {
|
||||
if ($sv['key'] == 'pre_sale_label') {
|
||||
$labels[] = [
|
||||
'label_code' => 'SOMS_FULLPAY_PRESALE',
|
||||
];
|
||||
break;
|
||||
|
||||
switch ($sv['key']) {
|
||||
case 'sf_free_shipping':
|
||||
$labels[] = [
|
||||
'label_code' => 'sf_free_shipping',
|
||||
];
|
||||
break;
|
||||
case 'pre_sale_label':
|
||||
$labels[] = [
|
||||
'label_code' => 'SOMS_FULLPAY_PRESALE',
|
||||
];
|
||||
break;
|
||||
case 'PriorityDelivery':
|
||||
$labels[] = [
|
||||
'label_code' => 'priority_delivery',
|
||||
];
|
||||
break;
|
||||
case 'high_quality_express':
|
||||
$labels[] = [
|
||||
'label_code' => 'SOMS_HIGH_EXPRESS',
|
||||
];
|
||||
case 'paid_shunfeng_express':
|
||||
$labels[] = [
|
||||
'label_code' => 'SOMS_PAID_EXPRESS',
|
||||
'label_value' => 0x0001,
|
||||
];
|
||||
break;
|
||||
case 'paid_shunfeng_express_tk':
|
||||
$labels[] = [
|
||||
'label_code' => 'SOMS_PAID_EXPRESS',
|
||||
'label_value' => 0x0002,
|
||||
];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
111
app/erpapi/lib/shop/response/process/shopbee.php
Normal file
111
app/erpapi/lib/shop/response/process/shopbee.php
Normal file
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
/**
|
||||
* Shopbee 供销订单异步消息(标签变更等)
|
||||
*/
|
||||
class erpapi_shop_response_process_shopbee
|
||||
{
|
||||
public function tagchange($params)
|
||||
{
|
||||
if (empty($params['order_id']) || empty($params['tag_key'])) {
|
||||
return array('rsp' => 'fail', 'msg' => '参数不完整');
|
||||
}
|
||||
|
||||
|
||||
switch ($params['tag_key']) {
|
||||
case 'sku_logistics_extra_info':
|
||||
return $this->_handleShowSFFreeShippingTag($params['order_id'], $params['tag_info']);
|
||||
case 'shop_priority_delivery':
|
||||
return $this->_handleShopPriorityDelivery($params['order_id'], $params['tag_info']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
return array('rsp' => 'succ', 'msg' => '顺丰包邮标与白名单已更新');
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理顺丰包邮标签与白名单
|
||||
* @param int $orderId
|
||||
* @return array
|
||||
*/
|
||||
private function _handleShowSFFreeShippingTag($orderId, $tagInfo)
|
||||
{
|
||||
$ModifyInfo = $tagInfo['ModifyInfo'] ?? '';
|
||||
if (is_string($ModifyInfo)) {
|
||||
$ModifyInfo = json_decode($ModifyInfo, true);
|
||||
}
|
||||
|
||||
$HighQualityExpressInfo = $tagInfo['HighQualityExpressInfo'] ?? '';
|
||||
if (is_string($HighQualityExpressInfo)) {
|
||||
$HighQualityExpressInfo = json_decode($HighQualityExpressInfo, true);
|
||||
}
|
||||
|
||||
// 打顺丰包邮标签
|
||||
if ($tagInfo['ShowHighQualityExpressTag'] == 1){
|
||||
$err = null;
|
||||
kernel::single('ome_bill_label')->markBillLabel($orderId, '', 'sf_free_shipping', 'order', $err, 0, $tagInfo);
|
||||
|
||||
// 更新order_extend表white_delivery_cps
|
||||
$orderExtendMdl = app::get('ome')->model('order_extend');
|
||||
|
||||
$upData = [
|
||||
'assign_express_code' => 'SF',
|
||||
];
|
||||
|
||||
if (is_array($ModifyInfo) && $ModifyInfo['support_all_delivery'] == 1){
|
||||
$upData['assign_express_code'] = '';
|
||||
}
|
||||
|
||||
$orderExtendMdl->update(
|
||||
$upData,
|
||||
array('order_id' => $orderId)
|
||||
);
|
||||
}
|
||||
|
||||
// 打优质快递标签
|
||||
if ($HighQualityExpressInfo && $HighQualityExpressInfo['enable'] == 1){
|
||||
$err = null;
|
||||
kernel::single('ome_bill_label')->markBillLabel($orderId, '', 'SOMS_HIGH_EXPRESS', 'order', $err, 0, $tagInfo);
|
||||
|
||||
if ($HighQualityExpressInfo['express_company_code']){
|
||||
$biz_delivery_code = is_string($HighQualityExpressInfo['express_company_code']) ? [$HighQualityExpressInfo['express_company_code']] : $HighQualityExpressInfo['express_company_code'];
|
||||
$orderExtendMdl->update(
|
||||
[
|
||||
'biz_delivery_code' => json_encode($biz_delivery_code),
|
||||
],
|
||||
['order_id' => $orderId]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理优先发货标签
|
||||
* @param int $orderId
|
||||
* @return array
|
||||
*/
|
||||
private function _handleShopPriorityDelivery($orderId, $tagInfo)
|
||||
{
|
||||
if ($tagInfo['isShow'] != 1) {
|
||||
return array('rsp' => 'succ', 'msg' => '无需处理');
|
||||
}
|
||||
|
||||
// 打顺丰包邮标签
|
||||
$err = null;
|
||||
kernel::single('ome_bill_label')->markBillLabel($orderId, '', 'priority_delivery', 'order', $err, 0, $tagInfo);
|
||||
|
||||
|
||||
if ($tagInfo['suggestDeliveryUnix']) {
|
||||
// 更新order_extend表latest_delivery_time
|
||||
$orderExtendMdl = app::get('ome')->model('order_extend');
|
||||
|
||||
$upData = [
|
||||
'latest_delivery_time' => $tagInfo['suggestDeliveryUnix'],
|
||||
];
|
||||
|
||||
$orderExtendMdl->update($upData, ['order_id' => $orderId]);
|
||||
}
|
||||
|
||||
return array('rsp' => 'succ', 'msg' => '优先发货标已打');
|
||||
}
|
||||
}
|
||||
45
app/erpapi/lib/shop/response/shopbee.php
Normal file
45
app/erpapi/lib/shop/response/shopbee.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
class erpapi_shop_response_shopbee extends erpapi_shop_response_abstract {
|
||||
|
||||
/**
|
||||
* 订单标签变更
|
||||
* @param array $params
|
||||
* @return array|false
|
||||
*/
|
||||
public function tagchange($params){
|
||||
// 原有的预约退款逻辑
|
||||
$this->__apilog['title'] = '订单标签变更';
|
||||
$this->__apilog['original_bn'] = $params['tid'];
|
||||
|
||||
// tag_key加个白名单,目前只支持sku_logistics_extra_info
|
||||
$white_list = ['sku_logistics_extra_info', 'shop_priority_delivery'];
|
||||
if (!in_array($params['tag_key'], $white_list)) {
|
||||
$this->__apilog['result']['msg'] = '不支持的标签类型';
|
||||
return false;
|
||||
}
|
||||
|
||||
$shop_id = $this->__channelObj->channel['shop_id'];
|
||||
$order_bn = $params['tid'];
|
||||
if (!$order_bn) {
|
||||
$this->__apilog['result']['msg'] = '订单号(tid)为空';
|
||||
return false;
|
||||
}
|
||||
$order = $this->getOrder('order_id,order_bn', $shop_id, $order_bn);
|
||||
if (!$order) {
|
||||
$this->__apilog['result']['msg'] = '订单不存在';
|
||||
return false;
|
||||
}
|
||||
|
||||
$tagInfoRaw = $params['tag_info'] ? json_decode($params['tag_info'], true) : [];
|
||||
|
||||
$sdf = [
|
||||
'order_id' => $order['order_id'],
|
||||
'order_bn' => $order['order_bn'],
|
||||
'shop_id' => $this->__channelObj->channel['shop_id'],
|
||||
'tag_key' => $params['tag_key'],
|
||||
'tag_info' => $tagInfoRaw ?? [],
|
||||
];
|
||||
|
||||
return $sdf;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user