caipan_shop_admin/app/repository/TaskRepository.php

140 lines
5.4 KiB
PHP
Executable File

<?php
namespace app\repository;
use app\model\Task;
use app\model\Task as TaskModel;
use app\model\TaskAccount;
use app\service\Repository;
use app\traits\task\TaskAccountTrait;
use app\traits\task\TaskCompletionRecordTrait;
use think\Model;
/**
* 任务
*
* @package app\repository
* @method self getInstance(Model $model = null) static
*/
class TaskRepository extends Repository
{
use TaskCompletionRecordTrait;
use TaskAccountTrait;
//当前进行中的任务
public function getDoingTaskCount($taskId = 0)
{
return $this->model->when($taskId != 0, function ($q) use ($taskId) {
$q->where("task_id", $taskId);
})->where("status", Task::COMMON_ON)->count();
}
/**
* 过滤用户的任务
* */
public function filterUserTask($item, $account)
{
switch ($item->type) {
//分享
case TaskModel::TYPE_SHARE :
$accountTask = TaskRepository::getInstance()->userTask($item["id"], $account["id"]);
//没有提交 或者 已提交的任务状态
$item->account_status = empty($accountTask) ? TaskAccount::$status_notsubmit : $accountTask["status"];
$completed_quantity = TaskRepository::getInstance()->getShareTaskSuccess($item, $account);
if ($item->account_status == TaskAccount::$status_success) {
$item->completed_quantity = ($completed_quantity > $item["cycle"]) ? $item["cycle"] : $completed_quantity;
} else {
$item->completed_quantity = $completed_quantity;
}
break;
//线上签到
case TaskModel::TYPE_SIGN_IN :
$accountTask = TaskRepository::getInstance()->userTask($item["id"], $account["id"]);
//没有提交 或者 已提交的任务状态
$item->account_status = empty($accountTask) ? TaskAccount::$status_notsubmit : $accountTask["status"];
$completed_quantity = TaskRepository::getInstance()->getSignInTaskSuccess($item, $account);
if ($item->account_status == TaskAccount::$status_success) {
$item->completed_quantity = ($completed_quantity > $item["cycle"]) ? $item["cycle"] : $completed_quantity;
} else {
$item->completed_quantity = $completed_quantity;
}
break;
//线下签到
case TaskModel::TYPE_OFFLINE_SIGN_IN :
$accountTask = TaskRepository::getInstance()->userTask($item["id"], $account["id"]);
//没有提交 或者 已提交的任务状态
$item->account_status = empty($accountTask) ? TaskAccount::$status_notsubmit : $accountTask["status"];
$completed_quantity = TaskRepository::getInstance()->getOfflineSignInTaskSuccess($item, $account);
if ($item->account_status == TaskAccount::$status_success) {
$item->completed_quantity = ($completed_quantity > $item["cycle"]) ? $item["cycle"] : $completed_quantity;
} else {
$item->completed_quantity = $completed_quantity;
}
break;
//截图分享
case TaskModel::TYPE_SHARE_SCREENSHOTS :
$item = TaskRepository::getInstance()->getShareScreenshotsTaskSuccess($item, $account);
break;
}
return $item;
}
/**
* 检查完成条件
* */
public function checkCompletionConditions($task, $accout)
{
switch ($task->type) {
//分享
case TaskModel::TYPE_SHARE :
return TaskRepository::getInstance()->checkShareTaskCompletionConditions($task, $accout);
break;
//线上签到
case TaskModel::TYPE_SIGN_IN :
return TaskRepository::getInstance()->checkSignInTaskCompletionConditions($task, $accout);
break;
//线下签到
case TaskModel::TYPE_OFFLINE_SIGN_IN :
return TaskRepository::getInstance()->checkOfflineSignInTaskCompletionConditions($task, $accout);
break;
//截图分享
case TaskModel::TYPE_SHARE_SCREENSHOTS :
if (empty(input("image"))) {
return false;
}
return TaskRepository::getInstance()->checkShareScreenshotsTaskCompletionConditions($task, $accout);
break;
}
}
/**
* 完成一个任务
* */
public function completeTask($task, $accout)
{
switch ($task->type) {
//分享
case TaskModel::TYPE_SHARE :
return TaskRepository::getInstance()->completeShareTask($task, $accout);
break;
//线上签到
case TaskModel::TYPE_SIGN_IN :
return TaskRepository::getInstance()->completeSignInTask($task, $accout);
break;
//线下签到
case TaskModel::TYPE_OFFLINE_SIGN_IN :
return TaskRepository::getInstance()->completeOfflineSignInTask($task, $accout);
break;
//截图分享
case TaskModel::TYPE_SHARE_SCREENSHOTS :
return TaskRepository::getInstance()->completeShareScreenshotsTask($task, $accout);
break;
}
}
}