Activity.class.php 13.8 KB
<?php

class Activity {
/**Activity:1.保存活动**/
    public function create($entity, $gifts = array()) {
        global $_W;
        $rec = array_elements(array('title', 'type', 'start', 'end', 'rules', 'guide', 'banner', 'share', 'limit', 'tag'), $entity);
        $rec['uniacid'] = $_W['uniacid'];
        $rec['amount'] = 0;
        $condition = '`uniacid`=:uniacid AND `title`=:title';
        $pars = array();
        $pars[':uniacid'] = $rec['uniacid'];
        $pars[':title'] = $rec['title'];
        $sql = 'SELECT * FROM ' . tablename('wwx_fxxt_red_activities') . " WHERE {$condition}";
        $exists = pdo_fetch($sql, $pars);
        if(!empty($exists)) {
            return error(-1, '这个活动名称已经使用, 请更换');
        }
        $ret = pdo_insert('wwx_fxxt_red_activities', $rec);
        if(!empty($ret)) {
            $id = pdo_insertid();
            foreach($gifts as $gift) {
                $r = array_elements(array('gift', 'quantity', 'rate'), $gift);
                $r['activity'] = $id;
                pdo_insert('wwx_fxxt_red_activity_gifts', $r);
            }
            return $id;
        }
        return false;
    }


/**Activity:2.根据活动ID查询活动内容及设置等**/
    public function getOne($id) {
        global $_W;
        $condition = '`uniacid`=:uniacid AND `actid`=:id';
        $pars = array();
        $pars[':uniacid'] = $_W['uniacid'];
        $pars[':id'] = $id;
        $sql = 'SELECT * FROM ' . tablename('wwx_fxxt_red_activities') . " WHERE {$condition}";
        $entity = pdo_fetch($sql, $pars);
        if(!empty($entity)) {
            $sql = 'SELECT * FROM ' . tablename('wwx_fxxt_red_activity_gifts') . " WHERE `activity`='{$id}'";
            $gifts = pdo_fetchall($sql);
            foreach($gifts as &$gift) {
                $sql = 'SELECT `title`,`type`,`tag` FROM ' . tablename('wwx_fxxt_red_gifts') . " WHERE `id`='{$gift['gift']}'";
                $gg = pdo_fetch($sql);
                $gift['title'] = $gg['title'];
                $gift['type'] = $gg['type'];
                $gift['tag'] = @unserialize($gg['tag']);
            }
            $entity['gifts'] = $gifts;
            $entity['share'] = @unserialize($entity['share']);
            $entity['limit'] = @unserialize($entity['limit']);
            $entity['tag'] = @unserialize($entity['tag']);
        }
        return $entity;
    }

/**Activity:3.根据活动ID编辑活动内容及设置等**/
    public function modify($id, $entity, $gifts = array()) {
        global $_W;
        $id = intval($id);
        $rec = array_elements(array('title', 'type', 'start', 'end', 'rules', 'guide', 'banner', 'share', 'limit', 'tag'), $entity);
        $rec['uniacid'] = $_W['uniacid'];
        $condition = '`uniacid`=:uniacid AND `title`=:title AND `actid`!=:id';
        $pars = array();
        $pars[':uniacid'] = $rec['uniacid'];
        $pars[':title'] = $rec['title'];
        $pars[':id'] = $id;
        $sql = 'SELECT * FROM ' . tablename('wwx_fxxt_red_activities') . " WHERE {$condition}";
        $exists = pdo_fetch($sql, $pars);
        if(!empty($exists)) {
            return error(-1, '这个活动名称已经使用, 请更换');
        }
        $ret = pdo_update('wwx_fxxt_red_activities', $rec, array('actid'=>$id, 'uniacid'=>$rec['uniacid']));
        if($ret !== false) {
            $sql = 'DELETE FROM ' . tablename('wwx_fxxt_red_activity_gifts') . " WHERE `activity`='{$id}'";
            pdo_query($sql);
            foreach($gifts as $gift) {
                $r = array_elements(array('gift', 'quantity', 'rate'), $gift);
                $r['activity'] = $id;
                pdo_insert('wwx_fxxt_red_activity_gifts', $r);
            }
        }
        return $ret !== false;
    }

/**Activity:4.分页活动列表**/
    public function getRecords($filters, $pindex = 0, $psize = 20, &$total = 0) {
        global $_W;
        $condition = '`r`.`uniacid`=:uniacid';
        $pars = array();
        $pars[':uniacid'] = $_W['uniacid'];
        if(!empty($filters['activity'])) {
            $condition .= ' AND `r`.`activity`=:activity';
            $pars[':activity'] = $filters['activity'];
        }
        if(!empty($filters['owner'])) {
            $condition .= ' AND `r`.`uid`=:owner';
            $pars[':owner'] = $filters['owner'];
        }
        if(!empty($filters['nickname'])) {
            $condition .= ' AND `f`.`nickname` LIKE :nickname';
            $pars[':nickname'] = "%{$filters['nickname']}%";
        }
        if(!empty($filters['status'])) {
            $condition .= ' AND `r`.`status`=:status';
            $pars[':status'] = $filters['status'];
        }
        $fields = "`r`.`id`,`f`.`openid`, `f`.`proxy`, `f`.`nickname`, `f`.`gender`, `f`.`state`, `f`.`city`, `f`.`avatar`, `r`.`uid`, `r`.`activity`, `r`.`gift`, `r`.`fee`, `r`.`log`, `r`.`status`, `r`.`created`, `r`.`completed`";
        $sql = "SELECT {$fields} FROM " . tablename('wwx_fxxt_red_records') . " AS `r` LEFT JOIN " . tablename('wwx_fxxt_red_fans') . " AS `f` ON (`r`.`uid` = `f`.`uid`)";
        $sql .= " WHERE {$condition} ORDER BY `completed` DESC, `created` DESC";
        if($pindex > 0) {
            $sql = "SELECT COUNT(*) FROM " . tablename('wwx_fxxt_red_records') . " AS `r` LEFT JOIN " . tablename('wwx_fxxt_red_fans') . " AS `f` ON (`r`.`uid` = `f`.`uid`)";
            $sql .= " WHERE {$condition}";
            $total = pdo_fetchcolumn($sql, $pars);
            $start = ($pindex - 1) * $psize;
            $sql = "SELECT {$fields} FROM" . tablename('wwx_fxxt_red_records') . " AS `r` LEFT JOIN " . tablename('wwx_fxxt_red_fans') . " AS `f` ON (`r`.`uid` = `f`.`uid`)";
            $sql .= " WHERE {$condition} ORDER BY `completed` DESC, `created` DESC LIMIT {$start},{$psize}";
        }
        $ds = pdo_fetchall($sql, $pars);
        if(!empty($ds)) {
            require_once WWX_FXXT_ROOT . '/class/Gift.class.php';
            require_once WWX_FXXT_ROOT . '/class/Fans.class.php';
            $g = new Gift();
            $f = new Fans();
            foreach($ds as &$row) {
                $row['gift'] = $g->getOne($row['gift']);/**GIFT:1.根据ID查询活动礼品分类**/
                $row['profile'] = $f->getProfile($row['uid']);/**FANS:1.根据用户UID查询用户信息**/
            }
        }
        return $ds;
    }

/**Activity:5.删除活动**/
    public function remove($id) {
        global $_W;
        $pars = array();
        $pars[':id'] = $id;
        pdo_query('DELETE FROM ' . tablename('wwx_fxxt_red_activity_gifts') . " WHERE `activity`=:id", $pars);

        $pars[':uniacid'] = $_W['uniacid'];
        pdo_query('DELETE FROM ' . tablename('wwx_fxxt_red_activities') . " WHERE `uniacid`=:uniacid AND `actid`=:id", $pars);
        pdo_query('DELETE FROM ' . tablename('wwx_fxxt_red_records') . " WHERE `uniacid`=:uniacid AND `activity`=:id", $pars);
        return true;
    }

/**Activity:6.查询所有活动**/
    public function getAll($filters, $pindex = 0, $psize = 20, &$total = 0) {
        global $_W;
        $condition = '`uniacid`=:uniacid';
        $pars = array();
        $pars[':uniacid'] = $_W['uniacid'];
        if(!empty($filters['type'])) {
            $condition .= ' AND `type`=:type';
            $pars[':type'] = $filters['type'];
        }
        if(!empty($filters['title'])) {
            $condition .= ' AND `title` LIKE :title';
            $pars[':title'] = "%{$filters['title']}%";
        }
        $sql = "SELECT * FROM " . tablename('wwx_fxxt_red_activities') . " WHERE {$condition} ORDER BY `start` DESC";
        if($pindex > 0) {
            $sql = "SELECT COUNT(*) FROM " . tablename('wwx_fxxt_red_activities') . " WHERE {$condition}";
            $total = pdo_fetchcolumn($sql, $pars);
            $start = ($pindex - 1) * $psize;
            $sql = "SELECT * FROM " . tablename('wwx_fxxt_red_activities') . " WHERE {$condition} ORDER BY `start` DESC LIMIT {$start},{$pindex}";
        }
        $ds = pdo_fetchall($sql, $pars);
        if(!empty($ds)) {
            foreach($ds as &$row) {
                $sql = "SELECT COUNT(*) FROM " . tablename('wwx_fxxt_red_activity_gifts') . " WHERE `activity`=" . intval($row['actid']);
                $row['gifts'] = pdo_fetchall($sql);
            }
        }
        return $ds;
    }

/**Activity:7.查询活动礼品信息:总数量、已发放、还剩余。**/
    public function calcCount($id) {
        global $_W;
        $condition = '`activity`=:id';
        $pars = array();
        $pars[':id'] = $id;
        $ret = array();
        $sql = 'SELECT SUM(`quantity`) FROM ' . tablename('wwx_fxxt_red_activity_gifts') . " WHERE {$condition}";
        $ret['total'] = pdo_fetchcolumn($sql, $pars);
        $condition = '`activity`=:id AND `uniacid`=:uniacid AND `gift`!=0';
        $pars = array();
        $pars[':id'] = $id;
        $pars[':uniacid'] = $_W['uniacid'];
        $sql = 'SELECT COUNT(*) FROM ' . tablename('wwx_fxxt_red_records') . " WHERE {$condition}";
        $ret['already'] = pdo_fetchcolumn($sql, $pars);
        $ret['surplus'] = $ret['total'] - $ret['already'];
        return $ret;
    }


/**Activity:8.查询活动红包领取信息。**/
    public function getRecord($uid, $actid) {
        global $_W;
        $condition = "`uniacid`=:uniacid AND `uid`=:uid AND `activity`=:activity";
        $pars = array();
        $pars[':uniacid'] = $_W['uniacid'];
        $pars[':uid'] = $uid;
        $pars[':activity'] = $actid;
        $sql = 'SELECT * FROM ' . tablename('wwx_fxxt_red_records') . " WHERE {$condition}";
        $rec = pdo_fetch($sql, $pars);
        return $rec;
    }

/**Activity:9.更新用户领取红包信息。**/
    public function confirm($id) {
        global $_W;
        $filters = array();
        $filters['uniacid'] = $_W['uniacid'];
        $filters['id'] = $id;
        
        $rec = array();
        $rec['status'] = 'complete';
        $rec['completed'] = TIMESTAMP;
        return pdo_update('wwx_fxxt_red_records', $rec, $filters);
    }

/**Activity:10.抢红包。**/
    public function grap($user, $activity) {
        global $_W;
        $uniacid = $_W['uniacid'];
        $pointer = rand(0, 9999);
        $down = 0;
        $up = 0;
        $hitGift = null;
        foreach($activity['gifts'] as $gift) {
            $up += $gift['rate'] * 100;
            $condition = '`activity`=:id AND `uniacid`=:uniacid AND `gift`=:gift';
            $pars = array();
            $pars[':id'] = $activity['actid'];
            $pars[':uniacid'] = $uniacid;
            $pars[':gift'] = $gift['id'];
            $sql = "SELECT COUNT(*) FROM " . tablename('wwx_fxxt_red_records') . " WHERE {$condition}";
            $count = pdo_fetchcolumn($sql, $pars);
            if($count < $gift['quantity'] && $pointer > $down && $up >= $pointer) {
                $hitGift = $gift;
                break;
            }
            $down = $up;
        }
        $r = array();
        $r['uniacid'] = $uniacid;
        $r['uid'] = $user['uid'];
        $r['activity'] = $activity['actid'];
        $r['log'] = '';
        $r['created'] = TIMESTAMP;
        $r['completed'] = 0;

        if(empty($hitGift)) {
            $r['fee'] = '0';
            $r['gift'] = '0';
            $r['status'] = 'none';
        } else {
            if($hitGift['type'] == 'cash') {
                $fee = rand($hitGift['tag']['downline'] * 100, $hitGift['tag']['upline'] * 100);
                $r['fee'] = sprintf('%.2f', $fee / 100);
                
                //记录总数
                $sql = "UPDATE " . tablename('wwx_fxxt_red_activities') . ' SET `amount`=`amount`+:amount WHERE `actid`=:actid';
                $pars = array();
                $pars[':amount'] = floatval($r['fee']);
                $pars[':actid'] = $activity['actid'];
                pdo_query($sql, $pars);
            } else {
                $r['fee'] = $this->generateCode();/**Activity:11.查询领奖信息。**/
            }
            $r['gift'] = $hitGift['gift'];
            $r['status'] = 'created';
        }

        $ret = pdo_insert('wwx_fxxt_red_records', $r);
        if(empty($ret)) {
            return error(-2, '红包领取失败, 请稍后来重试');
        } else {
            $r['id'] = pdo_insertid();
            return $r;
        }
    }

/**Activity:11.查询领奖信息。**/
    public function generateCode() {
        global $_W;
        do{
            $code = random(10, true);
            $condition = '`uniacid`=:uniacid AND `code`=:code';
            $pars = array();
            $pars[':uniacid'] = $_W['uniacid'];
            $pars[':code'] = $code;
            $sql = "SELECT * FROM " . tablename('wwx_fxxt_red_records') . " WHERE {$condition}";
            $exists = pdo_fetch($sql, $pars);
        } while(!empty($exists));
        return $code;
    }
















    public function queryRecordCode($code) {
        global $_W;
        $condition = "`uniacid`=:uniacid AND `code`=:code";
        $pars = array();
        $pars[':uniacid'] = $_W['uniacid'];
        $pars[':code'] = $code;
        $sql = "SELECT * FROM " . tablename('wwx_fxxt_red_records') . " WHERE {$condition}";
        $rec = pdo_fetch($sql, $pars);
        if(empty($rec)) {
            return error(-1, '消费码错误');
        }
        if($rec['status'] == 'complete') {
            $time = date('Y-m-d H:i', $rec['completed']);
            $rec['error'] = error(-2, "这个消费码已经于 {$time} 使用过了");
        }
        require_once WWX_FXXT_ROOT . '/class/Gift.class.php';
        $g = new Gift();
        $gift = $g->getOne($rec['gift']);
        if(empty($gift)) {
            $rec['error'] = error(-3, '这个消费码的商品已经失效了');
        }
        if($gift['type'] != 'coupon') {
            $rec['error'] = error(-3, '这个消费码的商品属于现金产品, 不能被消费');
        }
        $rec['tag'] = @unserialize($rec['tag']);
        $rec['gift'] = $gift;
        $rec['activity'] = $this->getOne($rec['activity']);
        return $rec;
    }




    





}