<?php
namespace Lm\Engine\SokujitsuHassou;
use Lm\Engine\SokujitsuHassou\Config\Constant;
use Lm\Engine\Zaiko\Entity\SkuExtended;
use Lm\Entity\Sku;
use Lm\Service\Cache\LmCacheTrait;
use Lm\Service\Cache\CacheService;
use Lm\Service\Db\SqlService;
use Lm\Entity\OrderHeader;
use Lm\Entity\OrderList;
use Lm\Entity\OrderGoodsList;
class SokujitsuHassou
{
use LmCacheTrait {
LmCacheTrait::__construct as __traitConstruct;
}
const FLG_NONE = 0; // 即日発送不可
const FLG_CHOKUSOU = 1; // 即日発送可(メーカー直送)
const FLG_BICHIKU = 2; // 即日発送可(備蓄)
const FLG_NG_ORDER_CANCELLED = -1; // 即日発送不可(受注取消済みのため)
const FLG_NG_SHIIRESAKI_MIXED = -2; // 即日発送不可(仕入先混在のため)
const FLG_NG_SOUKO_MIXED = -3; // 即日発送不可(倉庫(メーカー直送、備蓄在庫)混在のため)
const FLG_NG_ORDER_TYPE = -4; // 即日発送不可(受注タイプ未対応のため)
const FLG_NG_PAYMENT_TYPE = -5; // 即日発送不可(支払い方法未対応のため)
const FLG_NG_ORDER_SHUBETSU = -6; // 即日発送不可(受注種別未対応のため)
const FLG_NG_YOYAKU = -7; // 即日発送不可(予約注文のため)
const FLG_NG_ORGANIZATION = -8; // 即日発送不可(顧客種別(個人/組織)未対応のため)
const FLG_NG_DEADLINE_HAS_PASSED = -9;
const FLG_NG_NUMBER_ORDER_EXCEEDS_SHIPPING_IN_DAY = -10;
const TIME_LIMIT_BICHIKU = '16:00'; // 締切時刻(備蓄)
const MIGRATION_DATE_FOR_SOKUJITSU_HASSOU_FLG = '2022-07-08 00:00:00';
/**
* 受注時の仕入先別の即日発送条件
*/
const ORDER_SHIIRESAKI_LIST = [
'default' => [
'available_order_type_list' => [
OrderHeader::TYPE_PURCHASE,
OrderHeader::TYPE_SAMPLE,
],
'available_order_shubetsu_list' => [
OrderHeader::SHUBETSU_MUJI,
OrderHeader::SHUBETSU_SAMPLE,
OrderHeader::SHUBETSU_CATALOG,
],
'available_payment_type_list' => [
OrderHeader::PAYMENT_TYPE_CREDIT_CARD,
],
'organization_only' => false,
], // デフォルト
'bichiku' => [
'available_order_type_list' => [
OrderHeader::TYPE_PURCHASE,
OrderHeader::TYPE_SAMPLE,
],
'available_order_shubetsu_list' => [
OrderHeader::SHUBETSU_MUJI,
OrderHeader::SHUBETSU_SAMPLE,
OrderHeader::SHUBETSU_CATALOG,
],
'available_payment_type_list' => [
OrderHeader::PAYMENT_TYPE_CREDIT_CARD,
OrderHeader::PAYMENT_TYPE_DAIKIN_HIKIKAE,
OrderHeader::PAYMENT_TYPE_ATOBARAI,
OrderHeader::PAYMENT_TYPE_ATOBARAI_MONTHLY,
OrderHeader::PAYMENT_TYPE_AMAZON_PAY,
Constant::AMAZON_PAY
],
'organization_only' => false,
], // 備蓄
'84' => [
'available_payment_type_list' => [
OrderHeader::PAYMENT_TYPE_CREDIT_CARD,
OrderHeader::PAYMENT_TYPE_DAIKIN_HIKIKAE,
],
'organization_only' => false,
], // 84: チトセ
'56' => [
'available_payment_type_list' => [
OrderHeader::PAYMENT_TYPE_CREDIT_CARD,
],
'organization_only' => true,
], // 56: 自重堂
];
/**
* @var SqlService
*/
protected $db;
public function __construct()
{
//
$this->db = new SqlService();
//
$cacheService = new CacheService();
//
$this->__traitConstruct($cacheService);
}
/**
* 商品単位での即日発送可否判定を行う
*
* TODO: 異なるメーカーを含むセット品番の対応
* TODO: 欠品の対応
*
* @param int $goodsId
* @param bool|null $isMatrix
* @param int|null $janId
* @param int|null $gclId
* @param int|null $gpId
* @param string|null $datetime
* @param int|null $amount
* @param array $listJanId
* @return array|int
* @throws \Exception
*/
public function check($goodsId, $isMatrix = false, $janId = null, $gclId = null, $gpId = null, $datetime = null, $amount = null, $isGetFullStatusDelivery = false)
{
//
if (empty($datetime)) {
// 日時の指定が省略された場合、当日の00:00:00が指定されたものとする
$datetime = date("Y-m-d 00:00:00");
}
//
if (empty($amount)) {
// 数量の指定が省略された場合、ゼロ「0」が指定されたものとする
$amount = 0;
}
//
if (empty($gclId) && empty($gpId)) {
//
if (empty($janId)) {
//
if (!empty($goodsId)) {
//
if (!empty($amount)) {
//
throw new \Exception('引数$amountはnullもしくは0である必要があります($goods_idのみの指定の場合、数量の指定は出来ません)');
}
}
}
}
try {
//
if (!($skuList = SkuExtended::getInstanceList($goodsId, $janId, $gclId, $gpId, $datetime))) {
//
throw new \Exception("指定された商品の在庫情報が取得できませんでした");
}
if ($isGetFullStatusDelivery) {
return $this->getFullStatusDelivery($skuList, $isMatrix, $datetime, $amount);
}
return $this->_check($skuList, $isMatrix, $datetime, $amount);
} catch (\Exception $e) {
// error_log($e->getMessage());
// error_log($e->getTraceAsString());
return self::FLG_NONE;
}
}
/**
* @param Sku[] $skuList
* @param bool $isMatrix
* @param string $datetime
* @param int $amount
* @return array|int
*/
protected function _check($skuList, $isMatrix, $datetime, $amount)
{
//
$result = [];
$flgMax = self::FLG_NONE; // 【マトリクス対応】同一の品番において、1つでも即日可のSKUが存在する場合、最も良い条件を採用
$flgBuf = []; // 【セット品番対応】複数品番を含む場合、それら全ての品番における最低の条件を採用
//
foreach ($skuList as $index => $sku) {
//
$goodsId = $sku->getGoodsId();
$gclId = $sku->getGclId();
$gpId = $sku->getGpId();
//
$lmHinban = $sku->getLmHinban();
$makerHinban = $sku->getMakerHinban();
$makerTimeLimit = $sku->getTimeLimit();
//
$stockChokusou = (int)$sku->getStockChokusou();
$stockBichiku = (int)$sku->getStockBichiku();
//
$bichikuNyukaDate = $sku->getBichikuNyukaDate();
//
$flg = self::FLG_NONE;
if (!isset($flgBuf[$goodsId])) {
$flgBuf[$goodsId] = self::FLG_NONE;
}
//
if (!empty($bichikuNyukaDate)) {
//
$flg = self::FLG_NG_YOYAKU;
} else if ($sku->getIsDirectDeliveryConfigExists() == 1) {
// 直送設定あり
$makerHinbanCharcters = preg_replace('/[^a-zA-Z]/', '', $makerHinban);
$shiiresakiSoukoCharactersList = $sku->getShiiresakiSoukoHanteiAsArray();
$chokusouIncludeHinbanList = $sku->getChokusouIncludeHinbanListAsArray();
$chokusouExcludeHinbanList = $sku->getChokusouExcludeHinbanListAsArray();
$bichikuIncludeHinbanList = $sku->getBichikuIncludeHinbanListAsArray();
//
if ($this->isBichikuAvailable($stockBichiku, $datetime, $amount)) {
//
$flg = self::FLG_BICHIKU;
} else if (in_array($lmHinban, $bichikuIncludeHinbanList)) {
// LM備蓄在庫(アシスト物流で在庫している)している品番
// // 数量にゼロ「0」の指定がある場合に限り、在庫数に関わらず 即日発送可(備蓄)とする
// if ($this->isBichikuAvailable($amount === 0 ? 999 : $amount, $datetime, $amount)) {
// $flg = self::FLG_BICHIKU;
// }
// マトリクス式でなく且つ、数量の指定が無い場合に限り、在庫数に関わらず 即日発送可(備蓄)とする
if ($this->isBichikuAvailable((!$isMatrix && !$amount) ? 999 : $stockBichiku, $datetime, $amount)) {
$flg = self::FLG_BICHIKU;
}
} else if (in_array($lmHinban, $chokusouExcludeHinbanList)) {
// 除外品番
// 無条件で 即日発送不可 とする
$flg = self::FLG_NONE;
} else if (empty($chokusouIncludeHinbanList) || in_array($lmHinban, $chokusouIncludeHinbanList)) {
// メーカー直送品番(対象商品をLM品番で入力)
if ($this->isSokujitsuAvailable($makerTimeLimit, $stockChokusou, $datetime, $amount)) {
$flg = self::FLG_CHOKUSOU;
}
} else if (empty($shiiresakiSoukoCharactersList) || in_array($makerHinbanCharcters, $shiiresakiSoukoCharactersList)) {
// メーカー直送品番(該当アルファベット)
if ($this->isSokujitsuAvailable($makerTimeLimit, $stockChokusou, $datetime, $amount)) {
$flg = self::FLG_CHOKUSOU;
}
} else {
// いずれにも該当しない場合
// ※各種直送の設定漏れ時の救済(但しこの場合、備蓄のチェックのみとなる)
error_log('[engine-sokujitsu-hassou] check it out(001).');
}
} else {
// 直送設定なし
if ($this->isBichikuAvailable($stockBichiku, $datetime, $amount)) {
//
$flg = self::FLG_BICHIKU;
}
}
//
if (!isset($result[$gclId])) {
$result[$gclId] = [];
}
//
$result[$gclId][$gpId] = $flg;
//
if ($flgBuf[$goodsId] < $flg) {
$flgBuf[$goodsId] = $flg;
}
//
$flgMax = min($flgBuf);
}
//
if ($isMatrix) {
//
return $result;
} else {
//
return $flgMax;
}
}
/***
* Get Full status of List sku
*
* @param $skuList
* @param $isMatrix
* @param $datetime
* @param $amount
* @return array|int|mixed
*/
protected function getFullStatusDelivery($skuList, $isMatrix, $datetime, $amount)
{
$result = [];
$flgMax = self::FLG_NONE; // 【マトリクス対応】同一の品番において、1つでも即日可のSKUが存在する場合、最も良い条件を採用
$flgBuf = []; // 【セット品番対応】複数品番を含む場合、それら全ての品番における最低の条件を採用
$timeLimit = self::TIME_LIMIT_BICHIKU;
foreach ($skuList as $index => $sku) {
$goodsId = $sku->getGoodsId();
$gclId = $sku->getGclId();
$gpId = $sku->getGpId();
if (!isset($flgBuf[$goodsId])) {
$flgBuf[$goodsId] = self::FLG_NONE;
}
$flg = self::getFlagDelivery($sku, $datetime, $amount, $isMatrix, $timeLimit);
if (!isset($result[$gclId])) {
$result[$gclId] = [];
}
$result[$gclId][$gpId] = $flg;
$flgBuf[$goodsId] = $flg;
$flgMax = min($flgBuf);
}
return $isMatrix ? $result : $flgMax;
}
/**
* 受注単位での即日発送可否判定を行う
*
* TODO: 受注単位の合計数量で計算するように(現在は受注明細(SKU毎)単位)
*
* @param int|array|OrderHeader $orderHeader 受注IDもしくは受注データ(配列 or OrderHeaderエンティティ)を渡す
* @param string|null $datetime
* @return array|int
* @throws \Exception
*/
public function checkOrder($orderHeader, $datetime = null)
{
// 受注IDが渡された場合、受注情報を検索する
if (is_numeric($orderHeader) || is_array($orderHeader)) {
//
$orderHeader = new OrderHeader($orderHeader);
}
//
if (empty($datetime)) {
// 日時の指定が省略された場合
if ($ohDate = $orderHeader->getOhDate()) {
// 当該受注の受注日時があれば採用
$datetime = date("Y-m-d H:i:s", strtotime($ohDate));
} else {
// 無ければ現在
$datetime = date("Y-m-d H:i:s");
}
}
// 即日発送フラグによる判定
if (date('H:i:s', strtotime($datetime)) === '00:00:00') {
// TODO: 倉庫判定エンジンとして機能する
} else if ($orderHeader->getOhSokujitsuHassouFlg() === self::FLG_CHOKUSOU) {
// 即日発送可(メーカー直送)
return self::FLG_CHOKUSOU;
} else if ($orderHeader->getOhSokujitsuHassouFlg() === self::FLG_BICHIKU) {
// 即日発送可(備蓄)
return self::FLG_BICHIKU;
} else if ($orderHeader->getOhId() && (strtotime($orderHeader->getOhDate()) > strtotime(self::MIGRATION_DATE_FOR_SOKUJITSU_HASSOU_FLG))) {
// TODO: 即日発送エンジン切り替え前後の判定。もっとスマートな方法?
return (int)$orderHeader->getOhSokujitsuHassouFlg();
}
//
return $this->_checkOrder($orderHeader, $datetime);
}
/**
* @param OrderHeader $orderHeader
* @param string $datetime
* @return array|int
* @throws \Exception
*/
protected function _checkOrder(OrderHeader $orderHeader, $datetime)
{
//
$shiiresakiIdBuf = []; // 【受注明細別対応】メーカーが混在の場合、NGとする
$flgBuf = []; // 【受注明細別対応】複数明細を含む場合、それら全ての明細における最低の条件を採用
// 受注タイプによる判定
if ($orderHeader->getOhType() === OrderHeader::TYPE_CANCEL) {
// 取消済みは除外
return self::FLG_NG_ORDER_CANCELLED;
} else if (in_array($orderHeader->getOhType(), [
OrderHeader::TYPE_CATALOG, // 5: カタログ請求
])) {
// 受注タイプ非対応
return self::FLG_NG_ORDER_TYPE;
}
// 予約か否か
if ($orderHeader->getOhYoyaku() == OrderHeader::YOYAKU_YES) {
// 予約の場合は無条件で即日発送の対象外とする
return self::FLG_NG_YOYAKU;
}
//
foreach ($orderHeader->getOrderListList() as $orderList) {
//
$goods = $orderList->getGoods();
$shiiresakiId = $goods->getGoodsShiiresaki();
$shiiresakiIdBuf[] = $shiiresakiId;
//
$flgBuf[] = $this->checkOrderList($orderHeader, $orderList, $datetime);
}
//
if (count(array_unique($shiiresakiIdBuf)) > 1) {
// 仕入先混在
return self::FLG_NG_SHIIRESAKI_MIXED;
} else if (count(array_unique($flgBuf)) > 1) {
// 倉庫混在(備蓄・直送・それ以外)
return self::FLG_NG_SOUKO_MIXED;
}
//
$flg = min($flgBuf);
//
return $flg;
}
protected function checkOrderList(OrderHeader $orderHeader, OrderList $orderList, $datetime)
{
//
$flg = $this->_checkOrderList($orderList, $datetime);
//
$shiiresakiId = $orderList->getGoods()->getGoodsShiiresaki();
$orderShiiresakiConfig = self::ORDER_SHIIRESAKI_LIST['default'];
// 仕入先毎の設定があればそちらで上書き
if ($flg === self::FLG_BICHIKU) {
// LM備蓄
$orderShiiresakiConfig = array_replace($orderShiiresakiConfig, self::ORDER_SHIIRESAKI_LIST['bichiku']);
} else if ($flg === self::FLG_CHOKUSOU) {
// メーカー直送
if (array_key_exists($shiiresakiId, self::ORDER_SHIIRESAKI_LIST)) {
// 仕入先毎の設定あり
$orderShiiresakiConfig = array_replace($orderShiiresakiConfig, self::ORDER_SHIIRESAKI_LIST[$shiiresakiId]);
}
} else {
// この時点で即日不可の場合は「即日不可」
return $flg;
}
//
if (!in_array($orderHeader->getOhType(), $orderShiiresakiConfig['available_order_type_list'])) {
//
return self::FLG_NG_ORDER_TYPE;
}
//
if (($orderHeader->getOhType() === OrderHeader::TYPE_SAMPLE) && ($orderHeader->getOhPayment() !== OrderHeader::PAYMENT_TYPE_SAMPLE)) {
//
return self::FLG_NG_ORDER_TYPE;
} else if (($orderHeader->getOhType() === OrderHeader::TYPE_CATALOG) && ($orderHeader->getOhPayment() !== OrderHeader::PAYMENT_TYPE_CATALOG)) {
//
return self::FLG_NG_ORDER_TYPE;
} else if (!in_array($orderHeader->getOhShubetsu(), $orderShiiresakiConfig['available_order_shubetsu_list'])) {
//
return self::FLG_NG_ORDER_SHUBETSU;
}
//
if (!in_array($orderHeader->getOhPayment(), $orderShiiresakiConfig['available_payment_type_list'])) {
//
return self::FLG_NG_PAYMENT_TYPE;
}
//
if ($orderShiiresakiConfig['organization_only'] && (empty($orderHeader->getOhSendCompany()) && empty($orderHeader->getCustomer()->getCustomerCompany()))) {
//
return self::FLG_NG_ORGANIZATION;
}
//
return $flg;
}
protected function _checkOrderList(OrderList $orderList, $datetime)
{
$flgBuf = []; // 【受注明細(SKU毎)別対応】複数明細を含む場合、それら全ての明細における最低の条件を採用
//
foreach ($orderList->getOrderGoodsListList() as $orderGoodsList) {
//
$flgBuf[] = $this->checkOrderGoodsList($orderGoodsList, $datetime);
}
//
if (empty($flgBuf)) {
// 受注明細(SKU毎)が存在しないため、判定不可。
return self::FLG_NONE;
}
//
if (count(array_unique($flgBuf)) > 1) {
// 倉庫混在(備蓄・直送・それ以外)
return self::FLG_NG_SOUKO_MIXED;
}
//
$flg = min($flgBuf);
//
return $flg;
}
/**
* @param OrderGoodsList $orderGoodsList
* @param string $datetime
* @return array|int
* @throws \Exception
*/
protected function checkOrderGoodsList(OrderGoodsList $orderGoodsList, $datetime)
{
//
$orderHeader = $orderGoodsList->getOrderList()->getOrderHeader();
//
$gclId = $orderGoodsList->getOglGcl();
$gpId = $orderGoodsList->getOglGp();
$amount = $orderGoodsList->getOglAmount();
$oglStockConsume = $orderGoodsList->getStockConsume();
//
if ($oglStockConsume !== null) {
// 倉庫混在の判定(=但し、一部、条件によっては混在可)
if (($oglStockConsume->getJanStock3() && ($amount !== $oglStockConsume->getJanStock3()))
|| ($oglStockConsume->getJanStock4() && ($amount !== ($oglStockConsume->getJanStock() + $oglStockConsume->getJanStock4())))
|| ($oglStockConsume->getJanStock5() && ($amount !== ($oglStockConsume->getJanStock() + $oglStockConsume->getJanStock5())))
) {
//
return self::FLG_NG_SOUKO_MIXED;
} else if (
($oglStockConsume->getJanStock9() && ($amount === ($oglStockConsume->getJanStock() + $oglStockConsume->getJanStock9())))
) {
// チトセ外部在庫
// TODO: 倉庫判定エンジン
if (date('H:i:s', strtotime($datetime)) === '00:00:00') {
// no operation.
} else {
return self::FLG_NG_SOUKO_MIXED;
}
}
}
//
return $this->check(null, false, null, $gclId, $gpId, $datetime, $amount);
}
/**
* @param int $stockBichiku
* @param string $datetime
* @param int $amount
* @return bool
*/
protected function isBichikuAvailable($stockBichiku, $datetime, $amount)
{
//
$timeLimit = self::TIME_LIMIT_BICHIKU;
$stock = $stockBichiku;
//
return $this->isSokujitsuAvailable($timeLimit, $stock, $datetime, $amount);
}
/**
* @param string $timeLimit
* @param int $stock
* @param string $datetime
* @param int $amount
* @return bool
*/
protected function isSokujitsuAvailable($timeLimit, $stock, $datetime, $amount)
{
//
$time = date('H:i', strtotime($datetime));
//
return ($time < $timeLimit) && (0 < $stock && $amount <= $stock);
}
/***
* Check Time delivery is available
*
* @param string $timeLimit
* @param $datetime
* @return bool
*/
protected function isTimeAvailable(string $timeLimit,$datetime)
{
$time = date('H:i', strtotime($datetime));
return ($time < $timeLimit);
}
/***
* Check amount product Order is available
*
* @param int $stock
* @param int $amount
* @return bool
*/
protected function isAmountOrderAvailable(int $stock, int $amount)
{
return 0 < $stock && $amount <= $stock;
}
/***
* Get status delivery
*
* @param int $stock
* @param int $amount
* @param $timeLimit
* @param $datetime
* @param int $flg
* @return int
*/
private function getStatusByStockAndTimeLimit($stock=0, $amount=0, $timeLimit, $datetime, $flg)
{
if (!self::isTimeAvailable($timeLimit, $datetime)) {
$flg = self::FLG_NG_DEADLINE_HAS_PASSED;
}
if (!self::isAmountOrderAvailable($stock, $amount)) {
$flg = self::FLG_NG_NUMBER_ORDER_EXCEEDS_SHIPPING_IN_DAY;
}
return $flg;
}
/***
* Get status delivery
*
* @param $sku
* @param $datetime
* @param $amount
* @param $isMatrix
* @param $timeLimit
* @return int
*/
private function getFlagDelivery($sku, $datetime, $amount, $isMatrix, $timeLimit)
{
$flg = self::FLG_NONE;
$lmHinban = $sku->getLmHinban();
$makerHinban = $sku->getMakerHinban();
$makerTimeLimit = $sku->getTimeLimit();
$stockChokusou = (int)$sku->getStockChokusou();
$stockBichiku = (int)$sku->getStockBichiku();
$bichikuNyukaDate = $sku->getBichikuNyukaDate();
if (!empty($bichikuNyukaDate)) {
$flg = self::FLG_NG_YOYAKU;
} else if ($sku->getIsDirectDeliveryConfigExists() == 1) {
$makerHinbanCharcters = preg_replace('/[^a-zA-Z]/', '', $makerHinban);
$shiiresakiSoukoCharactersList = $sku->getShiiresakiSoukoHanteiAsArray();
$chokusouIncludeHinbanList = $sku->getChokusouIncludeHinbanListAsArray();
$chokusouExcludeHinbanList = $sku->getChokusouExcludeHinbanListAsArray();
$bichikuIncludeHinbanList = $sku->getBichikuIncludeHinbanListAsArray();
if ($this->isBichikuAvailable($stockBichiku, $datetime, $amount)) {
$flg = self::FLG_BICHIKU;
} else if (in_array($lmHinban, $bichikuIncludeHinbanList)) {
if ($this->isBichikuAvailable((!$isMatrix && !$amount) ? 999 : $stockBichiku, $datetime, $amount)) {
$flg = self::FLG_BICHIKU;
}
} else if (in_array($lmHinban, $chokusouExcludeHinbanList)) {
// 除外品番
// 無条件で 即日発送不可 とする
$flg = self::FLG_NONE;
} else if (empty($chokusouIncludeHinbanList) || in_array($lmHinban, $chokusouIncludeHinbanList)) {
// メーカー直送品番(対象商品をLM品番で入力)
if ($this->isSokujitsuAvailable($makerTimeLimit, $stockChokusou, $datetime, $amount)) {
$flg = self::FLG_CHOKUSOU;
}
} else if (empty($shiiresakiSoukoCharactersList) || in_array($makerHinbanCharcters, $shiiresakiSoukoCharactersList)) {
if ($this->isSokujitsuAvailable($makerTimeLimit, $stockChokusou, $datetime, $amount)) {
$flg = self::FLG_CHOKUSOU;
}
} else {
// いずれにも該当しない場合
// ※各種直送の設定漏れ時の救済(但しこの場合、備蓄のチェックのみとなる)
error_log('[engine-sokujitsu-hassou] check it out(001).');
}
// add more condition to check quantity order, and deadline
if ($stockBichiku > 0) {
$flg = self::getStatusByStockAndTimeLimit($stockBichiku, $amount, $timeLimit, $datetime, $flg);
} else if ($stockChokusou > 0) {
$flg = self::getStatusByStockAndTimeLimit($stockChokusou, $amount, $makerTimeLimit, $datetime, $flg);
}
} else {
// 直送設定なし
if ($this->isBichikuAvailable($stockBichiku, $datetime, $amount)) {
$flg = self::FLG_BICHIKU;
}
if ($stockBichiku > 0) {
$flg = self::getStatusByStockAndTimeLimit($stockBichiku, $amount, $timeLimit, $datetime, $flg);
} else if ($stockChokusou > 0) {
$flg = self::getStatusByStockAndTimeLimit($stockChokusou, $amount, $makerTimeLimit, $datetime, $flg);
}
}
return $flg;
}
}