vendor/lm/engine-inventory-matrix/src/Service/InventoryMatrixService.php line 199

Open in your IDE?
  1. <?php
  2. namespace Lm\Engine\InventoryMatrix\Service;
  3. use Lm\Engine\EC\Entity\GoodsWithRelated;
  4. use Lm\Engine\SokujitsuHassou\SokujitsuHassou;
  5. use Lm\Engine\Zaiko\Entity\SkuExtended;
  6. use Lm\Engine\Zaiko\NyuukaYoteibi;
  7. use Lm\Engine\Zaiko\Yoyaku;
  8. use Lm\Service\Db\SqlService;
  9. class InventoryMatrixService
  10. {
  11.     public function getGoodsColorSelectSql($goodsId)
  12.     {
  13.         $strSql "SELECT
  14.                         *
  15.                     FROM (
  16.                         SELECT
  17.                             gcl_parent.gcl_id
  18.                         ,   gcl_parent.gcl_display
  19.                         ,   color_id
  20.                         ,   color_display
  21.                         ,   color_name
  22.                         ,   color_rgb
  23.                         ,    gcl_parent.gcl_id AS parent_gcl_id
  24.                         ,    gcl_main.gcl_id AS main_gcl_id
  25.                         ,    gcl_sub.gcl_id AS sub_gcl_id
  26.                         ,    gcl_other.gcl_id AS other_gcl_id
  27.                         FROM goods_table
  28.                         LEFT JOIN goods_color_table AS gcl_parent ON goods_id = gcl_parent.gcl_goods AND gcl_parent.gcl_display_status = 1
  29.                         LEFT JOIN color_table ON color_id = gcl_parent.gcl_color_id
  30.                         LEFT JOIN gsp_gcl_table ON gcl_parent.gcl_id = gsp_gcl_parent
  31.                         LEFT JOIN goods_color_table AS gcl_main ON gcl_main.gcl_id = gsp_gcl_main
  32.                         LEFT JOIN goods_color_table AS gcl_sub ON gcl_sub.gcl_id = gsp_gcl_sub
  33.                         LEFT JOIN goods_color_table AS gcl_other ON gcl_other.gcl_id = gsp_gcl_other
  34.                         WHERE goods_id = {$goodsId}
  35.                     ) AS `goods`
  36.                     ORDER BY
  37.                         gcl_display
  38.                     ,   color_display
  39.                     ,   CAST( color_name AS binary )";
  40.         $data = (new SqlService())
  41.             ->Sql($strSql)
  42.             ->FetchAll();
  43.         if (is_null($data)) {
  44.             return false;
  45.         }
  46.         $tmpRow 0;
  47.         $color_array = array();
  48.         foreach ($data as $row) {
  49.             $tmpRow++;
  50.             $color_array[$tmpRow 1]['gcl_id'] = $row['gcl_id'];
  51.             $color_array[$tmpRow 1]['color_name'] = $row['color_name'];
  52.             $color_array[$tmpRow 1]['color_rgb'] = $row['color_rgb'];
  53.             $color_array[$tmpRow 1]['main_gcl_id'] = $row['main_gcl_id'];
  54.             $color_array[$tmpRow 1]['sub_gcl_id'] = $row['sub_gcl_id'];
  55.             $color_array[$tmpRow 1]['other_gcl_id'] = $row['other_gcl_id'];
  56.         }
  57.         return $color_array;
  58.     }
  59.     public function getGoodsSizeListById($goodsId)
  60.     {
  61.         $strSql "SELECT gp_parent.gp_id, size_name,
  62.                 (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
  63.                 ,    gp_parent.gp_id AS parent_gp_id
  64.                 ,    gp_main.gp_id AS main_gp_id
  65.                 ,    gp_sub.gp_id AS sub_gp_id
  66.                 ,    gp_other.gp_id AS other_gp_id
  67.                 FROM goods_price_table AS gp_parent
  68.                 INNER JOIN size_table ON gp_parent.gp_size_id = size_id
  69.                 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
  70.                 LEFT JOIN gsp_gp_table ON gp_parent.gp_id = gsp_gp_parent
  71.                 LEFT JOIN goods_price_table AS gp_main ON gp_main.gp_id = gsp_gp_main
  72.                 LEFT JOIN goods_price_table AS gp_sub ON gp_sub.gp_id = gsp_gp_sub
  73.                 LEFT JOIN goods_price_table AS gp_other ON gp_other.gp_id = gsp_gp_other
  74.                 WHERE gp_parent.gp_goods = {$goodsId}
  75.                 AND ( gp_parent.gp_display IS NULL OR ( gp_parent.gp_display IS NOT NULL AND gp_parent.gp_display != 99 ) )
  76.                 ORDER BY gp_parent.gp_display,size_display";
  77.         $data = ((array)((new SqlService())
  78.             ->Sql($strSql)
  79.             ->FetchAll()));
  80.         $tmpArray1 = [];
  81.         $tmpArray2 = [];
  82.         foreach ($data as $row) {
  83.             $tmpArray1[$row['gp_id']] = $row['size_name'];
  84.             $tmpArray2[$row['gp_id']] = $row;
  85.         }
  86.         // サイズ名で並び替え
  87.         $tmpRow 0;
  88.         $size_array = array();
  89.         foreach ($tmpArray1 as $key => $val) {
  90.             $tmpRow++;
  91.             $size_array[$tmpRow 1]['gp_id'] = $key;
  92.             $size_array[$tmpRow 1]['size_name'] = $val;
  93.             $size_array[$tmpRow 1]['gp_price'] = $tmpArray2[$key]['gp_price'];
  94.             $size_array[$tmpRow 1]['main_gp_id'] = $tmpArray2[$key]['main_gp_id'];
  95.             $size_array[$tmpRow 1]['sub_gp_id'] = $tmpArray2[$key]['sub_gp_id'];
  96.             $size_array[$tmpRow 1]['other_gp_id'] = $tmpArray2[$key]['other_gp_id'];
  97.         }
  98.         return $size_array;
  99.     }
  100.     public function getGoodsJanById($goods_id)
  101.     {
  102.         $sqlService = (new SqlService());
  103.         $result = ((array)($sqlService->Table('jancode_table')
  104.             ->Set('jan_goods'$goods_id)
  105.             ->Finds()));
  106.         $janList = array();
  107.         $janColors = array();
  108.         foreach ($result as $row) {
  109.             $janList[$row['jan_color']][$row['jan_price']] = $row['jan_id'];
  110.             $janColors[$row['jan_color']][$row['jan_price']] = $row['jan_shiire_color'];
  111.         }
  112.         return array($janList$janColors);
  113.     }
  114.     /**
  115.      * 備蓄在庫の入荷予定 From/To(jancode_table.jan_stock3_nyuka_date / jan_stock3_nyuka_date_to)
  116.      * を [gcl_id][gp_id] 形式で返す
  117.      *
  118.      * @param int $goods_id
  119.      * @return array
  120.      */
  121.     public function getGoodsJanStock3NyukaFromAndTo($goods_id)
  122.     {
  123.         // 指定商品の全SKU(色×サイズ)を jancode_table から取得
  124.         $result = ((array)((new SqlService())->Table('jancode_table')
  125.             ->Set('jan_goods'$goods_id)
  126.             ->Finds()));
  127.         // - $fromMap: jan_stock3_nyuka_date
  128.         // - $toMap  : jan_stock3_nyuka_date_to
  129.         $fromMap = array();
  130.         $toMap = array();
  131.         foreach ($result as $row) {
  132.             // jan_color = gcl_id(色ID), jan_price = gp_id(サイズ価格ID)
  133.             $gcl $row['jan_color'];
  134.             $gp $row['jan_price'];
  135.             // From 日付: 値があれば Y-m-d へ正規化、空や不正値は null のまま
  136.             $from null;
  137.             if (!empty($row['jan_stock3_nyuka_date'])) {
  138.                 $ts strtotime($row['jan_stock3_nyuka_date']);
  139.                 if ($ts !== false) {
  140.                     $from date('Y-m-d'$ts);
  141.                 }
  142.             }
  143.             // To 日付: 値があれば Y-m-d へ正規化、空や不正値は null のまま
  144.             $to null;
  145.             if (!empty($row['jan_stock3_nyuka_date_to'])) {
  146.                 $ts strtotime($row['jan_stock3_nyuka_date_to']);
  147.                 if ($ts !== false) {
  148.                     $to date('Y-m-d'$ts);
  149.                 }
  150.             }
  151.             // 色キーの配列が未初期化なら先に作る
  152.             if (!isset($fromMap[$gcl])) {
  153.                 $fromMap[$gcl] = array();
  154.             }
  155.             if (!isset($toMap[$gcl])) {
  156.                 $toMap[$gcl] = array();
  157.             }
  158.             // 最終的に matrix 側で $map[gcl_id][gp_id] で参照できる形に詰める
  159.             $fromMap[$gcl][$gp] = $from;
  160.             $toMap[$gcl][$gp] = $to;
  161.         }
  162.         // [From マップ, To マップ] の順で返却
  163.         return array($fromMap$toMap);
  164.     }
  165.     public function getGoodsStockDate($goodsId NULL$isMatrix NULL$janId NULL$gpId NULL$gclId NULL$datetime NULL)
  166.     {
  167.         return (new NyuukaYoteibi())
  168.             ->calculate($goodsId$isMatrix$janId$gpId$gclId$datetime)
  169.         ;
  170.     }
  171.     public function getGoodsStock($goods_id NULL$is_matrix false$jan_id NULL$gp_id NULL$gcl_id NULL$date NULL)
  172.     {
  173.         return GoodsWithRelated::getStockById($goods_id$is_matrix$jan_id$gp_id$gcl_id$date);
  174.     }
  175.     public function getGoodsReservation($goodsId null$isMatrix null$janId null$gpId null$gclId null$datetime null)
  176.     {
  177.         return (new Yoyaku())
  178.             ->check($goodsId$isMatrix$janId$gpId$gclId$datetime)
  179.         ;
  180.     }
  181.     public function getGoodsSameDayShipping($goods_id NULL$is_matrix NULL$jan_id NULL$gp_id NULL$gcl_id NULL$amount NULL$date NULL)
  182.     {
  183.         return (new SokujitsuHassou())
  184.             ->check($goods_id$is_matrix$jan_id$gcl_id$gp_id$date$amount);
  185.     }
  186.     // 売れ筋カラー取得
  187.     public function getSellingColorSql($goods_id$goods_count)
  188.     {
  189.         $limit = (int)($goods_count 5);
  190.         $strSql "SELECT * FROM (
  191.                     SELECT *
  192.                     FROM `selling_color_count_table`
  193.                     WHERE `scc_goods_id` = " $goods_id "
  194.                     ORDER BY `scc_amount` desc
  195.                 ) as data
  196.                 limit " $limit;
  197.         $temp_list = (new SqlService())
  198.             ->Sql($strSql)
  199.             ->FetchAll();
  200.         $selling_list = array();
  201.         foreach ((array)$temp_list as $selling) {
  202.             $selling_list[$selling['scc_gcl']] = $selling;
  203.         }
  204.         return $selling_list;
  205.     }
  206. }