Files
OMS/app/dealer/lib/business.php
2026-01-04 19:08:31 +08:00

396 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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.
*/
/**
* 经销商公共Lib方法类
*
* @author wangbiao@shopex.cn
* @version 2024.04.11
*/
class dealer_business
{
/**
* 获取操作人员的企业组织架构ID权限
* @todo获取失败或者没有权限返回-1
*
* @return array
*/
public function getOperationCosIds(&$error_msg=null)
{
//获取操作员拥有的COS列表
$result = kernel::single('organization_cos')->getCosList();
$cosIds = array();
//获取失败
if(!$result[0]){
$error_msg = '获取企业组织架失败:'. $result[1];
$cosIds = array(-1);
return [false, $cosIds];
}
//check
if($result[1] == '_ALL_'){
//超级管理员
}elseif($result[1] && is_array($result[1])){
//拥有的cos_id
$cosIds = array_column($result[1], 'cos_id');
}else{
//失败返回-1
$cosIds = array('-1');
}
return [true, $cosIds];
}
/**
* 获取经销商列表 or 指定经销商信息
*
* @param $bs_id 指定返回某个经销商信息
* @return array
*/
public function getBusiness($bs_id=0)
{
$businessMdl = app::get('dealer')->model('business');
$filter = array();
if($bs_id){
$filter['bs_id'] = $bs_id;
}
//list
$dataList = $businessMdl->getList('*', $filter);
//指定经销商信息
if($bs_id){
return is_array($dataList[0]) ? $dataList[0] : array();
}else{
return $dataList;
}
}
/**
* 获取指定经销商列表(包含贸易公司信息)
*
* @param $bs_ids
* @return array
*/
public function getAssignBusiness($bs_ids)
{
$businessMdl = app::get('dealer')->model('business');
$betcMdl = app::get('dealer')->model('betc');
//去除空值
$bs_ids = array_filter($bs_ids);
//check
if(empty($bs_ids)){
return array();
}
//list
$tempList = $businessMdl->getList('*', array('bs_id'=>$bs_ids));
if(empty($tempList)){
return array();
}
//betc_id
$betcIds = array_column($tempList, 'betc_id');
$betcIds = array_filter(explode(',', implode(',', $betcIds)));
$betcList = $betcMdl->getList('betc_id,betc_code,betc_name', array('betc_id'=>$betcIds));
$betcList = array_column($betcList, null, 'betc_id');
//format
// $dataList = array_column($dataList, null, 'bs_id');
$dataList = array();
foreach ($tempList as $key => $val)
{
$bs_id = $val['bs_id'];
//贸易公司
$betcs = array();
if($val['betc_id']){
$betcIds = explode(',', $val['betc_id']);
foreach ($betcIds as $betcKey => $betc_id)
{
if(empty($betcList[$betc_id])){
continue;
}
$betcs[$betc_id] = $betcList[$betc_id];
}
}
$val['betcs'] = $betcs;
$dataList[$bs_id] = $val;
}
return $dataList;
}
/**
* 获取店铺关联的供货仓
*
* @param $shopBns 店铺编码集合
* @return array
*/
public function getShopBranchs($shopBns)
{
$branchMdl = app::get('ome')->model('branch');
//去除空值
$shopBns = array_filter($shopBns);
//check
if(empty($shopBns)){
return array();
}
//仓库关联的店铺
$shopBranchs = app::get('ome')->getConf('shop.branch.relationship');
if(empty($shopBranchs)){
return array();
}
//获取所有主仓库
$branchList = $branchMdl->db->select("SELECT branch_id,branch_bn,name FROM sdb_ome_branch WHERE type='main' ORDER BY weight DESC");
if(empty($branchList)){
return array();
}
$branchList = array_column($branchList, null, 'branch_bn');
$dataList = array();
foreach ($shopBranchs as $shop_bn => $items)
{
if(!in_array($shop_bn, $shopBns)){
continue;
}
foreach ($items as $itemKey => $branch_bn)
{
$dataList[$shop_bn][$branch_bn] = $branchList[$branch_bn];
}
}
return $dataList;
}
/**
* 获取指定授权产品线
*
* @param $shopIds 店铺ID集合
* @return array
*/
public function getAssignSeries($shopIds)
{
$shopMdl = app::get('ome')->model('shop');
$seriesMdl = app::get('dealer')->model('series');
$seriesShopMdl = app::get('dealer')->model('series_endorse');
//去除空值
$shopIds = array_filter($shopIds);
//check
if(empty($shopIds)){
return array();
}
//list
$tempList = $seriesShopMdl->getList('*', array('shop_id'=>$shopIds));
if(empty($tempList)){
return array();
}
//shop_id
$shopIds = array_column($tempList, 'shop_id');
$shopIds = array_filter($shopIds);
$shopList = $shopMdl->getList('shop_id,shop_bn,name', array('shop_id'=>$shopIds));
$shopList = array_column($shopList, null, 'shop_id');
//shop_id
$seriesIds = array_column($tempList, 'series_id');
$seriesIds = array_filter($seriesIds);
$seriesList = $seriesMdl->getList('series_id,series_code,series_name', array('series_id'=>$seriesIds));
$seriesList = array_column($seriesList, null, 'series_id');
//format
$dataList = array();
foreach ($tempList as $key => $val)
{
$shop_id = $val['shop_id'];
$series_id = $val['series_id'];
//merge
$dataList[$shop_id][$series_id] = array(
'shop_id' => $shop_id,
'shop_bn' => $shopList[$shop_id]['shop_bn'],
'shop_name' => $shopList[$shop_id]['name'],
'series_id' => $series_id,
'series_code' => $seriesList[$series_id]['series_code'],
'series_name' => $seriesList[$series_id]['series_name'],
);
}
//unset
unset($tempList, $shopList, $seriesList);
return $dataList;
}
/**
* 获取指定经销商列表(包含贸易公司信息)
*
* @param $bs_ids
* @return array
*/
public function getAssignBetcs($betcIds=array())
{
$betcMdl = app::get('dealer')->model('betc');
//filter
$filter = array();
if($betcIds){
//去除空值
$filter['betc_id'] = array_filter($betcIds);
}
//list
$betcList = $betcMdl->getList('*', $filter);
$betcList = array_column($betcList, null, 'betc_id');
//format
foreach ($betcList as $key => $val)
{
$betc_id = $val['betc_id'];
//check
if($betcIds && !in_array($betc_id, $betcIds)){
unset($betcList[$betc_id]);
}
}
return $betcList;
}
/**
* 根据仓编码获取经销商信息
*
* 逻辑流程:
* 1. 根据branch_id去sdb_o2o_store表获取store_id和store_bn
* 2. 根据store_bn去sdb_organization_organization表获取org_no=store_bn且org_type='2'的parent_id
* 3. 用parent_id去sdb_organization_organization表查org_id=parent_id且org_type='3'的org_bn
* 4. 用org_bn去sdb_dealer_business表匹配bs_bn获取经销商信息
*
* @param int|array $branch_id 仓编码或仓编码数组
* @return array 经销商信息单个查询返回经销商数组批量查询返回以branch_id为key的数组
*/
public function getDealerByBranchId($branch_id)
{
// 参数验证
if (empty($branch_id)) {
return array();
}
// 处理批量查询
if (is_array($branch_id)) {
$branch_ids = array_filter($branch_id);
if (empty($branch_ids)) {
return array();
}
$whereCondition = "os.branch_id IN (" . implode(',', $branch_ids) . ")";
} else {
$whereCondition = "os.branch_id = {$branch_id}";
}
$sql = "
SELECT
os.branch_id,
db.*
FROM sdb_o2o_store os
INNER JOIN sdb_organization_organization oo_store ON os.store_bn = oo_store.org_no AND oo_store.org_type = '2'
INNER JOIN sdb_organization_organization oo_dealer ON oo_store.parent_id = oo_dealer.org_id AND oo_dealer.org_type = '3'
INNER JOIN sdb_dealer_business db ON oo_dealer.org_no = CONCAT('BS_', db.bs_bn)
WHERE {$whereCondition}
";
$businessMdl = app::get('dealer')->model('business');
$result = $businessMdl->db->select($sql);
// 返回结果
return is_array($branch_id)
? array_column($result, null, 'branch_id')
: (!empty($result) ? $result[0] : array());
}
/**
* 根据门店编码获取经销商信息
*
* 逻辑流程:
* 1. 根据store_bn去sdb_o2o_store表获取store_id
* 2. 根据store_bn去sdb_organization_organization表获取org_no=store_bn且org_type='2'的parent_id
* 3. 用parent_id去sdb_organization_organization表查org_id=parent_id且org_type='3'的org_no
* 4. 用org_no去sdb_dealer_business表匹配bs_bn获取经销商信息
*
* @param string|array $store_bn 门店编码或门店编码数组
* @return array 经销商信息单个查询返回经销商数组批量查询返回以store_bn为key的数组
*/
public function getDealerByStoreBn($store_bn)
{
// 参数验证
if (empty($store_bn)) {
return array();
}
// 处理批量查询
if (is_array($store_bn)) {
$store_bns = array_filter($store_bn);
if (empty($store_bns)) {
return array();
}
$whereCondition = "os.store_bn IN ('" . implode("','", $store_bns) . "')";
} else {
$whereCondition = "os.store_bn = '{$store_bn}'";
}
try {
$sql = "
SELECT
os.store_bn,
db.*
FROM sdb_o2o_store os
INNER JOIN sdb_organization_organization oo_store ON os.store_bn = oo_store.org_no AND oo_store.org_type = '2'
INNER JOIN sdb_organization_organization oo_dealer ON oo_store.parent_id = oo_dealer.org_id AND oo_dealer.org_type = '3'
INNER JOIN sdb_dealer_business db ON oo_dealer.org_no = CONCAT('BS_', db.bs_bn)
WHERE {$whereCondition}
";
$businessMdl = app::get('dealer')->model('business');
$result = $businessMdl->db->select($sql);
// 返回结果
return is_array($store_bn)
? array_column($result, null, 'store_bn')
: (!empty($result) ? $result[0] : array());
} catch (Exception $e) {
return array();
}
}
}