mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-23 19:05:34 +08:00
142 lines
5.4 KiB
PHP
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;
|
|
}
|
|
} |