-
-
/**- * 基本的な製品情報をインポートします
- * 編集: bbs.it-home.org
- */
- public function importProductBasicInfo($data){
- include_once 'PHPExcel.php';
- include_once 'PHPExcel/IOFactory.php';
- include_once 'PHPExcel/Reader/Excel5.php';
- // エラー コレクションを定義します。
- $error = array();
- $resultInfo = null;
- $needNext = true;
- // ファイルを指定された場所にアップロードします。 server
- $ fileName = $_FILES["productinfo"]['name'];
- $filePath = CBase_Common_UploadPicture::uploadFile($data["productinfo"], 'product');
- // ファイルが正常にアップロードされた場合、 Excel のインポート操作を実行します
- if($filePath == 1) {
- $error[1] = "アップロードされたファイルは、php.ini の Upload_max_filesize オプションで制限された値を超えています";
- }else if($filePath == 4 ){
- $error[ 4] = "ファイルはアップロードされませんでした";
- }else{
- $objReader = PHPExcel_IOFactory::createReader('Excel5');
- $objReader->setReadDataOnly(true);
- $objPHPExcel = $ objReader->load( $filePath);
- $objWorksheet = $objPHPExcel->getActiveSheet();
- $highestRow = $objWorksheet->getHighestRow();
- $highestColumn = $objWorksheet->getHighestColumn();
- $highestColumnIndex = PHPExcel_Cell:: columnIndexFromString($highestColumn);
- $colums = array();
- $data = array();
- $excelAllId = array();
- $excelIdRow = array();
- $execlAllShopLinkedId = array( );
- for($ i=0;$i $cValue = トリム($objWorksheet->getCellByColumnAndRow($i,1)->getValue());
- switch ($ cValue) {
- case self::PRODUCT_SAP_CODE : $colums[$i] = "sap_code";
- case self::PRODUCT_NAME : $colums[$i] = "pname";
- case self::PRODUCT_GROUP : $colums[$i] = "product_group"; ブレーク;
- ケース self::PRODUCT_BRAND : $colums[$i] = 'product_brand'; ブレーク;
- ケース self::PRODUCT_PROXY_FLAG : $colums[$i] = "product_proxy_flag" ; ブレーク;
- ケース self::PRODUCT_BINNING : $colums[$i] = "product_binning";
- case self::PRODUCT_SELL_PICK : $colums[$i] = "product_sell_pick";
- case self::PRODUCT_ATTRIBUTE : $colums[$i] = "製品属性"; ブレーク;
- ケース self::PRODUCT_SUPPLIER_CODE : $colums[$i] = "ベンダーコード"; ブレーク;
- ケース self::PRODUCT_SUPPLY_ADDRESS : $colums[$i] = "zzwerk_code" ; ブレーク;
- case self ::PRODUCT_BATCH : $colums[$i] = "zzlgort_code"; ブレーク;
- デフォルト : $error[3] [] = $cValue; ブレーク;
- }
- }
- //基本情報かどうかを検出Excel には存在します
- $ dataCount = $highestRow - 1;
- if(count($colums) == 0) {
- $error[5] = "ヘッダーなし";
- }
- else if(!in_array('sap_code', $colums)) {
- $error[2] = "ヘッダー内の製品 SAP コードが存在しません";
- }
- else if($dataCount $error[6] = "ヘッダーには製品の SAP コードが存在しませんExcel ファイル内のデータ";
- }
- else if(count($error)==0){
- for ($i=2;$i $colkey = array_search('sap_code ');
- $shopLinkedIdValue = トリム( $objWorksheet->getCellByColumnAndRow($colkey,$i)->getValue());
- if(!$shopLinkedIdValue) {
- continue;
- }
- if(in_array($shopLinkedIdValue) ,$execlAllShopLinkedId)){
- $error [7][$shopLinkedIdValue]['duplicate'] = true;
- $error[7][$shopLinkedIdValue]['excelRow'][] = $i;
- $execlAllShopLinkedId[$ i] = $shopLinkedIdValue;
- $error [7][$shopLinkedIdValue]['noId'] = true;
- }else {
- $excelIdRow[$shopLinkedIdValue] = $i;
- $execlAllShopLinkedId[$i] = $shopLinkedIdValue;
- }
- }
- $dealMultiple = ceil($dataCount / 1000);
- $allProduct = array();
- for($i=0;$i $offset = $i*1000+2;
- $max = ($i+1)*1000+1;
- $max = ($max > $dataCount) ? $highestRow : $max;
- $allShopLinkedId = array();
- for($j=$offset; $j<=$max;$j++){
- if($execlAllShopLinkedId[$j]){
- $allShopLinkedId[] = $execlAllShopLinkedId[$j];
- }
- }
- // SAP 製品に基づいたライブラリ内のクエリコード レコードの数。
- $dbShopProducts = $this->getShopLinkedByIds($allShopLinkedId);
for($j=$offset;$j<=$max;$j++){ - $ product = array();
- for($k=0;$k<$highestColumnIndex;$k++){
- $tempV = trim($objWorksheet->getCellByColumnAndRow($k,$j)->getValue( )) ;
- if($tempV && $tempV != '') {
- $product[$colums[$k]] = $tempV;
- }
- }
- // ファイル内の SAP エンコーディングを取得します
- $id = $product[ 'sap_code'];
- if(!$id){
- continue;
- }
- //製品の SAP コードがすでに存在するかどうかを確認します
- if(!in_array($id,$dbShopProducts)){
- $allProduct[ $id] = $product;
- }else{
- $error[7][$id]['hasId'] = true;
- }
- //商品名が空かどうか
- if(!isset($product[' pname'])) {
- $error[7][$id]['emptyName'] = true;
- }
- //商品カテゴリー(商品グループ)が空かどうか
- if(!isset($product['product_group) '])){
- $error[7][$id]['emptyProductGroup'] = true;
- }
- //商品レベル(ブランド)が空かどうか
- if(!isset($product['product_brand'] )){
- $error [7][$id]['emptyProductBrand'] = true;
- }
- //代理販売フラグが空かどうか
- if(!isset($product['product_proxy_flag'])){
- $error[7][$ id]['emptyProductProxyFlag'] = true;
- }
- //梱包リストが空かどうか
- if(!isset($product['product_binning'])){
- $error[7] [$id]['emptyProductBinning '] = true;
- }
- //先に売って後で買うインジケーターが空かどうか
- if(!isset($product['product_sell_pick'])){
- $error[7][ $id]['emptyProductSellPick'] = true;
- }
- //商品属性が空かどうか
- if(!isset($product['product_attribute'])){
- $error[7][$id][' emptyProductAttribute'] = true;
- }
- / /サプライヤーコードが空かどうか
- if(!isset($product['vendor_code'])){
- $error[7][$id]['emptyVendorCode'] = true ;
- }
- //供給場所が空かどうか
- if(!isset($product['zzwerk_code'])){
- $error[7][$id]['emptyZzwerkCode'] = true;
- }
- / /ライブラリ領域が空かどうか
- if(!isset ($product['zzlgort_code'])){
- $error[7][$id]['emptyZzlgortCode'] = true;
- }
- if(isset($error) [7][$id])){
- $ error[7][$id]['excelRow'] = $j;
- }
- }
- }
- }
- }
- $resultInfo['fileName'] = $fileName ;
- //エラーメッセージを返す
- if(count( $error)>0){
- if(isset($error[1])){
- $resultInfo['type'] = 1;
- $resultInfo['msg '] = $error[1];
- }else if(isset($error[2])){
- $resultInfo['type'] = 2;
- $resultInfo['msg'] = $error[2];
- }else if(isset($error[3] )){
- $resultInfo['type'] = 3;
- $resultInfo['msg'] = 'ヘッダー ['.implode(',',$error[3] ]).'] は存在しません';
- }else if(isset($error[4])){
- $resultInfo['type'] = 4;
- $resultInfo['msg'] = $error[4];
- }else if(isset($error[6] ])){
- $resultInfo['type'] = 6;
- $resultInfo['msg'] = $error[6];
- }else if(isset($error[7])){
- $excelName = null ;
- $objPHPWriteExcel = new PHPExcel();
- $objPHPWriteExcel->getProperties()->setCreator("yuer")
- ->setLastModifiedBy("yuer")->setTitle("")->setSubject ("")
- ->setDescription("")->setKeywords("")->setCategory("");
- $prefix = substr($fileName,0,strrpos($fileName,'.') );
- $suffix = substr($fileName,strrpos($fileName,'.'));
- $excelName = date("Y_m_d_H_i_s").'_'.mt_rand(1,99).'_'.$prefix .'ErrorReport'.$suffix;
- $excelName = Base_Tool_Pinyin::getPinyin($excelName);
- $objPHPWriteExcel->setActiveSheetIndex(0);
- $activeSheet = $objPHPWriteExcel->getActiveSheet();
- $activeSheet-> ;setTitle('错误报告');
- $activeSheet->setCellValueByColumnAndRow(0,1,self::PRODUCT_SAP_CODE);
- $activeSheet->setCellValueByColumnAndRow(1,1,'原excel行号');
- $activeSheet ->setCellValueByColumnAndRow(2,1,'第几行コード存在重复');
- $activeSheet->setCellValueByColumnAndRow(3,1,self::PRODUCT_NAME);
- $activeSheet->setCellValueByColumnAndRow(4,1,self) ::PRODUCT_GROUP);
- $activeSheet->setCellValueByColumnAndRow(5,1,self::PRODUCT_BRAND);
- $activeSheet->setCellValueByColumnAndRow(6,1,self::PRODUCT_PROXY_FLAG);
- $activeSheet->setCellValueByColumnAndRow(7) ,1,self::PRODUCT_BINNING);
- $activeSheet->setCellValueByColumnAndRow(8,1,self::PRODUCT_SELL_PICK);
- $activeSheet->setCellValueByColumnAndRow(9,1,self::PRODUCT_ATTRIBUTE);
- $activeSheet-> ;setCellValueByColumnAndRow(10,1,self::PRODUCT_SUPPLIER_CODE);
- $activeSheet->setCellValueByColumnAndRow(11,1,self::PRODUCT_SUPPLY_ADDRESS);
- $activeSheet->setCellValueByColumnAndRow(12,1,self::PRODUCT_BATCH);
- $activeSheet->setCellValueByColumnAndRow(13,1,'その他の原因');
- $activeSheet->getColumnDimensionByColumn(0)->setWidth(15);
- $activeSheet->getColumnDimensionByColumn(1)->setWidth( 20);
- $activeSheet->getColumnDimensionByColumn(2)->setWidth(20);
- $activeSheet->getColumnDimensionByColumn(3)->setWidth(20);
- $activeSheet->getColumnDimensionByColumn(4)- >setWidth(20);
- $activeSheet->getColumnDimensionByColumn(5)->setWidth(20);
- $activeSheet->getColumnDimensionByColumn(6)->setWidth(20);
- $activeSheet->getColumnDimensionByColumn (7)->setWidth(20);
- $activeSheet->getColumnDimensionByColumn(8)->setWidth(20);
- $activeSheet->getColumnDimensionByColumn(9)->setWidth(20);
- $activeSheet ->getColumnDimensionByColumn(10)->setWidth(20);
- $activeSheet->getColumnDimensionByColumn(11)->setWidth(20);
- $activeSheet->getColumnDimensionByColumn(12)->setWidth(20) ;
- $activeSheet->getColumnDimensionByColumn(13)->setWidth(20);
- $writeExcelIndex = 2;
- foreach ($error[7] as $pId=>$pInfo){
- if(isset($pInfo) ['hasId'])){
- $activeSheet->setCellValueByColumnAndRow(0,$writeExcelIndex,$pId.'-此供应商编码已经存在');
- } else {
- $activeSheet->setCellValueByColumnAndRow(0,$ writeExcelIndex,$pId);
- }
- $activeSheet->setCellValueByColumnAndRow(1,$writeExcelIndex,$pInfo['excelRow']);
- if(isset($pInfo['duplicate'])){
- $activeSheet-> ;setCellValueByColumnAndRow(2,$writeExcelIndex,$excelIdRow[$pId]);
- }
- if(isset($pInfo['emptyName'])){
- $activeSheet->setCellValueByColumnAndRow(3,$writeExcelIndex,'-のため空');
- }
- if(isset($pInfo['emptyProductGroup'])){
- $activeSheet->setCellValueByColumnAndRow(4,$writeExcelIndex,'-である空');
- }
- if(isset($pInfo['emptyProductBrand']) ){
- $activeSheet->setCellValueByColumnAndRow(5,$writeExcelIndex,'-である空');
- }
- if(isset($pInfo['emptyProductProxyFlag'])){
- $activeSheet->setCellValueByColumnAndRow(6,$ writeExcelIndex,'-のため空');
- }
- if(isset($pInfo['emptyProductBinning'])){
- $activeSheet->setCellValueByColumnAndRow(7,$writeExcelIndex,'-のため空');
- }
- if (isset($pInfo['emptyProductSellPick'])){
- $activeSheet->setCellValueByColumnAndRow(8,$writeExcelIndex,'-である空');
- }
- if(isset($pInfo['emptyProductAttribute'])){
- $activeSheet->setCellValueByColumnAndRow(9,$writeExcelIndex,'-である空');
- }
- if(isset($pInfo['emptyVendorCode'])){
- $activeSheet->setCellValueByColumnAndRow(10,$writeExcelIndex, '-のため空');
- }
- if(isset($pInfo['emptyZzwerkCode'])){
- $activeSheet->setCellValueByColumnAndRow(11,$writeExcelIndex,'-のため空');
- }
- if(isset ($pInfo['emptyZzlgortCode'])){
- $activeSheet->setCellValueByColumnAndRow(12,$writeExcelIndex,'-のため空');
- }
if(isset($pInfo['other'])){
- $activeSheet->setCellValueByColumnAndRow(13,$writeExcelIndex,$pInfp['other']);
- }
- $writeExcelIndex++;
- }
- $objWriter = PHPExcel_IOFactory: :createWriter($objPHPWriteExcel, 'Excel5');
- $excelPath = FILE_PATH.DS.'フィードバック'.DS.$excelName;
- $objWriter->save($excelPath);
- $resultInfo['type'] = 7 ;
- $resultInfo['msg'] = $fileName."文件中に存在错误";
- $resultInfo['errorReport'] = $excelName;
- // 日志操作,暂時空着
- }
- }else{
- //导入架
- $logIds = '';
- $i = 0;
- foreach ($allProduct as $pId => $pInfo){
- $updateProductSql = 'yr_product set に挿入 ';
- if(isset($pInfo[' pname']) && trim($pInfo['pname'])){
- $updateProductSql = $updateProductSql.'pname=''.str_replace(''','''',$pInfo['pname'])。 '',';
- }
- //如果SAP编码不足18位,则用0从左开始补全
- if(isset($pInfo['sap_code'])){
- if(strlen($pInfo['sap_code] '])<18){
- $pInfo['sap_code'] = str_pad($pInfo['sap_code'], 18, "0", STR_PAD_LEFT);
- $updateProductSql = $updateProductSql.'sap_code=''.str_replace ('','''',$pInfo['sap_code']).'',';
- }
- }
- if(isset($pInfo['product_group'])){
- $updateProductSql = $updateProductSql. 'product_group=''.$pInfo['product_group'].'',';
- }
- if(isset($pInfo['product_brand'])){
- $updateProductSql = $updateProductSql.'product_brand=''.$ pInfo['product_brand'].'',';
- }
- if(isset($pInfo['product_proxy_flag'])){
- $updateProductSql = $updateProductSql.'product_proxy_flag=''.$pInfo['product_proxy_flag']. '',';
- }
- if(isset($pInfo['product_binning'])){
- $updateProductSql = $updateProductSql.'product_binning=''.$pInfo['product_binning'].'',';
- }
- if(isset($pInfo['product_sell_pick'])){
- $updateProductSql = $updateProductSql.'product_sell_pick=''.$pInfo['product_sell_pick'].'',';
- }
- if(isset($pInfo ['product_attribute'])){
- $updateProductSql = $updateProductSql.'product_attribute=''.$pInfo['product_attribute'].'',';
- }
- if(isset($pInfo['vendor_code'])) {
- $updateProductSql = $updateProductSql.'vendor_code=''.$pInfo['vendor_code'].'',';
- }
- if(isset($pInfo['zzwerk_code'])){
- $updateProductSql = $updateProductSql .'zzwerk_code=''.$pInfo['zzwerk_code'].'',';
- }
- if(isset($pInfo['zzlgort_code'])){
- $updateProductSql = $updateProductSql.'zzlgort_code=''.$pInfo['zzlgort_code'].''';
- }
- //最終 SQL ステートメント
- $ result = $this->excuteMultiInsertSql($updateProductSql);
- }
- $resultInfo['type'] = 8;
- $resultInfo['msg'] = "基本的な製品情報を正常にインポートしました";
- < ;p> /*
- * // ログ操作。
- * $content = '新しい製品のバッチインポート操作が成功しました: インポートされた供給製品コードは ->';
- * $logData['content'] = $logIds. ;
- */
- }
- return $resultInfo;
- }
-
コードをコピー
|