Files
cm-app-adm-dropship/application/models/DSAmazon_model.php

182 lines
6.4 KiB
PHP

<?php
class DSAmazon_model extends MY_Model
{
private $id;
private $asin;
private $price;
private $detail;
private $spec;
private $video_id;
private $category_id;
private $created_at;
private $currentPage = 1;
private $perPage = 100;
public function __construct()
{
parent::__construct();
}
public function selectClause()
{ }
private function getCategoryPath($categories) {
$categoryNames = [];
foreach($categories as $category) {
array_push($categoryNames, $category->title);
}
return implode(' > ', $categoryNames);
}
public function save($res)
{
$video_id = 0;
$category_id = 0;
$category = end($res->data->category);
$category->title_dp = $this->getCategoryPath($res->data->category);
$video = $res->data->description->videos;
if (!empty($category->title)) {
$query = $this->db->get_where('ds_category', ['title' => $category->title]);
if ($query->num_rows()) {
$this->db->where('id', $query->row()->id)->update('ds_category', $category);
$category_id = $query->row()->id;
} else {
$this->db->insert('ds_category', $category);
$category_id = $this->db->insert_id();
}
}
if (!empty($video->title)) {
$query = $this->db->get_where('ds_video', ['title' => $video->title]);
if ($query->num_rows()) {
$this->db->where('id', $query->row()->id)->update('ds_video', $video);
$video_id = $query->row()->id;
} else {
$this->db->insert('ds_video', $video);
$video_id = $this->db->insert_id();
}
}
$img = '';
if (!empty($res->data->img)) {
$data = explode(',', $res->data->img);
$ext = explode(';', explode('/', $data[0])[1])[0];
$targetPath = FCPATH . 'upload/amz/' . date('Y/m/d/') . $res->data->asin . '.' . $ext;
$img = '/upload/amz/' . date('Y/m/d/') . $res->data->asin . '.' . $ext;
if(!is_dir(FCPATH . 'upload/amz/' . date('Y/m/d/'))) {
mkdir(FCPATH . 'upload/amz/' . date('Y/m/d/'), 0775, true);
}
if(file_exists($targetPath)) {
unlink($targetPath);
}
$content = base64_decode($data[1]);
$file = fopen($targetPath, "wb");
fwrite($file, $content);
fclose($file);
}
$query = $this->db->get_where('ds_amazon', ['asin' => $res->data->asin]);
$this->load->model('DSAmazonOption_model', 'optionModel');
if(empty($res->data->price)) $res->data->price = 0;
if ($query->num_rows()) {
$this->db->where('asin', $res->data->asin)->update('ds_amazon', [
'title' => $res->data->title,
'stock' => $res->data->stock,
'price' => $res->data->price,
'detail' => $res->data->description->content,
'spec' => $res->data->description->spec,
'video_id' => $video_id,
'img' => $img ? $img : $query->row()->img,
'category_id' => $category_id,
'seller' => $res->data->seller->title,
'seller_uri' => empty($res->data->seller->link)?'':$res->data->seller->link
]);
if(!empty($res->colors)) {
$this->optionModel->save($res->colors, $res->colorASIN, 'color', $query->row()->id);
}
} else {
$this->db->insert('ds_amazon', [
'asin' => $res->data->asin,
'title' => $res->data->title,
'stock' => $res->data->stock,
'price' => $res->data->price,
'detail' => $res->data->description->content,
'spec' => $res->data->description->spec,
'video_id' => $video_id,
'img' => $img,
'category_id' => $category_id,
'seller' => $res->data->seller->title,
'seller_uri' => empty($res->data->seller->link)?'':$res->data->seller->link
]);
if(!empty($res->colors)) {
$this->optionModel->save($res->colors, $res->colorASIN, 'color', $this->db->insert_id());
}
}
}
public function getTable()
{
$this->dateRange = [strtotime($this->input->get('dateRange')[0]), strtotime($this->input->get('dateRange')[1])];
$this->perPage = $this->input->get('limit');
if ($this->input->get('offset')) {
$this->currentPage = $this->input->get('offset') / $this->per_page + 1;
}
$preBookingResult = $this->getTableResult();
$preBookingResultsCount = $this->getTableResultsCount();
return array('total' => $preBookingResultsCount, 'rows' => ($preBookingResultsCount ? $preBookingResult : []));
}
private function getTableResult()
{
$this->getTableClause();
$this->db->offset(($this->currentPage - 1) * $this->perPage);
$this->db->limit($this->perPage);
$this->db->order_by('created_at', 'desc')
->select('ds_amazon.*, c.title_dp category, c.link categoryLink, v.title video, v.link videoLink');
return $this->db->get('ds_amazon')->result();
}
private function getTableClause()
{
$this->db->join('ds_category c', 'ds_amazon.category_id=c.id', 'left')
->join('ds_video v', 'ds_amazon.video_id=v.id', 'left');
if ($this->input->post('keyword')) {
$this->db->where('asin', $this->input->post('keyword'));
$this->db->or_where('title', $this->input->post('keyword'));
}
if ($this->dateRange[0]) {
$this->db
->where('created_at >=', date('Y-m-d', $this->dateRange[0]))
->where('created_at <', date('Y-m-d', strtotime('+1 day', $this->dateRange[1])));
}
if ($this->input->get('searchName') == 'boxCode') {
$this->db->where('box_code', $this->input->get('searchWord'));
}
}
private function getTableResultsCount()
{
$this->getTableClause();
$this->db->from('ds_amazon');
return $this->db->count_all_results();
}
public function findAllCategories() {
return $this->db->select('id, title')->get('ds_category')->result();
}
}