Files
OMS/app/financebase/lib/abstract/io.php
2026-01-04 19:08:31 +08:00

194 lines
4.8 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.
*/
require_once ROOT_DIR.'/vendor/autoload.php';
abstract class financebase_abstract_io{
public $page_size = 500;
public $local_path = DATA_DIR.'/financebase/tmp_local/';
public $file_prefix = '';
public $file_data = array();
public $is_write_file = false;
public $data = array();
public $file_id = 1;
public $column_date_cnt = array();
public $date_time_diff = 0;
/**
* 获取Info
* @param mixed $file file
* @param mixed $sheet sheet
* @return mixed 返回结果
*/
public function getInfo($file,$sheet = 0)
{
}
/**
* 获取Data
* @param mixed $file file
* @param mixed $sheet sheet
* @param mixed $length length
* @param mixed $start start
* @param mixed $compatible_csv compatible_csv
* @return mixed 返回结果
*/
public function getData($file='',$sheet = 0,$length=0,$start=0,$compatible_csv = true)
{
$start = $start ? $start + 1 : 1;
try {
if (empty($file)) {
throw new \Exception('文件为空!');
}
if(!file_exists($file)) {
/* 转码 */
$file = iconv("utf-8", "gb2312", $file);
if(!file_exists($file)) {
throw new \Exception('文件不存在!');
}
}
$path = pathinfo($file);
$config = ['path' => $path['dirname']];
$excel = new \Vtiful\Kernel\Excel($config);
// 读取测试文件
$excel->openFile($path['basename'])
->openSheet();
$row = $excel->nextRow();
$type = array_pad([], count($row), \Vtiful\Kernel\Excel::TYPE_STRING);
foreach($this->column_date_cnt as $k => $v) {
$type[$v-1] = \Vtiful\Kernel\Excel::TYPE_TIMESTAMP;
}
$excel->setType($type);
$this->data = array();
$this->data[] = $row;
while ($length--) {
$row = $excel->nextRow();
if($row === NULL) {
break;
}
if(empty($row)) {
continue;
}
foreach($this->column_date_cnt as $k => $v) {
if($row[$v-1] && is_int($row[$v-1])) $row[$v-1] = date('Y-m-d H:i:s', $row[$v-1]);
}
$this->data[]=$row;
$this->writeData(false,$compatible_csv);
}
$this->writeData(true,$compatible_csv);
return $this->data;
} catch (\Exception $e) {
throw $e;
}
}
/**
* writeData
* @param mixed $is_force is_force
* @param mixed $compatible_csv compatible_csv
* @return mixed 返回值
*/
public function writeData($is_force = false, $compatible_csv = false )
{
if(!$this->is_write_file) return;
if(!$this->file_prefix) $this->file_prefix = md5(time());
$file_name = sprintf("%s_%d.json",$this->file_prefix,$this->file_id);
$local_file = $this->local_path.$file_name;
if( $is_force || $this->page_size <= count($this->data) )
{
if($compatible_csv)
{
$this->data = array_values($this->data);
foreach ($this->data as $k=>$v) $this->data[$k] = array_values($v);
}
if(file_put_contents($local_file, json_encode($this->data,JSON_UNESCAPED_UNICODE)))
{
$this->file_data[] = $local_file;
}
$this->data = array();
$this->file_id++;
}
}
/**
* 设置PageSize
* @param mixed $num num
* @return mixed 返回操作结果
*/
public function setPageSize($num)
{
$this->page_size = $num;
}
/**
* 设置LocalPath
* @param mixed $path path
* @return mixed 返回操作结果
*/
public function setLocalPath($path)
{
$this->local_path = $path;
}
/**
* 设置FilePrefix
* @param mixed $file_prefix file_prefix
* @return mixed 返回操作结果
*/
public function setFilePrefix($file_prefix)
{
$this->file_prefix = $file_prefix;
}
/**
* 设置WriteFile
* @param mixed $is_write_file is_write_file
* @return mixed 返回操作结果
*/
public function setWriteFile($is_write_file)
{
$this->is_write_file = $is_write_file;
}
public function setCellDateCnt($column_date_cnt=array(),$time_diff=0)
{
$this->column_date_cnt = $column_date_cnt;
$this->date_time_diff = $time_diff;
}
}