moduleDir = $moduleDir;
}
/**
* @param string $path a relative path to $module, must begin with /
* @param string $module
* @return array
* @throws LocalizedException
*/
protected function loadDataFromFile(string $path, string $module='Stemcell_Customer') : array
{
if (isset($this->data[$path]) && !empty($this->data[$path])) {
return $this->data[$path];
}
$file = $this->moduleDir->getDir($module).$path;
if (!file_exists($file)) {
throw new LocalizedException(__("$file not exist"));
}
$data = json_decode(file_get_contents($file), true);
if (!$data) {
throw new LocalizedException(__("$file content is not json"));
}
return $this->data[$path] = $data;
}
protected function chineseEncoding(string $str) : string
{
// return mb_convert_encoding($str, 'UTF-8', ['gb2312', 'gbk']);
return $str;
}
/**
* @param array $row original row data
* @return array data order by ['name', 'telephone', 'favorite_vehicle', 'province_id', 'city_id']
* @throws LocalizedException
*/
public function transform(array $row): array
{
$region = $this->getRegionId($row[3], $row[4]);
// $row[2] = $this->chineseEncoding($row[2]);
return [$row[0], $row[1], $this->getCarModelId($row[2]), $region[0], $region[1]];
}
/**
* @throws LocalizedException
*/
public function getRegionId(string $province, string $city)
{
$city = str_replace(' ', '', $city);
// $city = $this->chineseEncoding($city);
// $province = $this->chineseEncoding($province);
if (isset($this->regions[$city])) {
return $this->regions[$city];
}
if (mb_strlen($city) < 2) {
throw new LocalizedException(__("invalid city name: ".$city));
}
$regions = $this->loadDataFromFile('/data/pc-code.json');
foreach ($regions as $item) {
if (mb_strpos($item['name'], $province) === 0 ) {
foreach ($item['children'] as $child) {
if (mb_strpos($child['name'], $city) === 0 ) {
return $this->regions[$city] = [
str_pad($item['code'], 6, '0'),
str_pad($child['code'], 6, '0')
];
}
}
}
}
return [null, null];
}
/**
* @throws LocalizedException
*/
public function getCarModelId(string $carModel)
{
$carModel = str_replace(' ', '', $carModel);
// $carModel = $this->chineseEncoding($carModel);
$carModels = $this->loadDataFromFile('/data/car-models.json');
return $carModels[$carModel] ?? null;
}
/**
* @param string $series
* @return string | null
* @throws LocalizedException
*/
public function getCarSeriesCode(string $series): ?string
{
$series = str_replace(' ', '', $series);
// $series = $this->chineseEncoding($series);
// var_dump($series);
// echo '
';
$data = $this->loadDataFromFile('/data/car-series.json');
// var_dump($data[$series]);
// echo '
';
return $data[$series] ?? null;
}
}