/** * 获取制定基金类型名称 * @param $num * @return string */ public static function getTypeName($num) { $fund = FundNum::find()->where(['fund_num' => $num])->one(); if (!$fund) { return ''; } $type = $fund->fund_type; switch ($type) { case self::TYPE_ZQ: $name = '债券'; break; case self::TYPE_GG: $name = '股票'; break; case self::TYPE_ZS: $name = '指数'; break; case self::TYPE_HH: $name = '混合'; break; case self::TYPE_BB: $name = '保本'; break; default: $name = ''; } return $name; }
/** * 查看一段时间基金排名 * @param string $type * @return array|string */ public function actionSort($type = '') { if (\Yii::$app->request->isPost) { $start = Html::encode(Yii::$app->request->post('start')); $end = Html::encode(Yii::$app->request->post('end')); if ($start && $end) { Yii::$app->response->format = Response::FORMAT_JSON; $connection = Yii::$app->db; if ($type) { $nums = FundNum::find()->select('fund_num')->distinct()->where(['fund_type' => $type])->asArray()->all(); $nums = ArrayHelper::getColumn($nums, 'fund_num'); $nums = '(\'' . implode('\',\'', $nums) . '\')'; $sql = "SELECT `fund_num`,sum(rate+0) as rate FROM fund_history WHERE fund_num IN " . $nums . " AND ( UNIX_TIMESTAMP(`date`) BETWEEN UNIX_TIMESTAMP('" . $start . "') AND UNIX_TIMESTAMP('" . $end . "')) GROUP BY fund_num ORDER BY rate DESC LIMIT 100"; } else { $sql = "SELECT `fund_num`,sum(rate+0) as rate FROM fund_history WHERE ( UNIX_TIMESTAMP(`date`) BETWEEN UNIX_TIMESTAMP('" . $start . "') AND UNIX_TIMESTAMP('" . $end . "')) GROUP BY fund_num ORDER BY rate DESC LIMIT 100"; } $command = $connection->createCommand($sql); $posts = $command->queryAll(); return $posts; } else { return ''; } } else { return $this->render('sort', ['datas' => [], 'type' => $type]); } }
public function actionNum() { @set_time_limit(0); @ini_set('memory_limit', '1280M'); $client = new Client(); foreach ($this->url as $type => $u) { $crawler = $client->request('GET', $u); $result = $crawler->text(); $result = trim($result, 'g'); $result = trim($result, '('); $result = trim($result, ')'); $data_area = json_decode($result, true); foreach ($data_area['data']['data'] as $key => $v) { $model = FundNum::find()->where(['fund_num' => $v['code'], 'fund_type' => $type])->one(); if (!$model) { $model = new FundNum(['fund_num' => $v['code'], 'fund_type' => $type]); $model->save(); } } } }
/** * ajax处理每周重复数据 * @return array|string */ public function actionGetWeekDuplicate() { $nums = FundNum::find()->select('fund_num')->distinct()->where(['fund_type' => FundNum::TYPE_HH])->asArray()->all(); $nums = ArrayHelper::getColumn($nums, 'fund_num'); $nums = '(\'' . implode('\',\'', $nums) . '\')'; if (Yii::$app->request->isPost) { $w = Yii::$app->request->post('w'); if (count($w) > 0) { Yii::$app->response->format = Response::FORMAT_JSON; $posts = []; foreach ($w as $k => $v) { if ($k == 5) { break; } $connection = Yii::$app->db; $command = $connection->createCommand("SELECT `fund_num`,WEEK(`date`) as `week`,sum(rate+0) as rate FROM fund_history WHERE fund_num IN " . $nums . " AND YEAR(`date`) = 2016 AND WEEK(`date`)=" . $v . " GROUP BY fund_num,`week` ORDER BY rate DESC LIMIT 100"); $posts = array_merge($posts, ArrayHelper::getColumn($command->queryAll(), 'fund_num')); } $count = array_count_values($posts); foreach ($count as $key => $v) { if ($v !== count($w)) { unset($count[$key]); } } return array_keys($count); } } return ''; }
/** * 执行类型5:涨幅超过5%的天数是跌幅超过5%的天数的2倍 */ public static function saveType5() { $fund_nums = FundNum::find()->all(); foreach ($fund_nums as $v) { $biggerCount = FundHistory::biggerCount($v->fund_num, 5); $smallerCount = FundHistory::smallerCount($v->fund_num, -5); if ($biggerCount >= $smallerCount * 2) { $model = new self(['type' => self::TYPE_5, 'date' => date('Y-m-d'), 'fund_num' => $v->fund_num]); $model->save(); } } }