2023-01-29 10:26:52 +08:00

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);
}
}
}