179 lines
6.5 KiB
PHP
179 lines
6.5 KiB
PHP
<?php
|
|
|
|
namespace app\api\service;
|
|
|
|
use think\Db;
|
|
use app\api\exception\ApiException;
|
|
use app\common\exception\EnumCode;
|
|
use app\common\repository\SkitsLibraryReposotpry;
|
|
use app\common\repository\SigninReposotpry;
|
|
use app\common\repository\UserReposotpry;
|
|
use app\common\repository\BookCaseReposotpry;
|
|
use app\common\repository\HistoryReposotpry;
|
|
|
|
class HomeService
|
|
{
|
|
|
|
protected $skitsLibraryReposotpry;
|
|
protected $signinReposotpry;
|
|
protected $userReposotpry;
|
|
protected $bookCaseReposotpry;
|
|
protected $historyReposotpry;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->skitsLibraryReposotpry = new SkitsLibraryReposotpry;
|
|
$this->signinReposotpry = new SigninReposotpry;
|
|
$this->userReposotpry = new UserReposotpry;
|
|
$this->bookCaseReposotpry = new BookCaseReposotpry;
|
|
$this->historyReposotpry = new HistoryReposotpry;
|
|
}
|
|
|
|
/**
|
|
* 推荐过程 function
|
|
*
|
|
* @author dotdotdot <6383846@qq.com>
|
|
* @date 2022-08-09
|
|
* @param array $params
|
|
* @return array
|
|
*/
|
|
public function recommend()
|
|
{
|
|
$recommendModelOneFields = ['id', 'cover', 'name', 'description'];
|
|
$recommendModelOneTop = 1;
|
|
$recommendModelOneLimit = 2;
|
|
$recommendModelOneData = $this->skitsLibraryReposotpry->selectFindInTop($recommendModelOneFields, $recommendModelOneTop, $recommendModelOneLimit);
|
|
|
|
$recommendModelTwoFields = ['id', 'cover', 'name', 'description'];
|
|
$recommendModelTwoTop = 2;
|
|
$recommendModelTwoLimit = 3;
|
|
$recommendModelTwoData = $this->skitsLibraryReposotpry->selectFindInTop($recommendModelTwoFields, $recommendModelTwoTop, $recommendModelTwoLimit);
|
|
|
|
$maxCount = count($recommendModelTwoData);
|
|
|
|
foreach ($recommendModelTwoData as $recommendModelTwoKey => $recommendModelTwo) {
|
|
$recommendModelTwoData[$recommendModelTwoKey]['heat_degree'] = sprintf("%d%d", $maxCount--, mt_rand(1000, 9999));
|
|
}
|
|
|
|
$recommendModelThreeFields = ['id', 'cover', 'name', 'description'];
|
|
$recommendModelThreeTop = 3;
|
|
$recommendModelThreeLimit = 2;
|
|
$recommendModelThreeData = $this->skitsLibraryReposotpry->selectFindInTop($recommendModelThreeFields, $recommendModelThreeTop, $recommendModelThreeLimit);
|
|
|
|
$recommendModelFourFields = ['id', 'cover'];
|
|
$recommendModelFourTop = 4;
|
|
$recommendModelFourLimit = 4;
|
|
$recommendModelFourData = $this->skitsLibraryReposotpry->selectFindInTop($recommendModelFourFields, $recommendModelFourTop, $recommendModelFourLimit);
|
|
|
|
return [
|
|
'recommend_model_one_data' => $recommendModelOneData,
|
|
'recommend_model_two_data' => $recommendModelTwoData,
|
|
'recommend_model_three_data' => $recommendModelThreeData,
|
|
'recommend_model_four_data' => $recommendModelFourData
|
|
];
|
|
}
|
|
|
|
/**
|
|
* 追剧过程 function
|
|
*
|
|
* @author dotdotdot <6383846@qq.com>
|
|
* @date 2022-08-09
|
|
* @param array $params
|
|
* @return array
|
|
*/
|
|
public function chasingDrama(array $params)
|
|
{
|
|
$uid = $params['uid'];
|
|
|
|
$skitsLibraryRandFields = ['id', 'cover', 'name'];
|
|
$skitsLibraryRandOrder = ['rand()'];
|
|
$randData = $this->skitsLibraryReposotpry->selectByRand($skitsLibraryRandFields, $skitsLibraryRandOrder);
|
|
|
|
$signinFields = ['uid'];
|
|
|
|
$signinData = $this->signinReposotpry->selectByUidCount($signinFields, $uid);
|
|
|
|
$chasingDramaData = [];
|
|
|
|
$bookCaseFields = ['uid', 'articleid'];
|
|
$chasingDramaData = $this->bookCaseReposotpry->selectByUid($bookCaseFields, $uid);
|
|
|
|
$tmpSkitsLibraryData = [];
|
|
$tmpHistrotyData = [];
|
|
|
|
if (!empty($chasingDramaData)) {
|
|
$articleId = array_column($chasingDramaData, 'articleid');
|
|
$historyFields = ['articleid', 'chapterid', 'order'];
|
|
$historyData = $this->historyReposotpry->selectByUidInArticleid($historyFields, $uid, $articleId);
|
|
$skitsLibraryFields = ['id', 'cover', 'name'];
|
|
$skitsLibraryData = $this->skitsLibraryReposotpry->selectInId($skitsLibraryFields, $articleId);
|
|
$tmpHistrotyData = array_columns($historyData, 'articleid', ['order' , 'chapterid']);
|
|
$tmpSkitsLibraryData = array_columns($skitsLibraryData, 'id', ['cover', 'name']);
|
|
}
|
|
|
|
foreach ($chasingDramaData as $chasingDramaKey => $chasingDramaValue) {
|
|
$chasingDramaData[$chasingDramaKey]['cover'] = $tmpSkitsLibraryData[$chasingDramaValue['articleid']]['cover'];
|
|
$chasingDramaData[$chasingDramaKey]['name'] = $tmpSkitsLibraryData[$chasingDramaValue['articleid']]['name'];
|
|
$chasingDramaData[$chasingDramaKey]['order'] = 0;
|
|
$chasingDramaData[$chasingDramaKey]['sid'] = 0;
|
|
if(isset($tmpHistrotyData[$chasingDramaValue['articleid']]['chapterid'])){
|
|
$chasingDramaData[$chasingDramaKey]['order'] = $tmpHistrotyData[$chasingDramaValue['articleid']]['order'];
|
|
$chasingDramaData[$chasingDramaKey]['sid'] = $tmpHistrotyData[$chasingDramaValue['articleid']]['chapterid'];
|
|
}
|
|
if (!isset($tmpSkitsLibraryData[$chasingDramaValue['articleid']])) {
|
|
unset($chasingDramaData[$chasingDramaKey]);
|
|
}
|
|
}
|
|
|
|
$chasingDramaData = array_values($chasingDramaData);
|
|
|
|
return [
|
|
'chasing_drama_data' => $chasingDramaData,
|
|
'rand_data' => $randData,
|
|
'signin' => $signinData
|
|
];
|
|
}
|
|
|
|
/**
|
|
* 签到过程 function
|
|
*
|
|
* @author dotdotdot <6383846@qq.com>
|
|
* @date 2022-08-09
|
|
* @param array $params
|
|
* @return array
|
|
*/
|
|
public function signin(array $params)
|
|
{
|
|
$uid = $params['uid'];
|
|
$signinFields = ['uid'];
|
|
$countData = $this->signinReposotpry->selectByUidCount($signinFields, $uid);
|
|
|
|
if (!empty($countData)) {
|
|
throw new ApiException('今日已签到', EnumCode::SigninIsExist);
|
|
}
|
|
|
|
Db::startTrans();
|
|
try {
|
|
|
|
$eGold = rand(15, 30);
|
|
|
|
$signiniInsertData = [
|
|
'uid' => $uid,
|
|
'money' => $eGold,
|
|
'addtime' => time()
|
|
];
|
|
|
|
$this->signinReposotpry->insert($signiniInsertData);
|
|
|
|
$this->userReposotpry->updateIncEgoldByUid($uid, $eGold);
|
|
|
|
Db::commit();
|
|
|
|
return $eGold;
|
|
} catch (\Exception $e) {
|
|
Db::rollback();
|
|
throw new ApiException('签到失败,请稍后再试!', EnumCode::ServiceError);
|
|
}
|
|
}
|
|
}
|