212 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			212 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace app\admin\logic\sign_daily;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use app\common\basics\Logic;
							 | 
						||
| 
								 | 
							
								use app\common\model\sign_daily\SignDaily;
							 | 
						||
| 
								 | 
							
								use app\common\model\sign_daily\UserSign;
							 | 
						||
| 
								 | 
							
								use app\common\server\ConfigServer;
							 | 
						||
| 
								 | 
							
								use app\common\server\UrlServer;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * 签到逻辑
							 | 
						||
| 
								 | 
							
								 * Class SignDailyLogic
							 | 
						||
| 
								 | 
							
								 * @package app\admin\logic\sign_daily
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class SignDailyLogic extends Logic
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 连续签到列表
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/2/17 14:30
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function lists()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $where[] = ['type', '=', 2];
							 | 
						||
| 
								 | 
							
								        $where[] = ['del', '=', 0];
							 | 
						||
| 
								 | 
							
								        $count = SignDaily::where($where)->count();
							 | 
						||
| 
								 | 
							
								        $lists = SignDaily::where($where)->select();
							 | 
						||
| 
								 | 
							
								        foreach ($lists as $key => $sign) {
							 | 
						||
| 
								 | 
							
								            $tips = '';
							 | 
						||
| 
								 | 
							
								            if (1 == $sign['integral_status'] && $sign['integral'] > 0) {
							 | 
						||
| 
								 | 
							
								                $tips .= '赠送' . $sign['integral'] . '积分;';
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (1 == $sign['growth_status'] && $sign['growth'] > 0) {
							 | 
						||
| 
								 | 
							
								                $tips .= '赠送' . $sign['growth'] . '成长值;';
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $lists[$key]['award_tips'] = $tips;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return ['count' => $count, 'lists' => $lists];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 签到记录
							 | 
						||
| 
								 | 
							
								     * @param $get
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/2/17 14:31
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function record($get)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $where = [];
							 | 
						||
| 
								 | 
							
								        $where[] = ['us.del', '=', 0];
							 | 
						||
| 
								 | 
							
								        $where[] = ['u.del', '=', 0];
							 | 
						||
| 
								 | 
							
								        if (isset($get['keyword']) && $get['keyword']) {
							 | 
						||
| 
								 | 
							
								            $where[] = [$get['type'], 'like', '%' . $get['keyword'] . '%'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $field = 'us.user_id,nickname,avatar,mobile,sex,u.create_time ,days,integral,growth,
							 | 
						||
| 
								 | 
							
								            continuous_integral, continuous_growth,sign_time,mobile,us.sign_time';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $count = UserSign::alias('us')
							 | 
						||
| 
								 | 
							
								            ->join('user u', 'u.id = us.user_id')
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->count();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $lists = UserSign::alias('us')
							 | 
						||
| 
								 | 
							
								            ->join('user u', 'u.id = us.user_id')
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->field($field)
							 | 
						||
| 
								 | 
							
								            ->order('us.id desc')
							 | 
						||
| 
								 | 
							
								            ->page($get['page'], $get['limit'])
							 | 
						||
| 
								 | 
							
								            ->select();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($lists as &$item) {
							 | 
						||
| 
								 | 
							
								            $item['sign_time'] = date('Y-m-d H:i:s', $item['sign_time']);
							 | 
						||
| 
								 | 
							
								            $item['avatar'] = UrlServer::getFileUrl($item['avatar']);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return ['count' => $count, 'lists' => $lists];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取每日签到规则
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/2/17 14:31
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getSignRule()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $data = SignDaily::where(['type' => 1])->findOrEmpty();
							 | 
						||
| 
								 | 
							
								        $config = [
							 | 
						||
| 
								 | 
							
								            'instructions' => ConfigServer::get('sign_rule', 'instructions'),
							 | 
						||
| 
								 | 
							
								            'dailySign' => $data
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        return $config;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 设置每日签到规则
							 | 
						||
| 
								 | 
							
								     * @param $post
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/2/17 14:31
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function setSignRule($post)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $rule = SignDaily::where(['del' => 0, 'type' => 1])->findOrEmpty();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $data = [
							 | 
						||
| 
								 | 
							
								                'integral' => empty($post['integral']) ? 0 : $post['integral'],
							 | 
						||
| 
								 | 
							
								                'growth' => empty($post['growth']) ? 0 : $post['growth'],
							 | 
						||
| 
								 | 
							
								                'integral_status' => $post['integral_status'],
							 | 
						||
| 
								 | 
							
								                'growth_status' => $post['growth_status'],
							 | 
						||
| 
								 | 
							
								            ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if ($rule->isEmpty()) {
							 | 
						||
| 
								 | 
							
								                $data['type'] = 1;
							 | 
						||
| 
								 | 
							
								                $data['days'] = 0;
							 | 
						||
| 
								 | 
							
								                SignDaily::create($data);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                SignDaily::update($data, ['id' => $rule['id']]);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            ConfigServer::set('sign_rule', 'instructions', $post['instructions']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            self::$error = $e->getMessage();
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 添加连续签到奖励
							 | 
						||
| 
								 | 
							
								     * @param $post
							 | 
						||
| 
								 | 
							
								     * @return SignDaily|\think\Model
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/2/17 14:31
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function add($post)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return SignDaily::create(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'type' => '2',
							 | 
						||
| 
								 | 
							
								                'days' => $post['days'],
							 | 
						||
| 
								 | 
							
								                'integral' => $post['integral'],
							 | 
						||
| 
								 | 
							
								                'integral_status' => $post['integral_status'],
							 | 
						||
| 
								 | 
							
								                'growth' => $post['growth'],
							 | 
						||
| 
								 | 
							
								                'growth_status' => $post['growth_status'],
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 编辑连续签到奖励
							 | 
						||
| 
								 | 
							
								     * @param $post
							 | 
						||
| 
								 | 
							
								     * @return SignDaily
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/2/17 14:31
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function edit($post)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return SignDaily::update([
							 | 
						||
| 
								 | 
							
								            'id' => $post['id'],
							 | 
						||
| 
								 | 
							
								            'days' => $post['days'],
							 | 
						||
| 
								 | 
							
								            'integral' => $post['integral'],
							 | 
						||
| 
								 | 
							
								            'integral_status' => $post['integral_status'],
							 | 
						||
| 
								 | 
							
								            'growth' => $post['growth'],
							 | 
						||
| 
								 | 
							
								            'growth_status' => $post['growth_status'],
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 删除连续签到奖励
							 | 
						||
| 
								 | 
							
								     * @param $id
							 | 
						||
| 
								 | 
							
								     * @return SignDaily
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/2/17 14:32
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function del($id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return SignDaily::update(['del' => 1, 'id' => $id]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取连续签到奖励详情
							 | 
						||
| 
								 | 
							
								     * @param $id
							 | 
						||
| 
								 | 
							
								     * @return array|\think\Model
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/2/17 14:32
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getSignDaily($id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return SignDaily::findOrEmpty($id);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |