test
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

200 lines
7.8 KiB

<?php
defined('IN_IA') or exit('Access Denied');
class Wlsign {
// 更新用户签到数据
static function updateSignmember($update, $where = array()) {
global $_W;
$where['mid'] = $_W['mid'];
$res = pdo_update(PDO_NAME . 'signmember', $update, $where);
if ($res) {
return 1;
} else {
return 0;
}
}
// 查询用户签到数据
static function querySignmember($select, $where = array()) {
global $_W;
$where['mid'] = $_W['mid'];
$member = Util::getSingelData($select, PDO_NAME . 'signmember', $where);
if ($member) {
$member['integral'] = intval($_W['wlmember']['credit1']);
$user = pdo_get('wlmerchant_member', array('id' => $_W['mid']), array('avatar', 'nickname'));
$member['nickname'] = $user['nickname'];
$member['avatar'] = $user['avatar'];
pdo_update(PDO_NAME . 'signmember', array('integral' => $member['integral'], 'nickname' => $member['nickname'], 'avatar' => $member['avatar']), array('id' => $member['id']));
return $member;
} else {
if ($_W['mid']) {
$user = pdo_get('wlmerchant_member', array('id' => $_W['mid']), array('avatar', 'nickname'));
$member['uniacid'] = $_W['uniacid'];
$member['mid'] = $_W['mid'];
$member['times'] = 0;
$member['totaltimes'] = 0;
$member['integral'] = $_W['member']['credit1'];
$member['createtime'] = time();
$member['avatar'] = $user['avatar'];
$member['nickname'] = $user['nickname'];
pdo_insert(PDO_NAME . 'signmember', $member);
return $member;
}
}
}
// 查询单条用户签到记录
static function queryRecord($select, $date) {
global $_W;
$where['mid'] = $_W['mid'];
$where['date'] = $date;
return Util::getSingelData($select, PDO_NAME . 'signrecord', $where);
}
// 保存用户签到记录
static function saveRecord($record, $param = array()) {
global $_W;
if (!is_array($record)) return FALSE;
$record['uniacid'] = $_W['uniacid'];
$record['mid'] = $_W['mid'];
$record['createtime'] = time();
if (empty($param)) {
pdo_insert(PDO_NAME . 'signrecord', $record);
return pdo_insertid();
}
return FALSE;
}
// 获取用户记录排名
static function getMemberlist() {
global $_W;
$goodsInfo = pdo_fetchall("SELECT * FROM " . tablename('wlmerchant_signmember') . "WHERE uniacid = {$_W['uniacid']} AND totaltimes > 0 ORDER BY times DESC limit 20");
return $goodsInfo;
}
// 查询单条用户领奖记录
static function queryReceive($select, $date, $total) {
global $_W;
$where['mid'] = $_W['mid'];
$where['date'] = $date;
$where['total'] = $total;
return Util::getSingelData($select, PDO_NAME . 'signreceive', $where);
}
// 保存用户领取记录
static function saveReceive($receive, $param = array()) {
global $_W;
if (!is_array($receive)) return FALSE;
$receive['uniacid'] = $_W['uniacid'];
$receive['mid'] = $_W['mid'];
$receive['createtime'] = time();
if (empty($param)) {
pdo_insert(PDO_NAME . 'signreceive', $receive);
return pdo_insertid();
}
return FALSE;
}
//计划任务
static function doTask() {
global $_W;
//签到周期信息处理
$time = time();
$begin = mktime(0, 0, 0, date('m'), 1, date('Y'));
$end = mktime(0, 3, 59, date('m'), 1, date('Y'));
if ($time > $begin && $time < $end) {
$settings = Setting::wlsetting_read('wlsign');
$members = pdo_getall('wlmerchant_signmember', array('uniacid' => $_W['uniacid']));
if ($members) {
if ($settings['cycletype'] == 1) {
foreach ($members as $key => &$v) {
$v['record'] = '';
$res = pdo_update('wlmerchant_signmember', $v, array('id' => $v['id']));
}
} else {
foreach ($members as $key => &$v) {
$v['record'] = '';
$v['totaltimes'] = '';
$v['total'] = '';
$res = pdo_update('wlmerchant_signmember', $v, array('id' => $v['id']));
}
}
}
}
//签到统计(排行) 信息处理
//获取昨天签到了的所有用户的id
$startTime = strtotime("-1 day",strtotime(date("Y-m-d 00:00:00")));//昨天开始时间
$endTime = strtotime(date("Y-m-d 00:00:00",time()));//今天开始时间
//获取昨天签到用户id信息
$where = " WHERE createtime > {$startTime} AND createtime < {$endTime} ";
$sql = " SELECT * FROM ".tablename(PDO_NAME."signrecord") .$where." GROUP BY mid ";
$list = pdo_fetchall($sql);
$mids = array_column($list,'mid');
$updateWhere = " WHERE uniacid = {$_W['uniacid']} ";
if(is_array($mids) && count($mids) > 0) $updateWhere .= ' AND mid NOT IN ('.implode(',',$mids).')';
//修改信息
pdo_fetch('UPDATE '.tablename(PDO_NAME."signmember")." set times = 0 ".$updateWhere);
}
/**
* Comment: 获取签到总数
* Author: zzw
* Date: 2019/8/12 11:27
*/
public static function getTotal($where = '') {
global $_W;
return pdo_fetchcolumn("SELECT count(*) FROM " . tablename(PDO_NAME . "signrecord")
. " WHERE uniacid = {$_W['uniacid']} AND {$where}");
}
/**
* Comment: 获取对应的签到排行榜信息
* Author: zzw
* Date: 2019/10/25 9:26
* @param $field
* @return mixed
*/
public static function getRankingList($field) {
global $_W;
#1、基本条件获取
$where = " WHERE uniacid = {$_W['uniacid']} ";
#2、获取当前用户签到信息 建立用户默认排行信息,默认排行第一位
$member = self::querySignmember('*');
$user['nickname'] = $member['nickname'];//用户昵称
$user['avatar'] = $member['avatar'];//用户头像
$user['orders'] = 0;//用户排行
$user['distance'] = 0;//对前一个用户的距离
$user[$field] = $member[$field];//主要字段:用户连续签到次数/用户总签到次数/用户积分总数
//获取排行榜信息列表
$list = pdo_fetchall("SELECT @key:=@key+1 as `key`,nickname,avatar,{$field},mid FROM "
. tablename(PDO_NAME . "signmember") . " ,(select @key:=0) as a "
. $where . " AND {$field} > 0 AND
(SELECT id FROM ".tablename(PDO_NAME."member")." WHERE id = mid ) > 0
ORDER BY {$field} DESC,id DESC LIMIT 10 ");
//获取当前用户的排行 即距离前一名的差距
if (is_array($list) && count($list) > 0) {
$newList = array_column($list, 'key', 'mid');
if ($newList[$_W['mid']]) {
//当前用户存在排行榜中
$keys = $newList[$_W['mid']] - 1;
$user['orders'] = $keys + 1;
//判断是否为第一名 做出操作
if ($keys != 0) {
$user['distance'] = $list[$keys - 1][$field] - $user[$field];
}
} else {
//当前用户未入排行榜
$user['orders'] = '-1';
$user['distance'] = $list[count($list) - 1][$field] - $user[$field];
}
}
#3、数据拼装
$data['list'] = $list;
$data['user'] = $user;
return $data;
}
}