// +---------------------------------------------------------------------- namespace App\Services; use App\Models\PracticeLogsModel; use App\Models\PracticesModel; /** * 修行项目管理-服务类 * @author wesmiler * @since 2020/11/11 * Class PracticesService * @package App\Services */ class PracticesService extends BaseService { protected static $instance = null; /** * 构造函数 * @author wesmiler * @since 2020/11/11 * PracticesService constructor. */ public function __construct() { $this->model = new PracticesModel(); } /** * 静态入口 * @return PracticesService|null */ public static function make(){ if(!self::$instance){ self::$instance = new PracticesService(); } return self::$instance; } /** * 获取列表 * @return array * @since 2020/11/11 * @author wesmiler */ public function getDataList($userId) { $params = request()->all(); $page = isset($params['pageSize']) ? intval($params['pageSize']) : PAGE; $pageSize = isset($params['pageSize']) ? intval($params['pageSize']) : PERPAGE; $dataList = $this->model::from('practice_items as a') ->where(function ($query) use ($params) { $query->where(['a.mark'=>1,'a.status'=> 1]); }) ->select(['a.*']) ->orderBy('a.sort', 'asc') ->orderBy('a.create_time', 'desc') ->paginate($pageSize); $dataList = $dataList ? $dataList->toArray() : []; if ($dataList) { foreach ($dataList['data'] as &$item) { $item['thumb'] = $item['thumb'] ? get_image_url($item['thumb']) : ''; $item['create_time'] = $item['create_time'] ? datetime($item['create_time'],'Y-m-d H:i:s') : ''; $item['complete_status'] = 0; if($this->check($userId,$item['id'])){ $item['complete_status'] = 1; } } unset($item); } return [ 'code' => 0, 'success'=> true, 'msg' => '操作成功', 'count' => isset($dataList['total']) ? $dataList['total'] : 0, 'data' => isset($dataList['data']) ? $dataList['data'] : 0, ]; } /** * 获取列表 * @return array * @since 2020/11/11 * @author wesmiler */ public function getList() { $params = request()->all(); return parent::getList(); } /** * 添加或编辑 * @return array * @since 2020/11/11 * @author wesmiler */ public function edit() { $data = request()->all(); // 图片处理 $image = trim($data['thumb']); $id = isset($data['id']) ? $data['id'] : 0; if (!$id && !$image) { return message('请上传图标', false); } if (strpos($image, "temp")) { $data['thumb'] = save_image($image, 'item'); } else { $data['thumb'] = str_replace(IMG_URL, "", $data['thumb']); } $data['update_time'] = time(); return parent::edit($data); // TODO: Change the autogenerated stub } /** * 今日是否已经完成 * @param $userId * @param $itemId * @return bool */ public function check($userId, $itemId){ $cacheKey ="caches:practices:check_{$userId}_{$itemId}"; if(RedisService::get($cacheKey)){ return true; } $logInfo = PracticeLogsModel::where(['item_id'=> $itemId,'user_id'=> $userId,'mark'=> 1,'status'=> 1]) ->where('create_time','>',strtotime(date('Y-m-d'))) ->select(['id','item_id','user_id','remark']) ->orderBy('create_time','desc') ->first(); if($logInfo){ RedisService::set($cacheKey, $logInfo, rand(5, 10)); return true; } return false; } /** * @param $userId * @param $itemId * @param $remark * @return array|false */ public function saveLog($userId, $itemId, $remark){ $cacheKey ="caches:practices:logs_{$userId}_{$itemId}"; if(RedisService::get($cacheKey)){ return false; } $logInfo = PracticeLogsModel::where(['item_id'=> $itemId,'user_id'=> $userId,'mark'=> 1,'status'=> 1]) ->where('create_time','>',strtotime(date('Y-m-d'))) ->select(['id','item_id','user_id','remark']) ->orderBy('create_time','desc') ->first(); if($logInfo){ RedisService::set($cacheKey, $logInfo, rand(5, 10)); return false; } PracticeLogsModel::where(['item_id'=> $itemId,'user_id'=> $userId,'mark'=> 1,'status'=> 1]) ->where('create_time','<',strtotime(date('Y-m-d'))-14*86400) ->delete(); $data = [ 'item_id'=> $itemId, 'user_id'=> $userId, 'remark'=> $remark, 'create_time'=> time(), 'update_time'=> time(), 'status'=> 1, ]; if(PracticeLogsModel::insertGetId($data)){ RedisService::set($cacheKey, $data, rand(5, 10)); return message('操作成功', true); } return message('操作失败', false); } }