rabin 7 months ago
parent
commit
c1caf2d293

+ 1 - 7
config/setting.php

@@ -7,15 +7,9 @@ return array
     'lang' => 'zh-cn',
     'lang_pack' => array('zh-cn' => '简体中文', 'en' => '英文'),
 
-    # 定义类型 订单表会按照这个自动分区,-4\-5\-6\7\8\9是预留
+    # 定义类型 订单表会按照这个自动分区,7\8\9是预留
     'type' => array
     (
-        -1 => 'info',
-        -2 => 'vip',
-        -3 => 'agent',
-        -4 => '',
-        -5 => '',
-        -6 => '',
         1 => 'content',
         2 => 'func',
         3 => 'goods',

+ 24 - 7
src/place/api/Agent.php

@@ -4,18 +4,35 @@ use Place;
 use Place\Lib\Main;
 class Agent extends Main
 {
-    protected $login = true;
+    #protected $login = true;
     protected $entry = true;
-    # 代理列表
-    public function agent()
+
+    # 会员列表
+    public function list()
+    {
+        $data = Dever::load('agent', 'place')->getData();
+        return Place::result($data);
+    }
+
+
+    # 信息
+    public function info()
     {
-        $data['agent'] = Dever::load('agent', 'place')->getList(false);
-        return $data;
+        if (!Place::$uid) {
+            $this->showLogin();
+        }
+        $data = Dever::load('agent', 'place')->getInfo();
+        return Place::result($data);
     }
 
-    # 购买代理
+    
+
+    # 购买
     public function buy()
     {
-        $id = Dever::input('id');
+        if (!Place::$uid) {
+            $this->showLogin();
+        }
+        return Dever::load('agent', 'place')->pay();
     }
 }

+ 12 - 1
src/place/api/User.php

@@ -10,12 +10,23 @@ class User extends Main
     # 我的信息
     public function info()
     {
+        $data['vip'] = 2;
+        $vip = Dever::db('vip', 'place')->find([]);
+        if ($vip) {
+            $data['vip'] = 1;
+        }
+        $data['agent'] = 2;
+        $agent = Dever::db('agent', 'place')->find([]);
+        if ($agent) {
+            $data['agent'] = 1;
+        }
+        /*
         if (Place::$user['vip_id'] > 0) {
             $data['vip'] = Dever::db('vip', 'place')->find(Place::$user['vip_id']);
         }
         if (Place::$user['agent_id'] > 0) {
             $data['agent'] = Dever::db('agent', 'place')->find(Place::$user['agent_id']);
-        }
+        }*/
         return Place::result($data);
     }
 

+ 21 - 4
src/place/api/Vip.php

@@ -4,18 +4,35 @@ use Place;
 use Place\Lib\Main;
 class Vip extends Main
 {
-    protected $login = true;
+    #protected $login = true;
     protected $entry = true;
+
     # 会员列表
     public function list()
     {
-        $data['vip'] = Dever::load('vip', 'place')->getList(false);
-        return $data;
+        $data = Dever::load('vip', 'place')->getData();
+        return Place::result($data);
+    }
+
+
+    # 会员信息
+    public function info()
+    {
+        if (!Place::$uid) {
+            $this->showLogin();
+        }
+        $data = Dever::load('vip', 'place')->getInfo();
+        return Place::result($data);
     }
 
+    
+
     # 购买会员
     public function buy()
     {
-        $id = Dever::input('id');
+        if (!Place::$uid) {
+            $this->showLogin();
+        }
+        return Dever::load('vip', 'place')->pay();
     }
 }

+ 2 - 2
src/place/lib/Client.php

@@ -40,7 +40,7 @@ class Client
                 # 获取时效内销量
                 $day = time() - $v['day']*86400;
                 $where = array('uid' => Place::$uid, 'type' => $type, 'day' => array('>=', $day));
-                $sell = Dever::db('client_sell', 'place')->find($where, $set);
+                $sell = Dever::db('order_stat', 'place')->find($where, $set);
                 if ($sell && $sell['num'] >= 0) {
                     # 获取自定义销量
                     $resource = Dever::db('client_price', $app)->select(array('client_id' => $v['id']), array('order' => 'sell desc'));
@@ -53,7 +53,7 @@ class Client
                                 $result['list'][] = $v;
                                 if (!$price) {
                                     $where['type_id'] = $v1['info_id'];
-                                    $sell = Dever::db('client_sell', 'place')->find($where, $set);
+                                    $sell = Dever::db('order_stat', 'place')->find($where, $set);
                                     if ($sell && $sell['num'] >= $v1['sell']) {
                                         $price = $v['value'];
                                     }

+ 2 - 2
src/place/lib/Price.php

@@ -16,8 +16,8 @@ class Price
         if ($order) {
             $result['value'] = $order['cash'];
         } else {
-            $vip = Dever::load('vip', 'place')->getPrice($info['price'], $info['id'], $app, $type);
-            $agent = Dever::load('agent', 'place')->getPrice($info['price'], $info['id'], $app, $type);
+            $vip = Dever::load('vip', 'place')->getResourcePrice($info['price'], $info['id'], $app, $type);
+            $agent = Dever::load('agent', 'place')->getResourcePrice($info['price'], $info['id'], $app, $type);
             if ($this->getAlone($vip, $agent, $result)) {
                 return $result;
             }

+ 135 - 1
src/place/lib/Vip.php

@@ -18,6 +18,57 @@ class Vip
         }
     }
 
+    public function getInfo()
+    {
+        $data = array();
+        if (Place::$user[$this->type . '_id'] > 0) {
+            $data['info'] = Dever::db($this->type, 'place')->find(Place::$user[$this->type . '_id']);
+            $data['price'] = Dever::db($this->type . '_price', 'place')->select(array($this->type . '_id' => $data['info']['id']), array('col' => 'per,total,type'));
+            if ($data['price']) {
+                foreach ($data['price'] as &$v) {
+                    if ($v['total'] > 0) {
+                        if ($v['type'] == 1) {
+                            $v['total'] = '每日可下载共'.$v['total'].'次';
+                        } elseif ($v['type'] == 2) {
+                            $v['total'] = '每日可使用共'.$v['total'].'次';
+                        } elseif ($v['type'] == 3) {
+                            $v['total'] = '每次最多购买'.$v['total'].'个';
+                        }
+                    }
+                    
+                    $v['per'] = $v['per'] . '%';
+                    $v['name'] = Dever::db('resource', 'place')->value('type', $v['type']);
+                }
+            }
+        }
+        return $data;
+    }
+
+    # 获取所有数据
+    public function getData()
+    {
+        $cur = Place::$user[$this->type . '_id'] ?? 0;
+        $user = array();
+        if ($cur > 0) {
+            $user = Dever::db($this->type, 'place')->find($cur);
+        }
+        $data['list'] = $this->data;
+        if ($data['list']) {
+            foreach ($data['list'] as &$v) {
+                # 判断哪个已经买过了,不用再买了
+                $v['sprice'] = $v['price'];
+                # 1是可以购买
+                $v['buy'] = 1;
+                if ($user && $user['level'] >= $v['level']) {
+                    $v['buy'] = 2;
+                } elseif ($v['pay'] == 1) {
+                    $v['price'] -= $user['price'];
+                }
+            }
+        }
+        return $data;
+    }
+
     # 获取列表
     public function getList($state = true)
     {
@@ -36,7 +87,7 @@ class Vip
     }
 
     # 获取购买资源的价格列表
-    public function getPrice($price, $info_id, $app, $type)
+    public function getResourcePrice($price, $info_id, $app, $type)
     {
         $result = array();
         if ($info = $this->info) {
@@ -92,4 +143,87 @@ class Vip
         }
         return $result;
     }
+
+    # 购买会员
+    public function pay()
+    {
+        if (!Place::$uid) {
+            Dever::error('请先登录', 300);
+        }
+        $db = Dever::db($this->type, 'place');
+        $id = Dever::input('id', 'is_numeric', 'ID');
+        $info = $db->find($id);
+        if (!$info) {
+            Dever::error('信息不存在');
+        }
+        $cur = Place::$user[$this->type . '_id'];
+        if ($cur == $info['id']) {
+            Dever::error('您已购买过' . $info['name']);
+        }
+        if ($cur > 0) {
+            $user = $db->find($cur);
+            if ($user && $user['level'] >= $info['level']) {
+                Dever::error('您已购买过');
+            }
+            if ($info['pay'] == 1) {
+                $info['price'] -= $user['price'];
+            }
+        }
+
+        $prefix = strtoupper(substr($this->type, 0, 2));
+        $account = Dever::input('account', 'is_string', '账户', 'wechat');
+        $env = Dever::input('env', 'is_numeric', '运行环境', 3);
+        $result = Dever::load('util', 'api')->openid($account, $env, Place::$uid);
+        if (isset($result['openid'])) {
+            Place::$user['openid'] = $result['openid'];
+        } elseif (isset($result['link'])) {
+            return $result;
+        }
+
+        $price = $info['price'];
+        
+        # 支付账户
+        $account = 'pay_' . $account;
+        # 下单
+        $order = array
+        (
+            'uid' => Place::$uid,
+            'openid' => Place::$user['openid'] ?? '',
+            'order_num' => Dever::load('util', 'api')->createNumber($prefix, 'place/'.$this->type.'_order'),
+            'cash' => $price*100,
+            'name' => $info['name'],
+            'time_expire' => time() + 3600,
+        );
+        # 设置支付成功的回调信息,多个参数用|隔开
+        $param['notify'] = 'place/'.$this->type.'.success|' . Dever::input('p') . '|' . $order['order_num'];
+        $data['pay'] = Dever::load('account', 'api')->run($account, 'order', $order, $env);
+        if ($data['pay']) {
+            $order['status'] = 1;
+            $order[$this->type.'_id'] = $info['id'];
+            $data['order_id'] = Dever::db($this->type . '_order', 'place')->insert($order);
+            $data['order_num'] = $order['order_num'];
+        }
+        return $data;
+    }
+
+    # 支付成功
+    public function success($place, $order_num, $type, $status, $body = array())
+    {
+        Dever::input('authorization', 'is_string', '入口码', $place);
+        $order = Dever::db($this->type.'_order', 'place')->find(array('order_num' => $order_num));
+        if ($order && $order['status'] == 1) {
+            if ($status == 1) {
+                $update['status'] = 2;
+            } else {
+                $update['status'] = 3;
+            }
+            
+            $update['pdate'] = time();
+            $state = Dever::db($this->type.'_order', 'place')->update($order['id'], $update);
+            if (!$state) {
+                return '订单更新失败';
+            }
+            Dever::db('user', 'place')->update($order['uid'], array($this->type.'_id' => $order[$this->type.'_id']));
+        }
+    }
 }

+ 8 - 1
src/place/manage/agent.php

@@ -8,6 +8,7 @@ return array
             'name',
             'level',
             'price',
+            'pay',
 
             'status' => array
             (
@@ -34,7 +35,7 @@ return array
     (
         'tab' => array
         (
-            '基本信息' => 'name,level,price,content',
+            '基本信息' => 'name,level,price,pay,content',
             '权益设置' => 'place/agent_price',
         ),
         'field'    => array
@@ -52,6 +53,12 @@ return array
             (
                 'rules' => true,
             ),
+            'pay' => array
+            (
+                'type' => 'radio',
+                'rules' => true,
+                'tips' => '差额支付:如用户已是等级1的代理,购买等级2时会自动减去等级1已支付的金额<br />全额支付:根据代理价格全额支付',
+            ),
             'content' => array
             (
                 'type' => 'editor',

+ 5 - 0
src/place/manage/agent_price.php

@@ -22,6 +22,11 @@ return array
                 'tips' => '资源价格*佣金比例%=代理佣金<br />如:代理佣金填写为10,则代理佣金=资源价格*10%',
                 'placeholder' => '资源价格*佣金比例%=代理佣金',
             ),
+            'total' => array
+            (
+                'tips' => '不填写不限制<br />内容:每日下载总次数<br />功能:每日使用总次数<br />商品:每次购买总数量',
+                'placeholder' => '填写上限数值',
+            ),
             'status' => array
             (
                 'width' => '40',

+ 9 - 2
src/place/manage/vip.php

@@ -8,8 +8,9 @@ return array
             'name',
             'level',
             'day_desc',
+            
             'price',
-
+            'pay',
             'status' => array
             (
                 'type' => 'switch',
@@ -35,7 +36,7 @@ return array
     (
         'tab' => array
         (
-            '基本信息' => 'name,level,price,day_desc,day,content',
+            '基本信息' => 'name,level,price,pay,day_desc,day,content',
             '权益设置' => 'place/vip_price',
         ),
         'field'    => array
@@ -53,6 +54,12 @@ return array
             (
                 'rules' => true,
             ),
+            'pay' => array
+            (
+                'type' => 'radio',
+                'rules' => true,
+                'tips' => '差额支付:如用户已是等级1的会员,购买等级2时会自动减去等级1已支付的金额<br />全额支付:根据会员价格全额支付',
+            ),
             'day_desc' => array
             (
                 'rules' => true,

+ 5 - 0
src/place/manage/vip_price.php

@@ -17,6 +17,11 @@ return array
                 'tips' => '资源价格*折扣%=会员价格<br />如:折扣填写为80,则会员价格=资源价格*80%',
                 'placeholder' => '资源价格*折扣%=会员价格',
             ),
+            'total' => array
+            (
+                'tips' => '不填写不限制<br />内容:每日下载总次数<br />功能:每日使用总次数<br />商品:每次购买总数量',
+                'placeholder' => '填写上限数值',
+            ),
             'status' => array
             (
                 'width' => '40',

+ 12 - 0
src/place/table/agent.php

@@ -30,6 +30,18 @@ return array
             'name'      => '代理介绍',
             'type'      => 'varchar(2000)',
         ),
+
+        'pay' => array
+        (
+            'name'      => '支付方式',
+            'type'      => 'tinyint(1)',
+            'default'   => 1,
+            'value'     => array
+            (
+                1 => '差额支付',
+                2 => '全额支付',
+            ),
+        ),
         
         'status' => array
         (

+ 51 - 0
src/place/table/agent_order.php

@@ -0,0 +1,51 @@
+<?php
+return array
+(
+    'name' => '代理支付订单表',
+    'partition' => 'Dever::call("manage/common.system")',
+    'struct' => array
+    (
+        'agent_id'        => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '代理ID',
+        ),
+
+        'uid'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '用户',
+        ),
+
+        'order_num'        => array
+        (
+            'type'      => 'varchar(60)',
+            'name'      => '订单号',
+        ),
+
+        'cash'      => array
+        (
+            'type'      => 'decimal(11,2)',
+            'name'      => '订单金额',
+        ),
+
+        'status'        => array
+        (
+            'type'      => 'tinyint(1)',
+            'name'      => '订单状态',
+            'default'   => '1',
+            'value'         => array
+            (
+                1 => '待支付',
+                2 => '已支付',
+                3 => '已取消',
+            ),
+        ),
+
+        'pdate'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '付款时间',
+        ),
+    ),
+);

+ 6 - 0
src/place/table/agent_price.php

@@ -30,6 +30,12 @@ return array
             'name'      => '佣金比例',
             'type'      => 'varchar(11)',
         ),
+
+        'total' => array
+        (
+            'name'      => '上限',
+            'type'      => 'varchar(11)',
+        ),
         
         'status' => array
         (

+ 1 - 1
src/place/table/order.php

@@ -1,7 +1,7 @@
 <?php
 return array
 (
-    'name' => '支付订单表',
+    'name' => '资源支付订单表',
     'partition' => 'Dever::call("manage/common.system", array(false, true, "place/info.funcType"))',
     'struct' => array
     (

+ 7 - 1
src/place/table/client_sell.php → src/place/table/order_stat.php

@@ -1,7 +1,7 @@
 <?php
 return array
 (
-    'name' => '源主销售表',
+    'name' => '订单日统计表',
     'partition' => 'Dever::call("manage/common.system")',
     'order' => 'id desc',
     'struct' => array
@@ -24,6 +24,12 @@ return array
             'name'      => '用户',
         ),
 
+        'cash'      => array
+        (
+            'type'      => 'decimal(11,2)',
+            'name'      => '金额',
+        ),
+
         'num' => array
         (
             'type'      => 'int(11)',

+ 12 - 0
src/place/table/vip.php

@@ -42,6 +42,18 @@ return array
             'name'      => '会员介绍',
             'type'      => 'varchar(2000)',
         ),
+
+        'pay' => array
+        (
+            'name'      => '支付方式',
+            'type'      => 'tinyint(1)',
+            'default'   => 1,
+            'value'     => array
+            (
+                1 => '差额支付',
+                2 => '全额支付',
+            ),
+        ),
         
         'status' => array
         (

+ 51 - 0
src/place/table/vip_order.php

@@ -0,0 +1,51 @@
+<?php
+return array
+(
+    'name' => '会员支付订单表',
+    'partition' => 'Dever::call("manage/common.system")',
+    'struct' => array
+    (
+        'vip_id'        => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '会员ID',
+        ),
+
+        'uid'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '用户',
+        ),
+
+        'order_num'        => array
+        (
+            'type'      => 'varchar(60)',
+            'name'      => '订单号',
+        ),
+
+        'cash'      => array
+        (
+            'type'      => 'decimal(11,2)',
+            'name'      => '订单金额',
+        ),
+
+        'status'        => array
+        (
+            'type'      => 'tinyint(1)',
+            'name'      => '订单状态',
+            'default'   => '1',
+            'value'         => array
+            (
+                1 => '待支付',
+                2 => '已支付',
+                3 => '已取消',
+            ),
+        ),
+
+        'pdate'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '付款时间',
+        ),
+    ),
+);

+ 6 - 0
src/place/table/vip_price.php

@@ -24,6 +24,12 @@ return array
             'name'      => '折扣',
             'type'      => 'varchar(11)',
         ),
+
+        'total' => array
+        (
+            'name'      => '上限',
+            'type'      => 'varchar(11)',
+        ),
         
         'status' => array
         (