mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-23 02:45:33 +08:00
443 lines
17 KiB
PHP
443 lines
17 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.
|
|
*/
|
|
|
|
class wap_ctl_store extends wap_controller
|
|
{
|
|
var $delivery_link = array();
|
|
|
|
function __construct($app)
|
|
{
|
|
parent::__construct($app);
|
|
|
|
//供货管理
|
|
$this->delivery_link['supply'] = app::get('wap')->router()->gen_url(array('ctl'=>'branch_product','act'=>'index'), true);
|
|
|
|
//门店库存
|
|
$this->delivery_link['stock'] = app::get('wap')->router()->gen_url(array('ctl'=>'store','act'=>'stock'), true);
|
|
|
|
//设置
|
|
$this->delivery_link['ajaxSetting'] = app::get('wap')->router()->gen_url(array('ctl'=>'store','act'=>'ajaxSetting'), true);
|
|
|
|
//店铺数据
|
|
$this->delivery_link['statistics'] = app::get('wap')->router()->gen_url(array('ctl'=>'store','act'=>'statistics'), true);
|
|
|
|
$this->pagedata['delivery_link'] = $this->delivery_link;
|
|
}
|
|
|
|
function index()
|
|
{
|
|
|
|
$orderWaitPickupUrl = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'index?view=wait_pickup'), true);
|
|
|
|
$menu_list_new = array(
|
|
'wap_order_index' => array('menuName' => '订单列表', 'linkUrl' => $this->delivery_link['order_index'], 'ico' => 'icon-order.png', 'key' => 1),
|
|
|
|
'wap_aftersale_returnproduct'=>array('menuName'=>'门店退货', 'linkUrl'=>$this->delivery_link['aftersale_returnproduct'], 'ico'=>'icon-return.png', 'key'=>2),
|
|
'wap_store_stock'=>array('menuName'=>'门店库存', 'linkUrl'=>$this->delivery_link['stock'], 'ico'=>'icon-order.png', 'key'=>3),
|
|
|
|
);
|
|
|
|
#管理员信息
|
|
$userInfo = kernel::single('ome_func')->getDesktopUser();
|
|
|
|
#授权门店
|
|
$is_super = kernel::single('desktop_user')->is_super();
|
|
if(!$is_super){
|
|
$branchObj = kernel::single('o2o_store_branch');
|
|
$branch_ids = $branchObj->getO2OBranchByUser(true);
|
|
|
|
$storeObj = app::get('o2o')->model('store');
|
|
$storeInfo = $storeObj->getList('store_id, store_bn, name, addr, branch_id', array('branch_id'=>$branch_ids), 0, 1, 'create_time desc');
|
|
$storeInfo = $storeInfo[0];
|
|
|
|
$userInfo = array_merge((array)$userInfo, (array)$storeInfo);
|
|
}
|
|
$this->pagedata['userInfo'] = $userInfo;
|
|
|
|
//读取统计数据
|
|
$wapDeliveryLib = kernel::single('wap_delivery');
|
|
if ($storeInfo) {
|
|
$statistic = $wapDeliveryLib->getStoreStatistic($storeInfo);
|
|
}
|
|
|
|
#操作员拥有的导航栏目
|
|
$show_menu = array();
|
|
foreach ($this->user_menu as $key => $val)
|
|
{
|
|
if(isset($menu_list_new[$val]))
|
|
{
|
|
$menu_list_new[$val]['count'] = isset($statistic[$val]) ? $statistic[$val] : 0;
|
|
$key_id = $menu_list_new[$val]['key'];
|
|
$show_menu[$key_id] = $menu_list_new[$val];
|
|
}
|
|
}
|
|
|
|
//菜单以Key键值排序
|
|
ksort($show_menu);
|
|
$this->pagedata['menu_list'] = $show_menu;
|
|
|
|
#if(empty($statistic) || $_SESSION['login_flag'])
|
|
#{
|
|
# //task任务更新统计数据
|
|
# $wapDeliveryLib = kernel::single('wap_delivery');
|
|
# $wapDeliveryLib->taskmgr_statistic('all');
|
|
#
|
|
# $statistic = $wapDeliveryLib->fetchDataFromCache();
|
|
#
|
|
# unset($_SESSION['login_flag']);
|
|
#}
|
|
$this->pagedata['count_data'] = $statistic;
|
|
|
|
$this->display('store/index.html');
|
|
}
|
|
|
|
function setting()
|
|
{
|
|
$userLib = kernel::single('desktop_user');
|
|
$op_id = $userLib->get_id();
|
|
|
|
//根据当前管理员获取负责管理的门店信息
|
|
$branchObj = kernel::single('o2o_store_branch');
|
|
$branch_ids = $branchObj->getO2OBranchByUser(true);
|
|
if(empty($branch_ids))
|
|
{
|
|
$this->pagedata['link_url'] = $this->delivery_link['index'];
|
|
$this->pagedata['error_msg'] = '当前店员没有门店的管理权限';
|
|
echo $this->fetch('auth_error.html');
|
|
exit;
|
|
}
|
|
|
|
//门店信息
|
|
$storeObj = app::get('o2o')->model('store');
|
|
$store_item = $storeObj->dump(array('branch_id'=>$branch_ids), 'store_id,store_bn,name,self_pick,distribution, is_ctrl_store');
|
|
|
|
$this->pagedata['store'] = $store_item;
|
|
$this->menu['logout'] = $this->delivery_link['logout'];
|
|
$this->menu['confirm'] = $this->delivery_link['confirm'];
|
|
$this->menu['ajaxSetting'] = $this->delivery_link['ajaxSetting'];
|
|
$this->pagedata['menu'] = $this->menu;
|
|
|
|
$this->display('store/setting.html');
|
|
}
|
|
|
|
function ajaxSetting()
|
|
{
|
|
$store_id = intval($_POST['store_id']);
|
|
$self_pick = $_POST['self_pick'];
|
|
$distribution = $_POST['distribution'];
|
|
$is_ctrl_store = $_POST['is_ctrl_store'];
|
|
|
|
if(empty($store_id))
|
|
{
|
|
echo json_encode(array('error'=>true, 'message'=>'无效操作', 'redirect'=>null));
|
|
exit;
|
|
}
|
|
|
|
$self_pick = ($self_pick == 'on' ? 1 : 2);
|
|
$distribution = ($distribution == 'on' ? 1 : 2);
|
|
$is_ctrl_store = ($is_ctrl_store == 'on' ? 1 : 2);
|
|
|
|
$storeObj = app::get('o2o')->model('store');
|
|
$store_info = $storeObj->dump(array('store_id'=>$store_id), 'store_id,store_bn,name,self_pick,distribution');
|
|
if(!$store_info)
|
|
{
|
|
echo json_encode(array('error'=>true, 'message'=>'门店不存在', 'redirect'=>null));
|
|
exit;
|
|
}
|
|
|
|
$update_data = array(
|
|
'self_pick' => $self_pick,
|
|
'distribution' => $distribution,
|
|
'is_ctrl_store' => $is_ctrl_store,
|
|
);
|
|
$affect_row = $storeObj->update($update_data,array('store_id'=>$store_id));
|
|
|
|
if(!$affect_row){
|
|
echo json_encode(array('error'=>true, 'message'=>'设置失败', 'redirect'=>null));
|
|
exit;
|
|
}else{
|
|
echo json_encode(array('success'=>true, 'message'=>'设置成功', 'redirect'=>$this->delivery_link['index']));
|
|
exit;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* [列表]门店库存
|
|
*/
|
|
function stock()
|
|
{
|
|
$basicMStockFreezeLib = kernel::single('material_basic_material_stock_freeze');
|
|
$proStoreObj = app::get('ome')->model('branch_product');
|
|
|
|
$page = intval($_POST['page']) ? intval($_POST['page']) : 0;
|
|
$limit = 10;//默认显示10条
|
|
$offset = $limit * $page;
|
|
|
|
$where = '1';
|
|
|
|
$is_super = kernel::single('desktop_user')->is_super();
|
|
if(!$is_super)
|
|
{
|
|
$branchObj = kernel::single('o2o_store_branch');
|
|
$branch_ids = $branchObj->getO2OBranchByUser(true);
|
|
$branch_ids = $branchObj->getO2omanbranchs($branch_ids);
|
|
if(empty($branch_ids))
|
|
{
|
|
$this->pagedata['link_url'] = $this->delivery_link['index'];
|
|
$this->pagedata['error_msg'] = '操作员没有管辖的仓库';
|
|
echo $this->fetch('auth_error.html');
|
|
exit;
|
|
}
|
|
|
|
$where .= " AND a.branch_id in(". implode(',', $branch_ids) .")";
|
|
}
|
|
|
|
//搜索条件
|
|
if($_POST['sel_type'] && $_POST['sel_keywords'])
|
|
{
|
|
$keywords = htmlspecialchars(trim($_POST['sel_keywords']));
|
|
switch ($_POST['sel_type'])
|
|
{
|
|
case 'item_bn':
|
|
$where .= " AND b.material_bn='". $keywords ."'";
|
|
break;
|
|
case 'item_name':
|
|
$where .= " AND b.material_name like'%". $keywords ."%'";
|
|
break;
|
|
}
|
|
$this->pagedata['sel_type'] = $_POST['sel_type'];
|
|
$this->pagedata['sel_keywords'] = $keywords;
|
|
}
|
|
|
|
$c_sql = "SELECT count(*) AS num FROM sdb_ome_branch_product AS a LEFT JOIN sdb_material_basic_material AS b ON a.product_id=b.bm_id WHERE ". $where;
|
|
$count = $proStoreObj->db->selectrow($c_sql);
|
|
$count = $count['num'];
|
|
|
|
$sql = "SELECT a.id, a.product_id as bm_id, a.branch_id, a.store, a.store_freeze, b.material_bn, b.material_name
|
|
FROM sdb_ome_branch_product AS a
|
|
LEFT JOIN sdb_material_basic_material AS b ON a.product_id=b.bm_id WHERE ". $where ."
|
|
ORDER BY a.last_modified DESC LIMIT ". $offset .",". $limit;
|
|
|
|
$dataList = $proStoreObj->db->select($sql);
|
|
|
|
//根据门店仓库ID、基础物料ID获取该物料门店仓库级的预占
|
|
if($dataList)
|
|
{
|
|
foreach ($dataList as $key => $val)
|
|
{
|
|
$val['store_freeze'] = $basicMStockFreezeLib->getO2oBranchFreeze($val['bm_id'], $val['branch_id']);
|
|
|
|
$dataList[$key] = $val;
|
|
}
|
|
}
|
|
|
|
$this->pagedata['dataList'] = $dataList;
|
|
$this->pagedata['pageSize'] = ceil($count / $limit);
|
|
$this->pagedata['link_url'] = $this->delivery_link['stock'];
|
|
$this->pagedata['stock_url'] = app::get('wap')->router()->gen_url(array('ctl'=>'store','act'=>'editStock'), true);
|
|
|
|
if($offset > 0)
|
|
{
|
|
//Ajax加载更多
|
|
$this->display('store/stock_more.html');
|
|
}
|
|
else
|
|
{
|
|
$this->display('store/stock.html');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* [编辑]门店库存
|
|
*/
|
|
function editStock()
|
|
{
|
|
if(empty($_POST['store']) || !is_array($_POST['store']))
|
|
{
|
|
echo json_encode(array('error'=>true, 'message'=>'没有提交有效数据...', 'redirect'=>$this->delivery_link['stock']));
|
|
exit;
|
|
}
|
|
|
|
$proStoreObj = app::get('ome')->model('branch_product');
|
|
$storeObj = app::get('o2o')->model('store');
|
|
$basic_materialMdl = app::get('material')->model('basic_material');
|
|
$is_super = kernel::single('desktop_user')->is_super();
|
|
if(!$is_super)
|
|
{
|
|
$branchObj = kernel::single('o2o_store_branch');
|
|
$branch_ids = $branchObj->getO2OBranchByUser(true);
|
|
$branch_ids = $branchObj->getO2omanbranchs($branch_ids);
|
|
if(empty($branch_ids))
|
|
{
|
|
echo json_encode(array('error'=>true, 'message'=>'操作员没有管辖的仓库', 'redirect'=>$this->delivery_link['stock']));
|
|
exit;
|
|
}
|
|
|
|
$storeInfo = $storeObj->dump(array('branch_id'=>$branch_ids), 'store_id, store_bn, name');
|
|
}
|
|
|
|
|
|
//检查数据
|
|
$bm_store = array();
|
|
foreach ($_POST['store'] as $key => $val)
|
|
{
|
|
if(!empty($key) && trim($val) != '')
|
|
{
|
|
$row = $proStoreObj->dump(array('id'=>$key, 'branch_id'=>$branch_ids), 'id, store,product_id');
|
|
|
|
|
|
if($row && $val!=$row['store'])
|
|
{
|
|
$product_id = $row['product_id'];
|
|
|
|
$material = $basic_materialMdl->db_dump(['bm_id'=>$product_id], 'bm_id,material_bn');
|
|
$bm_store[$key] = array(
|
|
'store' =>$val,
|
|
'old_store' =>$row['store'],
|
|
'nums' =>$val-$row['store'],
|
|
'bn' => $material['material_bn'],
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
//保存数据
|
|
if($bm_store)
|
|
{
|
|
$items = array();
|
|
|
|
foreach ($bm_store as $key => $val)
|
|
{
|
|
$items[] = array(
|
|
|
|
'bn' => $val['bn'],
|
|
'nums' => $val['nums'],
|
|
);
|
|
}
|
|
$items = json_encode($items);
|
|
$adjustdata = array(
|
|
'task_bn' => $storeInfo['store_bn'].date('Ymdhis'),
|
|
'store_bn' => $storeInfo['store_bn'],
|
|
'branch_bn' => $storeInfo['store_bn'],
|
|
'check_auto' => '1',
|
|
'items' => $items,
|
|
//'memo' => '库存初始化',
|
|
|
|
);
|
|
$store_id = $storeInfo['store_id'];
|
|
kernel::single('erpapi_router_response')->set_channel_id($store_id)->set_api_name('store.adjust.add')->dispatch($adjustdata);
|
|
}
|
|
|
|
echo json_encode(array('success'=>true, 'message'=>'调账成功', 'redirect'=>$this->delivery_link['stock']));
|
|
exit;
|
|
}
|
|
|
|
//店铺数据
|
|
/**
|
|
* statistics
|
|
* @return mixed 返回值
|
|
*/
|
|
public function statistics(){
|
|
|
|
$storeDaliyObj = app::get('o2o')->model('store_daliy');
|
|
$page = intval($_POST['page']) ? intval($_POST['page']) : 0;
|
|
$limit = 1;
|
|
$offset = $limit * $page;
|
|
|
|
//查询日期(默认一年之内)
|
|
$last_today = strtotime('-1 year', time());
|
|
$start_date = ($_POST['start_date'] ? $_POST['start_date'] : date('Y/m/d', $last_today));//开始日期
|
|
$end_date = ($_POST['end_date'] ? $_POST['end_date'] : date('Y/m/d', time()));//结束日期
|
|
|
|
$this->pagedata['filter'] = array('start_date'=>$start_date, 'end_date'=>$end_date);
|
|
|
|
//门店
|
|
$is_super = kernel::single('desktop_user')->is_super();
|
|
if(!$is_super)
|
|
{
|
|
$branchObj = kernel::single('o2o_store_branch');
|
|
$branch_ids = $branchObj->getO2OBranchByUser(true);
|
|
if(empty($branch_ids))
|
|
{
|
|
$this->pagedata['link_url'] = $this->delivery_link['index'];
|
|
$this->pagedata['error_msg'] = '管理员没有相应的门店权限';
|
|
echo $this->fetch('auth_error.html');
|
|
exit;
|
|
}
|
|
|
|
$branch_id = $branch_ids[0];
|
|
}
|
|
|
|
//门店信息
|
|
$storeObj = app::get('o2o')->model('store');
|
|
$storeInfo = $storeObj->dump(array('branch_id'=>$branch_id), 'store_bn');
|
|
|
|
$where = "store_bn='".$storeInfo['store_bn']."'";
|
|
|
|
//查询时间段
|
|
if($end_date && $start_date)
|
|
{
|
|
$start_date = strtotime(str_replace('/', '-', $start_date) . '00:00:00');
|
|
$end_date = strtotime(str_replace('/', '-', $end_date). '23:59:59');
|
|
|
|
if($end_date > $start_date)
|
|
{
|
|
$where .= " AND createtime>=". $start_date ." AND createtime<=". $end_date;
|
|
}
|
|
}
|
|
|
|
//搜索条件:开始时间、结束时间
|
|
$c_sql = "SELECT count(*) AS num FROM sdb_o2o_store_daliy WHERE ". $where;
|
|
$count = $storeDaliyObj->db->selectrow($c_sql);
|
|
$count = $count['num'];
|
|
|
|
$sql = "SELECT * FROM sdb_o2o_store_daliy WHERE ". $where ." ORDER BY createtime DESC LIMIT ". $offset .",". $limit;
|
|
$dataList = $storeDaliyObj->db->select($sql);
|
|
|
|
$this->pagedata['title'] = '店铺数据';
|
|
$this->pagedata['dataList'] = $dataList;
|
|
$this->pagedata['pageSize'] = ceil($count / $limit);
|
|
$this->pagedata['link_url'] = $this->delivery_link['statistics'];
|
|
|
|
if($offset > 0)
|
|
{
|
|
//Ajax加载更多
|
|
$this->display('store/statistics_more.html');
|
|
}
|
|
else
|
|
{
|
|
//合计查询结果
|
|
$sql = "SELECT sum(order_sum) as order_sum, sum(sale_sum) as sale_sum, sum(confirm_num) as confirm_num,
|
|
sum(refuse_num) as refuse_num, sum(send_num) as send_num, sum(verified_num) as verified_num
|
|
FROM sdb_o2o_store_daliy WHERE ". $where;
|
|
$selData = $storeDaliyObj->db->selectrow($sql);
|
|
|
|
$statistics['update_time'] = ($dataList[0]['createtime'] ? date('Y-m-d', $dataList[0]['createtime']) : '');//最新统计时间
|
|
$statistics['total_orders'] = intval($selData['order_sum']);
|
|
$statistics['sale_sum'] = intval($selData['sale_sum']);
|
|
$statistics['confirm_num'] = intval($selData['confirm_num']);
|
|
$statistics['refuse_num'] = intval($selData['refuse_num']);
|
|
$statistics['send_num'] = intval($selData['send_num']);
|
|
$statistics['verified_num'] = intval($selData['verified_num']);
|
|
$this->pagedata['statistics'] = $statistics;
|
|
|
|
$this->display('store/statistics.html');
|
|
}
|
|
}
|
|
|
|
|
|
} |