mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-22 18:35:35 +08:00
326 lines
10 KiB
PHP
326 lines
10 KiB
PHP
<?php
|
||
/**
|
||
* Copyright © ShopeX (http://www.shopex.cn). All rights reserved.
|
||
* See LICENSE file for license details.
|
||
*/
|
||
|
||
class console_mdl_foreign_sku extends dbeav_model{
|
||
var $defaultOrder = array('sync_status,inner_sku');
|
||
|
||
function exportTemplate(){
|
||
|
||
$title = $this->import_title();
|
||
foreach($title as $k=>$v){
|
||
$title[$k] = kernel::single('base_charset')->utf2local($v);
|
||
}
|
||
|
||
return $title;
|
||
}
|
||
|
||
//定义导入文件模版字段
|
||
/**
|
||
* import_title
|
||
* @return mixed 返回值
|
||
*/
|
||
public function import_title(){
|
||
$title = array(
|
||
'*:货品编码',
|
||
'*:货品名称',
|
||
'*:wms物料编码',
|
||
'*:外部oms物料编码',
|
||
);
|
||
|
||
return $title;
|
||
}
|
||
|
||
/**
|
||
* 搜索Options
|
||
* @return mixed 返回值
|
||
*/
|
||
public function searchOptions(){
|
||
return array(
|
||
'inner_sku' => '基础物料编码',
|
||
'inner_sku_fuzzy' => '基础物料编码模糊',
|
||
'name' => '基础物料名称',
|
||
'outer_sku' => 'WMS物料编码',
|
||
'oms_sku' => '外部OMS物料编码',
|
||
);
|
||
}
|
||
|
||
/**
|
||
* _filter
|
||
* @param mixed $filter filter
|
||
* @param mixed $tableAlias tableAlias
|
||
* @param mixed $baseWhere baseWhere
|
||
* @return mixed 返回值
|
||
*/
|
||
public function _filter($filter,$tableAlias=null,$baseWhere=null)
|
||
{
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
|
||
if($filter['inner_sku'] && is_string($filter['inner_sku']) && strpos($filter['inner_sku'], "\n") !== false){
|
||
$filter['inner_sku'] = array_unique(array_map('trim', array_filter(explode("\n", $filter['inner_sku']))));
|
||
}
|
||
|
||
$where = ' 1 ';
|
||
if(isset($filter['name']))
|
||
{
|
||
$products = $basicMaterialObj->dump(array('material_name'=>$filter['name']), 'bm_id, material_bn');
|
||
|
||
$product_id = $products['bm_id'];
|
||
|
||
$where .= " AND inner_product_id = '".$product_id."'";
|
||
unset($filter['name']);
|
||
}
|
||
|
||
//商品品牌处理
|
||
if(isset($filter['brand_id']))
|
||
{
|
||
$sql = "select bm_id from sdb_material_basic_material_ext where brand_id=". $filter['brand_id'];
|
||
$products_tmp = kernel::database()->select($sql);
|
||
$products = array();
|
||
|
||
if($products_tmp)
|
||
{
|
||
foreach($products_tmp as $extVal)
|
||
{
|
||
$products[] = $extVal['bm_id'];
|
||
}
|
||
$where .= " AND inner_product_id in (".implode($products,',').")";
|
||
}
|
||
unset($filter['brand_id']);
|
||
}
|
||
|
||
if (isset($filter['inner_sku_fuzzy'])) {
|
||
if ($filter['inner_sku_fuzzy'] != '' && !is_null($filter['inner_sku_fuzzy'])) {
|
||
$baseWhere[] = sprintf(' inner_sku like "%%%s%%" ', addslashes($filter['inner_sku_fuzzy']));
|
||
}
|
||
unset($filter['inner_sku_fuzzy']);
|
||
}
|
||
|
||
return parent::_filter($filter,$tableAlias,$baseWhere)." AND ".$where;
|
||
}
|
||
|
||
/**
|
||
* modifier_sync_status
|
||
* @param mixed $row row
|
||
* @return mixed 返回值
|
||
*/
|
||
public function modifier_sync_status($row){
|
||
$row_name = $this->get_sync_name($row);
|
||
if($row == '4'){
|
||
$render = kernel::single("base_render");
|
||
$msg = '此商品同步成功后,被编辑过,用户可与仓库协商,编辑后的商品是否需要再次进行同步';
|
||
$rs = kernel::single('desktop_view_helper')->block_help('',$msg,$render);
|
||
$data =$row_name."<div style='float:right'>".$rs."</div>";
|
||
}else{
|
||
$data = $row_name;
|
||
}
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 获取_sync_name
|
||
* @param mixed $sync_status sync_status
|
||
* @return mixed 返回结果
|
||
*/
|
||
public function get_sync_name($sync_status){
|
||
switch($sync_status){
|
||
case 0:
|
||
$name = '未同步';
|
||
break;
|
||
case 1:
|
||
$name = '同步失败';
|
||
break;
|
||
case 2:
|
||
$name = '同步中';
|
||
break;
|
||
case 3:
|
||
$name = '同步成功';
|
||
break;
|
||
case 4:
|
||
$name = '同步后编辑';
|
||
break;
|
||
}
|
||
return $name;
|
||
}
|
||
|
||
function prepared_import_csv(){
|
||
set_time_limit(0);
|
||
$this->ioObj->cacheTime = time();
|
||
$this->kvdata = '';
|
||
$this->aa = 0;
|
||
}
|
||
|
||
function finish_import_csv(){
|
||
$data = $this->kvdata;
|
||
$queueObj = app::get('base')->model('queue');
|
||
unset($this->kvdata);
|
||
$queueData = array(
|
||
'queue_title'=>'货品分配导入',
|
||
'start_time'=>time(),
|
||
'params'=>array(
|
||
'sdfdata'=>$data['sku']['contents'],
|
||
'app' => 'console',
|
||
'mdl' => 'foreign_sku'
|
||
),
|
||
'worker'=>'console_foreignsku_import.run',
|
||
);
|
||
$queue_result = $queueObj->save($queueData);
|
||
$queueObj->flush();
|
||
return null;
|
||
}
|
||
|
||
function prepared_import_csv_row($row,$title,&$tmpl,&$mark,&$newObjFlag,&$msg)
|
||
{
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
|
||
$this->aa++;
|
||
$fileData = $this->kvdata;
|
||
$wms_id = $_POST['wms_id'];
|
||
if( !$fileData ) $fileData = array();
|
||
|
||
if($row){
|
||
if( substr($row[0],0,1) == '*' ){
|
||
|
||
}else{
|
||
|
||
//替换空格及特殊字符
|
||
$row[0] = trim($row[0]);
|
||
$row[0] = str_replace(array("'", '"'), '', $row[0]);
|
||
|
||
$row[2] = trim($row[2]);
|
||
$row[2] = str_replace(array("'", '"'), '', $row[2]);
|
||
|
||
$row[3] = trim($row[3]);
|
||
$row[3] = str_replace(array("'", '"'), '', $row[3]);
|
||
|
||
if(trim($row[0])==''){
|
||
$msg['error']='货品编码不能为空!';
|
||
return false;
|
||
}else if(trim($row[1])==''){
|
||
$msg['error']='货品名称不能为空!';
|
||
return false;
|
||
}else{
|
||
$product = $basicMaterialObj->getList('bm_id, material_bn', array('material_bn'=>$row[0]), 0, 1);
|
||
|
||
if(count($product) == '0'){
|
||
$msg['error']='货品编码在系统中不存在:'.$row[0];
|
||
return false;
|
||
}
|
||
|
||
if($wms_id=='_ALL_'){
|
||
$wms_list = kernel::single('channel_func')->getWmsChannelList();
|
||
foreach($wms_list as $v){
|
||
$wmsid_list[] = $v['wms_id'];
|
||
}
|
||
}else{
|
||
$wmsid_list[] = $wms_id;
|
||
}
|
||
|
||
//货品编码不能重复
|
||
$wfsObj = app::get('console')->model('foreign_sku');
|
||
$info = $wfsObj->getlist('inner_sku',array('inner_sku'=>$row[0],'wms_id'=>$wmsid_list));
|
||
if(count($info) != '0'){
|
||
// $msg['error'] = '货品编码已存在 ';
|
||
//return false;
|
||
}
|
||
|
||
foreach($wmsid_list as $wmsid){
|
||
$data = array(
|
||
'inner_sku' => $row[0],
|
||
'inner_product_id' => $product[0]['bm_id'],
|
||
'wms_id' => $wmsid,
|
||
'oms_sku' => $row[3],
|
||
);
|
||
|
||
if ($row[2]){
|
||
$data['outer_sku'] = $row[2];
|
||
}
|
||
$fileData['sku']['contents'][] = $data;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$this->kvdata = $fileData;
|
||
|
||
|
||
return null;
|
||
}
|
||
|
||
|
||
/**
|
||
* 返回商品外部sku
|
||
* @param
|
||
* @return
|
||
* @access public
|
||
* @author sunjing@shopex.cn
|
||
*/
|
||
function get_product_outer_sku( $wms_id,$bn )
|
||
{
|
||
|
||
$oForeign_sku = $this->dump(array('inner_sku'=>$bn,'wms_id'=>$wms_id),'outer_sku');
|
||
return $oForeign_sku['outer_sku'];
|
||
}
|
||
|
||
|
||
/**
|
||
* 返回商品内部sku
|
||
* @param bn
|
||
* @return
|
||
* @access public
|
||
* @author sunjing@shopex.cn
|
||
*/
|
||
function get_product_inner_sku( $wms_id,$bn )
|
||
{
|
||
|
||
$oForeign_sku = $this->dump(array('outer_sku'=>$bn,'wms_id'=>$wms_id),'inner_sku');
|
||
return $oForeign_sku['inner_sku'];
|
||
}
|
||
/**
|
||
* 更新货品同步状态
|
||
*/
|
||
function update_status($product_id){
|
||
$SQL = "update sdb_console_foreign_sku SET sync_status='4' WHERE inner_product_id=".$product_id." AND sync_status='3'";
|
||
$result = $this->db->exec($SQL);
|
||
|
||
}
|
||
|
||
|
||
/**
|
||
* replaceinsert
|
||
* @param mixed $data 数据
|
||
* @return mixed 返回值
|
||
*/
|
||
public function replaceinsert($data)
|
||
{
|
||
$columns = $this->schema['columns'];
|
||
|
||
$strFields=$strValue=array();
|
||
foreach ($data as $d) {
|
||
$insertValues = array();
|
||
foreach ($d as $c => $v) {
|
||
if (!isset($columns[$c])) continue;
|
||
|
||
$insertValues[$c] = $this->db->quote($v);
|
||
|
||
}
|
||
|
||
if (!$insertValues) continue;
|
||
|
||
$strValue[] = "(".implode(',',$insertValues).")";
|
||
}
|
||
|
||
$strFields = array_keys($insertValues);
|
||
|
||
if (!$strFields || !$strValue) return ;
|
||
|
||
$strFields = implode('`,`', $strFields);$strValue = implode(',', $strValue);
|
||
|
||
$sql = 'REPLACE INTO `'.$this->table_name(true).'` ( `'.$strFields.'` ) VALUES '.$strValue;
|
||
|
||
$this->db->exec($sql);
|
||
}
|
||
}
|