<?php
namespace Lm\Engine\InventoryMatrix\Service;
use Lm\Engine\EC\Entity\GoodsWithRelated;
use Lm\Engine\SokujitsuHassou\SokujitsuHassou;
use Lm\Engine\Zaiko\Entity\SkuExtended;
use Lm\Engine\Zaiko\NyuukaYoteibi;
use Lm\Engine\Zaiko\Yoyaku;
use Lm\Service\Db\SqlService;
class InventoryMatrixService
{
public function getGoodsColorSelectSql($goodsId)
{
$strSql = "SELECT
*
FROM (
SELECT
gcl_parent.gcl_id
, gcl_parent.gcl_display
, color_id
, color_display
, color_name
, color_rgb
, gcl_parent.gcl_id AS parent_gcl_id
, gcl_main.gcl_id AS main_gcl_id
, gcl_sub.gcl_id AS sub_gcl_id
, gcl_other.gcl_id AS other_gcl_id
FROM goods_table
LEFT JOIN goods_color_table AS gcl_parent ON goods_id = gcl_parent.gcl_goods AND gcl_parent.gcl_display_status = 1
LEFT JOIN color_table ON color_id = gcl_parent.gcl_color_id
LEFT JOIN gsp_gcl_table ON gcl_parent.gcl_id = gsp_gcl_parent
LEFT JOIN goods_color_table AS gcl_main ON gcl_main.gcl_id = gsp_gcl_main
LEFT JOIN goods_color_table AS gcl_sub ON gcl_sub.gcl_id = gsp_gcl_sub
LEFT JOIN goods_color_table AS gcl_other ON gcl_other.gcl_id = gsp_gcl_other
WHERE goods_id = {$goodsId}
) AS `goods`
ORDER BY
gcl_display
, color_display
, CAST( color_name AS binary )";
$data = (new SqlService())
->Sql($strSql)
->FetchAll();
if (is_null($data)) {
return false;
}
$tmpRow = 0;
$color_array = array();
foreach ($data as $row) {
$tmpRow++;
$color_array[$tmpRow - 1]['gcl_id'] = $row['gcl_id'];
$color_array[$tmpRow - 1]['color_name'] = $row['color_name'];
$color_array[$tmpRow - 1]['color_rgb'] = $row['color_rgb'];
$color_array[$tmpRow - 1]['main_gcl_id'] = $row['main_gcl_id'];
$color_array[$tmpRow - 1]['sub_gcl_id'] = $row['sub_gcl_id'];
$color_array[$tmpRow - 1]['other_gcl_id'] = $row['other_gcl_id'];
}
return $color_array;
}
public function getGoodsSizeListById($goodsId)
{
$strSql = "SELECT gp_parent.gp_id, size_name,
(CASE WHEN cp_price IS NOT NULL AND cp_price > 0 THEN cp_price ELSE ROUND(gp_parent.gp_price2 * (1+ 10/100)) END) as gp_price
, gp_parent.gp_id AS parent_gp_id
, gp_main.gp_id AS main_gp_id
, gp_sub.gp_id AS sub_gp_id
, gp_other.gp_id AS other_gp_id
FROM goods_price_table AS gp_parent
INNER JOIN size_table ON gp_parent.gp_size_id = size_id
LEFT JOIN campaign_price_table ON cp_gp = gp_parent.gp_id AND `cp_end_datetime` >= NOW() and `cp_start_datetime` <= NOW() and cp_del_flg =0
LEFT JOIN gsp_gp_table ON gp_parent.gp_id = gsp_gp_parent
LEFT JOIN goods_price_table AS gp_main ON gp_main.gp_id = gsp_gp_main
LEFT JOIN goods_price_table AS gp_sub ON gp_sub.gp_id = gsp_gp_sub
LEFT JOIN goods_price_table AS gp_other ON gp_other.gp_id = gsp_gp_other
WHERE gp_parent.gp_goods = {$goodsId}
AND ( gp_parent.gp_display IS NULL OR ( gp_parent.gp_display IS NOT NULL AND gp_parent.gp_display != 99 ) )
ORDER BY gp_parent.gp_display,size_display";
$data = ((array)((new SqlService())
->Sql($strSql)
->FetchAll()));
$tmpArray1 = [];
$tmpArray2 = [];
foreach ($data as $row) {
$tmpArray1[$row['gp_id']] = $row['size_name'];
$tmpArray2[$row['gp_id']] = $row;
}
// サイズ名で並び替え
$tmpRow = 0;
$size_array = array();
foreach ($tmpArray1 as $key => $val) {
$tmpRow++;
$size_array[$tmpRow - 1]['gp_id'] = $key;
$size_array[$tmpRow - 1]['size_name'] = $val;
$size_array[$tmpRow - 1]['gp_price'] = $tmpArray2[$key]['gp_price'];
$size_array[$tmpRow - 1]['main_gp_id'] = $tmpArray2[$key]['main_gp_id'];
$size_array[$tmpRow - 1]['sub_gp_id'] = $tmpArray2[$key]['sub_gp_id'];
$size_array[$tmpRow - 1]['other_gp_id'] = $tmpArray2[$key]['other_gp_id'];
}
return $size_array;
}
public function getGoodsJanById($goods_id)
{
$sqlService = (new SqlService());
$result = ((array)($sqlService->Table('jancode_table')
->Set('jan_goods', $goods_id)
->Finds()));
$janList = array();
$janColors = array();
foreach ($result as $row) {
$janList[$row['jan_color']][$row['jan_price']] = $row['jan_id'];
$janColors[$row['jan_color']][$row['jan_price']] = $row['jan_shiire_color'];
}
return array($janList, $janColors);
}
public function getGoodsStockDate($goodsId = NULL, $isMatrix = NULL, $janId = NULL, $gpId = NULL, $gclId = NULL, $datetime = NULL)
{
return (new NyuukaYoteibi())
->calculate($goodsId, $isMatrix, $janId, $gpId, $gclId, $datetime)
;
}
public function getGoodsStock($goods_id = NULL, $is_matrix = false, $jan_id = NULL, $gp_id = NULL, $gcl_id = NULL, $date = NULL)
{
return GoodsWithRelated::getStockById($goods_id, $is_matrix, $jan_id, $gp_id, $gcl_id, $date);
}
public function getGoodsReservation($goodsId = null, $isMatrix = null, $janId = null, $gpId = null, $gclId = null, $datetime = null)
{
return (new Yoyaku())
->check($goodsId, $isMatrix, $janId, $gpId, $gclId, $datetime)
;
}
public function getGoodsSameDayShipping($goods_id = NULL, $is_matrix = NULL, $jan_id = NULL, $gp_id = NULL, $gcl_id = NULL, $amount = NULL, $date = NULL)
{
return (new SokujitsuHassou())
->check($goods_id, $is_matrix, $jan_id, $gcl_id, $gp_id, $date, $amount);
}
// 売れ筋カラー取得
public function getSellingColorSql($goods_id, $goods_count)
{
$limit = (int)($goods_count / 5);
$strSql = "SELECT * FROM (
SELECT *
FROM `selling_color_count_table`
WHERE `scc_goods_id` = " . $goods_id . "
ORDER BY `scc_amount` desc
) as data
limit " . $limit;
$temp_list = (new SqlService())
->Sql($strSql)
->FetchAll();
$selling_list = array();
foreach ((array)$temp_list as $selling) {
$selling_list[$selling['scc_gcl']] = $selling;
}
return $selling_list;
}
}