/**
  * Загружает ряды в класс по идентификатору котировки
  *
  * @param int   $stockId   идентификатор котировки
  * @param int   $type      тип сравнения (1 - красный, 2 - синий)
  * @param array $dateRange периуд для расчета
  *                         ```php
  *                         [
  *                         'min' => 'yyyy-mm-dd'
  *                         'max' => 'yyyy-mm-dd'
  *                         ]
  *                         ```
  *
  * @return static
  * @throws \cs\web\Exception
  */
 public static function initStock($stockId, $type, $dateRange = null)
 {
     $where = null;
     if ($dateRange) {
         $where = ['between', 'date', $dateRange['min'], $dateRange['max']];
     }
     $kurs = StockKurs::query(['stock_id' => $stockId])->select(['`date`, `kurs` as `value`'])->orderBy(['date' => SORT_ASC]);
     if ($where) {
         $kurs->where($where);
     }
     $kurs = $kurs->all();
     $class = null;
     switch ($type) {
         case 1:
             $rows = StockPrognosisRed::query(['stock_id' => $stockId])->select(['`date`, `delta` as `value`'])->orderBy(['date' => SORT_ASC]);
             if ($where) {
                 $rows->where($where);
             }
             $class = \app\service\CalculatingProbability::initRows($kurs, $rows->all());
             break;
         case 2:
             $rows = StockPrognosisBlue::query(['stock_id' => $stockId])->select(['`date`, `delta` as `value`'])->orderBy(['date' => SORT_ASC]);
             if ($where) {
                 $rows->where($where);
             }
             $class = \app\service\CalculatingProbability::initRows($kurs, $rows->all());
             break;
         default:
             throw new \cs\web\Exception('Не верный тип $dateRange');
     }
     return $class;
 }
Exemplo n.º 2
0
 /**
  * Импортирует данные
  *
  * @return boolean
  */
 public function import($stock_id)
 {
     if ($this->validate()) {
         // выбираю уже имеющиеся данные
         $dataArray = StockPrognosisRed::query(['stock_id' => $stock_id])->select('date')->column();
         $rows = $this->get('fileRed', $stock_id, $dataArray);
         if (count($rows['insert']) > 0) {
             StockPrognosisRed::batchInsert(['stock_id', 'date', 'delta'], $rows['insert']);
         }
         if ($this->isReplaceExisting) {
             foreach ($rows['update'] as $date => $kurs) {
                 (new Query())->createCommand()->update(StockPrognosisRed::TABLE, ['delta' => $kurs], ['date' => $date, 'stock_id' => $stock_id])->execute();
             }
         }
         // выбираю уже имеющиеся данные
         $dataArray = StockPrognosisBlue::query(['stock_id' => $stock_id])->select('date')->column();
         $rows = $this->get('fileBlue', $stock_id, $dataArray);
         if (count($rows['insert']) > 0) {
             StockPrognosisBlue::batchInsert(['stock_id', 'date', 'delta'], $rows['insert']);
         }
         if ($this->isReplaceExisting) {
             foreach ($rows['update'] as $date => $kurs) {
                 (new Query())->createCommand()->update(StockPrognosisBlue::TABLE, ['delta' => $kurs], ['date' => $date, 'stock_id' => $stock_id])->execute();
             }
         }
         return true;
     } else {
         return false;
     }
 }
 public function actionIndex()
 {
     $items = Stock::query()->all();
     $red = StockPrognosisRed::query()->select(['stock_id', 'MIN(`date`) as min', 'MAX(`date`) as max'])->groupBy('stock_id')->all();
     $blue = StockPrognosisBlue::query()->select(['stock_id', 'MIN(`date`) as min', 'MAX(`date`) as max'])->groupBy('stock_id')->all();
     $kurs = StockKurs::query()->select(['stock_id', 'MIN(`date`) as min', 'MAX(`date`) as max'])->groupBy('stock_id')->all();
     return $this->render(['items' => $items, 'red' => $red, 'blue' => $blue, 'kurs' => $kurs]);
 }
Exemplo n.º 4
0
 /**
  * Рисует графики с прошлым и будущим
  *
  * @param int $id идентификатор курса
  *
  * @return string
  */
 public function actionStock_item3($id)
 {
     $item = \app\models\Stock::find($id);
     $start = (new \DateTime())->sub(new \DateInterval('P31D'));
     $end = (new \DateTime())->sub(new \DateInterval('P1D'));
     $isPaid = Yii::$app->user->identity->isPaid($id);
     $defaultParams = ['start' => $start, 'end' => $end, 'formatX' => 'd.m'];
     $params = ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockKurs::query(['stock_id' => $id])->andWhere(['between', 'date', $start->format('Y-m-d'), $end->format('Y-m-d')])->all()]]);
     $lineArrayKurs = \app\service\GraphExporter::convert($params);
     $params = ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockPrognosisRed::query(['stock_id' => $id])->andWhere(['between', 'date', $start->format('Y-m-d'), $end->format('Y-m-d')])->select(['date', 'delta as kurs'])->all()]]);
     $lineArrayRed = \app\service\GraphExporter::convert($params);
     $params = ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockPrognosisBlue::query(['stock_id' => $id])->andWhere(['between', 'date', $start->format('Y-m-d'), $end->format('Y-m-d')])->select(['date', 'delta as kurs'])->all()]]);
     $lineArrayBlue = \app\service\GraphExporter::convert($params);
     $lineArrayPast = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayKurs['y'][0], $lineArrayRed['y'][0], $lineArrayBlue['y'][0]]]);
     if ($isPaid) {
         $start = new \DateTime();
         $end = (new \DateTime())->add(new \DateInterval('P30D'));
         $defaultParams = ['start' => $start, 'end' => $end];
         $params = ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockPrognosisRed::query(['stock_id' => $id])->andWhere(['between', 'date', $start->format('Y-m-d'), $end->format('Y-m-d')])->select(['date', 'delta as kurs'])->all()]]);
         $lineArrayRed = \app\service\GraphExporter::convert($params);
         $params = ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockPrognosisBlue::query(['stock_id' => $id])->andWhere(['between', 'date', $start->format('Y-m-d'), $end->format('Y-m-d')])->select(['date', 'delta as kurs'])->all()]]);
         $lineArrayBlue = \app\service\GraphExporter::convert($params);
         $lineArrayFuture = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayRed['y'][0], $lineArrayBlue['y'][0]]]);
     } else {
         $lineArrayFuture = null;
     }
     return $this->render(['item' => $item, 'lineArrayPast' => $lineArrayPast, 'lineArrayFuture' => $lineArrayFuture, 'isPaid' => $isPaid]);
 }