1. 【新增】售后单售后原因类型支持搜索

2. 【新增】手工创建订单折扣可输入正数

3. 【优化】盘点申请单确认

4. 【修复】采购退货单模拟出库失败问题

5. 【新增】订单金额客户实付与结算金额

6. 【优化】仓库发货统计报表物料名称显示

7. 【优化】自有仓储虚拟发货逻辑

8. 【修复】基础物料分类管理问题
This commit is contained in:
chenping
2026-04-01 11:59:17 +08:00
parent 9341122827
commit 61783b7d01
754 changed files with 46179 additions and 5700 deletions

View File

@@ -104,29 +104,33 @@ class erpapi_shop_matrix_360buy_request_delivery extends erpapi_shop_request_del
if ('SOPL' == $this->__channelObj->channel['addon']['type']) {
$param['package_num'] = $sdf['itemNum'];
}
// 拆单回写
$logi_no = array ();
foreach ($sdf['delivery_items'] as $key => $value) {
$logi_no[$value['logi_type']][$value['logi_no']] = $value['logi_no'];
}
foreach ($sdf['delivery_bill_list'] as $key => $value) {
if(strpos($value['logi_no'], '-')) {
continue;
if($sdf['is_split'] == 1) {
$param['package_type'] = 'break';
$packages = $this->_getPackages($sdf);
$param['packages'] = json_encode($packages);
} else {
// 拆单回写
$logi_no = array ();
foreach ($sdf['delivery_items'] as $key => $value) {
$logi_no[$value['logi_type']][$value['logi_no']] = $value['logi_no'];
}
$logi_no[$value['logi_type']][$value['logi_no']] = $value['logi_no'];
}
foreach ($logi_no as $key => $value) {
$logi_no[$key] = implode(',',(array)$value);
}
foreach ($sdf['delivery_bill_list'] as $key => $value) {
if(strpos($value['logi_no'], '-')) {
continue;
}
$logi_no[$value['logi_type']][$value['logi_no']] = $value['logi_no'];
}
if ($logi_no) {
$param['company_code'] = implode('|',array_keys($logi_no));
$param['logistics_no'] = implode('|',array_values($logi_no));
}
foreach ($logi_no as $key => $value) {
$logi_no[$key] = implode(',',(array)$value);
}
if ($logi_no) {
$param['company_code'] = implode('|',array_keys($logi_no));
$param['logistics_no'] = implode('|',array_values($logi_no));
}
}
$order_id = $sdf['orderinfo']['order_id'];
$fenxiao_order = kernel::single('ome_bill_label')->getBillLabelInfo($order_id, 'order', 'SOMS_FENXIAO');
if ($fenxiao_order) {
@@ -136,6 +140,125 @@ class erpapi_shop_matrix_360buy_request_delivery extends erpapi_shop_request_del
return $param;
}
protected function _getPackages($sdf)
{
//多包裹
$dlyPackages = array();
foreach ($sdf['delivery_package'] as $key => $val)
{
$product_bn = $val['bn'];
$logi_no = $val['logi_no'] ? $val['logi_no'] : $sdf['logi_no'];
//check
if(empty($product_bn) || empty($logi_no)){
continue;
}
//按[货号+物流单号]纬度
//@todo天猫平台一个订单有2行SKU一模一样买一赠一商品有金额多数量并且有多个不同物流单号的场景
if(isset($dlyPackages[$product_bn][$logi_no])){
$dlyPackages[$product_bn][$logi_no]['number'] += $val['number'];
}else{
$dlyPackages[$product_bn][$logi_no] = array(
'package_key' => $key,
'number' => $val['number'],
);
}
}
//按发货单明细获取包裹信息
$packageList = array();
foreach ($sdf['delivery_items'] as $itemKey => $itemVal)
{
$product_bn = $itemVal['product_bn'];
$item_number = $itemVal['number'];
$oid = $itemVal['sku_uuid'];
//check
if(empty($oid)){
continue;
}
if(empty($dlyPackages[$product_bn])){
continue;
}
//初始化打包数量
$sdf['delivery_items'][$itemKey]['pack_nums'] = 0;
//oid信息
$oidList[$oid] = array('nums'=>$itemVal['nums'], 'sendnum'=>$itemVal['sendnum']);
//一个货号有多个物流包裹的场景
foreach ($dlyPackages[$product_bn] as $logi_no => $packVal)
{
$package_key = $packVal['package_key'];
$packageInfo = $sdf['delivery_package'][$package_key];
//check
if($packVal['number'] < 1){
continue;
}
if(empty($packageInfo)){
continue;
}
//检查已经打包的数量(PKG组合商品没有sendnum字段)
if(isset($sdf['delivery_items'][$itemKey]['sendnum'])){
if($sdf['delivery_items'][$itemKey]['pack_nums'] >= $sdf['delivery_items'][$itemKey]['sendnum']){
continue;
}
}
//包裹发货数量
if($packVal['number'] >= $item_number){
$package_num = $item_number;
$dlyPackages[$product_bn][$logi_no]['number'] -= $item_number;
}else{
$package_num = $packVal['number'];
$dlyPackages[$product_bn][$logi_no]['number'] = 0;
}
//已经打包的数量
$sdf['delivery_items'][$itemKey]['pack_nums'] += $package_num;
//data
if(!isset($packageList[$logi_no])){
$packageList[$logi_no] = array(
'company_code' => $sdf['logi_type'],
'company_name' => $sdf['logi_name'],
'out_sid' => $packageInfo['logi_no'],
'goods' => array(),
);
if($sdf['logi_type'] == 'OTHER' || $sdf['logi_type'] == 'virtual_delivery'){
$packageList[$logi_no]['company_code'] = 'OTHER';
$packageList[$logi_no]['zsDelivererName'] = $sdf['logi_name'];
$packageList[$logi_no]['zsDelivererPhone'] = 12341234123;
}
}
$packageList[$logi_no]['goods'][] = array(
'num' => $package_num,
'sku_id' => $itemVal['shop_product_id'],
'sku_uuid' => $oid,
'sub_tid' => $sdf['orderinfo']['order_bn'],
);
}
}
// 调用miele service处理特定物流编码应用OTHER相同的处理逻辑
if ($service = kernel::servicelist('erpapi.service.shop.360buy.delivery.packages.format')) {
foreach ($service as $object => $instance) {
if (method_exists($instance, 'getPackageAfter')) {
$packageList = $instance->getPackageAfter($packageList, $sdf);
}
}
}
return array_values($packageList);
}
/**
* 发货回调
*

View File

@@ -166,5 +166,45 @@ class erpapi_shop_matrix_360buy_request_order extends erpapi_shop_request_order
}
return $return_data;
}
/**
* [京东700虚拟号]隐私号G组更新报备外呼主叫号码组
*
* @param array $params
* @return array
*/
public function bindSecretMobiles($params)
{
$title = '隐私号G组更新';
$original_bn = $params['order_bn'];
// check
if(empty($original_bn) || empty($params['mobile_list'])){
return $this->error('没有order_bn 或 mobile_list');
}
// mobile_list
if(is_array($params['mobile_list'])){
$json_mobile = json_encode($params['mobile_list'], JSON_UNESCAPED_UNICODE);
}else{
$json_mobile = $params['mobile_list'];
}
// params
$params = array(
'operate_type' => 'ADD_GXB_GROUP', // ADD_GXB_GROUP: 添加DELETE_GXB_GROUP: 删除
'tid' => $params['order_bn'], //订单号
'mobile_list' => $json_mobile, // JSON格式
//'virtual_id' => '', //此字段不需要传入
);
// callback
$callback = array();
// 使用矩阵透传接口请求淘宝
$result = $this->__caller->call(STORE_VIRTUAL_NUMBER_GROUP_UPDATE, $params, $callback, $title, 10, $original_bn);
return $result;
}
}