Files
OMS/app/omeauto/lib/split/sku.php
2026-01-04 19:08:31 +08:00

142 lines
5.4 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: yaokangming
* @Version: 1.0
* @DateTime: 2020/7/14 10:03:32
* @describe: 拆单商品, 一个一单
* ============================
*/
class omeauto_split_sku extends omeauto_split_abstract {
#拆单规则配置获取数据
/**
* 获取Special
* @return mixed 返回结果
*/
public function getSpecial() {
return array();
}
#拆单规则保存前处理
/**
* preSaveSdf
* @param mixed $sdf sdf
* @return mixed 返回值
*/
public function preSaveSdf(&$sdf) {
$splitNum = $sdf['split_config']['split_goods_num'];
if($splitNum != 'all' && $splitNum < 1) {
return array(false, '拆分数量请输入正整数或all');
}
if($sdf['split_config']['split_goods'] == '2' && empty($sdf['split_config']['split_goods_product'])) {
return array(false, '请输入基础物料');
}
return array(true, '保存成功');
}
#拆分订单
/**
* splitOrder
* @param mixed $group group
* @param mixed $splitConfig 配置
* @return mixed 返回值
*/
public function splitOrder(&$group, $splitConfig){
$arrOrder = $group->getOrders();
$arrOrderId = array();
$splitSkuKind = $this->getSplitSkuKind($arrOrder, $splitConfig);
if(empty($splitSkuKind)) {
return array(false, '无需拆单');
}
foreach ($arrOrder as $ok => $order) {
$arrOrderId[] = $order['order_id'];
if($order['order_id'] != $splitSkuKind['order_id']) {
continue;
}
$splitOrder = array();
$splitOrder[$ok] = $order;
$splitOrder[$ok]['objects'] = $splitSkuKind['objects'];
}
if($arrOrderId) {
$group->setSplitOrderId($arrOrderId);
}
$group->updateOrderInfo($splitOrder);
if (empty($splitOrder)) {
return array(false, '无法拆单');
}
return array(true);
}
protected function getSplitSkuKind($arrOrder, $splitConfig){
$no_split = array();
foreach ($arrOrder as $ok => $order) {
foreach ($order['objects'] as $objKey =>$object) {
foreach ($object['items'] as $k => $item) {
$item['original_num'] = $item['nums'];
$item['nums'] = $item['original_num'] - $item['split_num'];
if($item['nums'] < 1) {
continue;
}
$tmpObject = array($objKey=>$object);
$tmpObject[$objKey]['items'] = array($k => $item);
if($splitConfig['split_goods'] == '1') {
//指定拆分数量
if($splitConfig['split_goods_num'] != 'all') {
if($item['nums'] > $splitConfig['split_goods_num']) {
$tmpObject[$objKey]['items'][$k]['nums'] = $splitConfig['split_goods_num'];
}
}
return array('type'=>'split', 'order_id'=>$item['order_id'], 'objects'=>$tmpObject);
}
if($splitConfig['split_goods'] == '2') {
if(in_array($item['bn'], array_map('trim', explode(',', $splitConfig['split_goods_product'])))) {
//指定拆分数量
if($splitConfig['split_goods_num'] != 'all') {
if($item['nums'] > $splitConfig['split_goods_num']) {
$tmpObject[$objKey]['items'][$k]['nums'] = $splitConfig['split_goods_num'];
}
}
return array('type'=>'split', 'order_id'=>$item['order_id'], 'objects'=>$tmpObject);
}
}
if($no_split) {
if($no_split['order_id'] == $item['order_id']) {
if(!$no_split['objects'][$objKey]) {
$no_split['objects'][$objKey] = $object;
$no_split['objects'][$objKey]['items'] = array();
}
$no_split['objects'][$objKey]['items'][$k] = $item;
}
} else {
$no_split = array('type'=>'no_split', 'order_id'=>$item['order_id'], 'objects'=>$tmpObject);
}
}
}
}
return $no_split;
}
}