rabin 1 周之前
父節點
當前提交
81460368bc
共有 44 個文件被更改,包括 384 次插入150 次删除
  1. 0 1
      src/place/act/lib/Core.php
  2. 13 17
      src/place/benefit/lib/Item.php
  3. 3 3
      src/place/benefit/lib/Item/Bonus.php
  4. 2 3
      src/place/benefit/lib/Item/Rebate.php
  5. 1 1
      src/place/benefit/lib/Item/Score.php
  6. 24 5
      src/place/benefit/lib/User.php
  7. 1 1
      src/place/benefit/manage/Lib/Rebate.php
  8. 42 0
      src/place/benefit/manage/Lib/User.php
  9. 7 0
      src/place/benefit/manage/core.php
  10. 1 1
      src/place/benefit/manage/perk_code.php
  11. 2 2
      src/place/benefit/manage/score_action.php
  12. 1 1
      src/place/benefit/manage/score_exchange.php
  13. 71 0
      src/place/benefit/manage/user.php
  14. 36 0
      src/place/benefit/manage/user_log.php
  15. 1 1
      src/place/benefit/table/perk_voucher.php
  16. 1 1
      src/place/benefit/table/role_action.php
  17. 1 1
      src/place/benefit/table/role_period.php
  18. 1 1
      src/place/benefit/table/role_upgrade.php
  19. 3 2
      src/place/benefit/table/user.php
  20. 6 4
      src/place/benefit/table/user_log.php
  21. 42 0
      src/place/channel/table/shop_offline.php
  22. 2 1
      src/place/interface/api/Order.php
  23. 1 1
      src/place/order/lib/Role/Log.php
  24. 3 1
      src/place/order/lib/Role/Pay.php
  25. 1 1
      src/place/order/lib/Source/Log.php
  26. 10 10
      src/place/order/lib/Source/Order.php
  27. 4 3
      src/place/order/lib/Source/Pay.php
  28. 1 1
      src/place/order/lib/Source/Refund.php
  29. 2 2
      src/place/order/manage/Lib/Source/Info.php
  30. 1 1
      src/place/order/manage/Lib/Source/View.php
  31. 26 9
      src/place/role/lib/Info.php
  32. 17 7
      src/place/role/lib/Price.php
  33. 16 6
      src/place/role/lib/User.php
  34. 8 2
      src/place/role/manage/level.php
  35. 4 2
      src/place/role/manage/user_role.php
  36. 11 1
      src/place/role/table/level.php
  37. 11 3
      src/place/score/lib/Info.php
  38. 1 1
      src/place/score/lib/Log.php
  39. 0 47
      src/place/score/table/info.php
  40. 1 1
      src/place/source/lib/Cate.php
  41. 1 1
      src/place/source/manage/cate.php
  42. 1 1
      src/place/source/manage/spec_import.php
  43. 1 1
      src/place/user/lib/Coupon.php
  44. 2 2
      src/place/user/lib/Gift.php

+ 0 - 1
src/place/act/lib/Core.php

@@ -39,7 +39,6 @@ class Core
             $state = $this->db->insert($this->data);
             if ($state) {
                 # 这里可以判断一下是否优质的评价 以后加
-
                 Dever::load('log', 'place_score')->action($this->db->config['name'])->add(Place::$uid);
             }
         }

+ 13 - 17
src/place/benefit/lib/Item.php

@@ -49,26 +49,23 @@ class Item
             # 内容下载、查看上限
             ['id' => 'visit', 'name' => '访问限额'],
         ];
-        if ($type == 1) {
-            # 固定权益
+        if ($type != 1) {
             $value = array_merge([
-                ['id' => 'select', 'name' => '选择权益'],
+                ['id' => 'score_num', 'name' => '奖励积分'],
+                //['id' => 'exchange', 'name' => '兑换'],# 用优惠券替代
+                ['id' => 'coupon', 'name' => '优惠券'],
+                # 可以余额抵扣
+                ['id' => 'gift', 'name' => '礼品卡'],
+                ['id' => 'held', 'name' => '持有权'],
             ], $value);
-            return $value;
+            if ($type == 2) {
+                # 周期权益
+                $value[] = ['id' => 'perk', 'name' => '权益包'];
+            }
         }
         $value = array_merge([
-            ['id' => 'select', 'name' => '选择权益'],
-            ['id' => 'score_num', 'name' => '奖励积分'],
-            //['id' => 'exchange', 'name' => '兑换'],# 用优惠券替代
-            ['id' => 'coupon', 'name' => '优惠券'],
-            # 可以余额抵扣
-            ['id' => 'gift', 'name' => '礼品卡'],
-            ['id' => 'held', 'name' => '持有权'],
+            ['id' => '', 'name' => '选择权益'],
         ], $value);
-        if ($type == 2) {
-            # 周期权益
-            $value[] = ['id' => 'perk', 'name' => '权益包'];
-        }
         if ($column) {
             return array_column($value, 'name', 'id');
         }
@@ -133,8 +130,7 @@ class Item
     public function getNumDesc($type, $type_id, $num)
     {
         if ($type == 'score_num') {
-            $score = Dever::db('info', 'place_score')->find($type_id);
-            $result = Dever::load('info', 'place_score')->getText($num, $score);
+            $result = Dever::load('info', 'place_score')->getText($num, $type_id);
         } else {
             $result = floor($num);
             if ($type == 'coupon' || $type == 'gift' || $type == 'perk' || $type == 'held') {

+ 3 - 3
src/place/benefit/lib/Item/Bonus.php

@@ -24,7 +24,7 @@ class Bonus
                     $v['source_value'] = $v['value'];
                     $v['value'] = Dever::math('value', $price, $v['value']);
                     if ($v['value'] > 0) {
-                        $score = Dever::db('info', 'place_score')->find($v['score_id'], ['col' => 'id,name,symbol,symbol_location']);
+                        $score = Dever::load('info', 'place_score')->get($v['score_id']);
                         if (isset($result['rule'][$v['id']])) {
                             $v['value'] += $result['rule'][$v['id']]['value'];
                         }
@@ -76,7 +76,7 @@ class Bonus
             $info['desc'] = $info['period_name'] . '1点';
         }
         $info['desc'] .= ',发放';
-        $score = Dever::db('info', 'place_score')->find($info['give_score_id']);
+        $score = Dever::load('info', 'place_score')->get($info['give_score_id']);
         if (!strstr($info['give_value'], '%')) {
             $info['value_text'] = Dever::load('info', 'place_score')->getText($info['give_value'], $score);
             $info['desc'] .= $info['value_text'];
@@ -89,7 +89,7 @@ class Bonus
                 $info['give_source_name'] = '本人';
             }
             if ($info['type'] == 2) {
-                $holding = Dever::db('info', 'place_score')->find($info['holding_score_id']);
+                $holding = Dever::load('info', 'place_score')->get($info['holding_score_id']);
                 $info['type_name'] .= $holding['name'];
             }
             $money = '(转人民币后的总额)';

+ 2 - 3
src/place/benefit/lib/Item/Rebate.php

@@ -24,7 +24,7 @@ class Rebate
                     $v['source_value'] = $v['value'];
                     $v['value'] = Dever::math('value', $price, $v['value']);
                     if ($v['value'] > 0) {
-                        $score = Dever::db('info', 'place_score')->find($v['score_id'], ['col' => 'id,name,symbol,symbol_location']);
+                        $score = Dever::load('info', 'place_score')->get($v['score_id']);
                         if (isset($result['rule'][$v['id']])) {
                             $v['value'] += $result['rule'][$v['id']]['value'];
                         }
@@ -74,8 +74,7 @@ class Rebate
             $buy = [];
             $share = [];
             foreach ($rule as $k => $v) {
-                $score = Dever::db('info', 'place_score')->find($v['score_id']);
-                $v['value'] = Dever::load('info', 'place_score')->getText($v['value'], $score);
+                $v['value'] = Dever::load('info', 'place_score')->getText($v['value'], $v['score_id']);
                 if ($v['condition'] && !$this->check($uid, $v['condition'])) {
                     continue;
                 }

+ 1 - 1
src/place/benefit/lib/Item/Score.php

@@ -71,7 +71,7 @@ class Score
         if ($data) {
             foreach ($data as $v) {
                 if ($v['exchange_score_id'] != $info['id']) {
-                    $exchange = Dever::db('info', 'place_score')->find($v['exchange_score_id']);
+                    $exchange = Dever::load('info', 'place_score')->get($v['exchange_score_id']);
                     $info['exp'] = $v['value'];
                     $v['name'] = $exchange['name'];
                     $v['symbol'] = $exchange['symbol'];

+ 24 - 5
src/place/benefit/lib/User.php

@@ -13,9 +13,16 @@ class User
         }
         # 再验证角色等级是否有该权益
         $level = Dever::load('role', 'place_user')->getLevel($uid);
-        $role = Dever::db('role_upgrade', 'place_benefit')->select(['type' => $type, 'level_id' => ['in', $level]]);
-        if ($role) {
-            $result = Dever::load('scope', 'place_benefit')->check(2, $role, $type, $scope, $result);
+        if (!$level) {
+            # 如果当前用户没有任何角色等级,需要给一个默认的
+            Dever::load('info', 'place_role')->up($uid);
+            $level = Dever::load('role', 'place_user')->getLevel($uid);
+        }
+        if ($level) {
+            $role = Dever::db('role_upgrade', 'place_benefit')->select(['type' => $type, 'level_id' => ['in', $level]]);
+            if ($role) {
+                $result = Dever::load('scope', 'place_benefit')->check(2, $role, $type, $scope, $result);
+            }
         }
         return $result;
     }
@@ -174,7 +181,7 @@ class User
 
     # 领取权益
     public function receive_commit(){}
-    public function receive($uid, $info, $source = 1)
+    public function receive($uid, $info, $source = 1, $state = false)
     {
         $level = Dever::load('role', 'place_user')->getLevel($uid);
         if ($source == 1) {
@@ -183,16 +190,25 @@ class User
             }
             $check = $this->check($uid, $source, $info['id'], $info['day'], $info['max']);
             if ($check) {
+                if ($state) {
+                    return;
+                }
                 Dever::error('未达到领取条件');
             }
             $level = Dever::db('level', 'place_role')->find($info['level_id']);
             $msg = $level['name'] . '权益';
-        } else {
+        } elseif ($source == 2) {
             # 权益包
             $msg = $info['name'] . '权益';
+        } else {
+            # 后台发放
+            $msg = '后台发放权益';
         }
         
         if (!$info) {
+            if ($state) {
+                return;
+            }
             Dever::error('权益不存在');
         }
         
@@ -236,6 +252,9 @@ class User
                 if ($content) {
                     Dever::db('user_log', 'place_benefit')->update($state, ['content' => $content]);
                 } else {
+                    if ($state) {
+                        return;
+                    }
                     Dever::error('领取失败,请重新领取');
                 }
             }

+ 1 - 1
src/place/benefit/manage/Lib/Rebate.php

@@ -12,7 +12,7 @@ class Rebate
         $body = '';
         foreach ($rule as $v) {
             $body .= '<tr>';
-            $score = Dever::db('info', 'place_score')->find($v['score_id']);
+            $score = Dever::load('info', 'place_score')->get($v['score_id']);
             $body .= '<td>'.$score['name'].'</td>';
             $body .= '<td>'.$v['level'].'</td>';
             $body .= '<td>'.$v['value'].'</td>';

+ 42 - 0
src/place/benefit/manage/Lib/User.php

@@ -0,0 +1,42 @@
+<?php namespace Place_benefit\Manage\Lib;
+use Dever;
+class User
+{
+    public function getTypeInfo($type, $type_id)
+    {
+        $info = Dever::load('item', 'place_benefit')->getTypeData($type, $type_id);
+        return $info['name'];
+    }
+
+    public function getSourceInfo($source, $source_id)
+    {
+        if ($source == 2) {
+            $db = Dever::db('perk', 'place_benefit');
+        } elseif ($source == 10) {
+            $db = Dever::db('user', 'sector');
+        } else {
+            $db = Dever::db('info', 'place_role');
+        }
+        $info = $db->find($source_id);
+        return $info['name'] ?? '-';
+    }
+
+    # 发放用户权益
+    public function update($db, $data)
+    {
+        $rule = Dever::rule('mobile');
+        if (preg_match($rule, $data['user'])) {
+            $where['mobile'] = $data['user'];
+        } else {
+            $where['id'] = $data['user'];
+        }
+        $where['status'] = 1;
+        $user = Dever::db('info', 'place_user')->find($where);
+        if (!$user) {
+            Dever::error('用户不存在');
+        }
+        $data['id'] = Dever::$data['muser']['id'];
+        Dever::load('user', 'place_benefit')->receive($user['id'], $data, 10);
+        return 'end';
+    }
+}

+ 7 - 0
src/place/benefit/manage/core.php

@@ -139,5 +139,12 @@ return [
             'icon'      => 'admin-line',
             'sort'      => '2',
         ],
+
+        'user_log' => [
+            'parent'    => 'place_benefit_role',
+            'name'      => '用户权益记录',
+            'sort'      => '100',
+            'show'      => 3
+        ],
     ],
 ];

+ 1 - 1
src/place/benefit/manage/perk_code.php

@@ -1,5 +1,5 @@
 <?php
-$perk_id = Dever::input(['set', 'field'])['perk_id'] ?? 0;
+$perk_id = Dever::load('common', 'manage')->get('perk_id');
 return [
     'list' => [
         'where' => ['perk_id' => $perk_id],

+ 2 - 2
src/place/benefit/manage/score_action.php

@@ -1,6 +1,6 @@
 <?php
-$score_id = Dever::input(['set', 'field'])['score_id'] ?? 0;
-$score_info_id = Dever::input(['set', 'field'])['score_info_id'] ?? 0;
+$score_id = Dever::load('common', 'manage')->get('score_id');
+$score_info_id = Dever::load('common', 'manage')->get('score_info_id');
 return [
     'list' => [
         'where' => ['score_id' => $score_id],

+ 1 - 1
src/place/benefit/manage/score_exchange.php

@@ -1,5 +1,5 @@
 <?php
-$score_id = Dever::input(['set', 'field'])['score_id'] ?? 0;
+$score_id = Dever::load('common', 'manage')->get('score_id');
 return [
     'update' => [
         'field'    => [

+ 71 - 0
src/place/benefit/manage/user.php

@@ -0,0 +1,71 @@
+<?php
+return [
+    'list' => [
+        'desc' => '用户权益列表仅展示用户已领取的权益,包括角色周期权益以及权益包里的权益,不包括角色固定权益',
+        'field'      => [
+            'uid' => [
+                'name' => '用户信息',
+                'show' => 'Dever::call("place_user/manage/user.getInfo", {uid})',
+            ],
+            'type' => [
+                
+            ],
+            'type_id' => [
+                'show' => 'Dever::call("place_benefit/manage/user.getTypeInfo", [{type}, {type_id}])',
+            ],
+            'num' => [
+                'name' => '剩余数量',
+            ],
+            'status',
+            'cdate' => ['name' => '更新时间'],
+        ],
+        'button' => [
+            '发放权益' => ['fastadd'],
+        ],
+        'data_button' => [
+            '权益记录' => ['route', [
+                'path' => 'place_benefit_role/user_log',
+                'param' => [
+                    'set' => ['user_id' => 'id', 'menu' => 'place_benefit_role/user', 'parent' => 'place_benefit_role/user'],
+                ],
+            ]]
+        ],
+        'search'    => [
+            'search' => array
+            (
+                'name' => '用户搜索',
+                'type' => 'select_text',
+                'option' => [
+                    ['id' => 1, 'name' => '用户ID', 'value' => 'uid'],
+                    ['id' => 2, 'name' => '用户姓名', 'value' => 'place_user/manage/user.getUidByName'],
+                    ['id' => 3, 'name' => '用户手机号', 'value' => 'place_user/manage/user.getUidByMobile'],
+                ],
+            ),
+            'type',
+            'status',
+        ],
+    ],
+    'update' => [
+        'start' => 'place_benefit/manage/user.update',
+        'field'    => [
+            'user' => [
+                'rules' => true,
+                'name' => '用户信息',
+                'desc' => '请输入用户ID或者用户手机号',
+            ],
+            'type' => [
+                'type' => 'select',
+                'rules' => true,
+                'remote' => 'place_benefit/manage/api.getType',
+            ],
+            'type_id' => [
+                'rules' => true,
+                'type' => 'select',
+            ],
+            'num' => [
+                'rules' => true,
+                'tip' => '发放数量',
+            ],
+        ],
+    ],
+];

+ 36 - 0
src/place/benefit/manage/user_log.php

@@ -0,0 +1,36 @@
+<?php
+return [
+    'list' => [
+        'where' => ['user_id' => Dever::load('common', 'manage')->get('user_id')],
+        'field'      => [
+            'uid' => [
+                'name' => '用户信息',
+                'show' => 'Dever::call("place_user/manage/user.getInfo", {uid})',
+            ],
+            'type' => [
+                
+            ],
+            'type_id' => [
+                'show' => 'Dever::call("place_benefit/manage/user.getTypeInfo", [{type}, {type_id}])',
+            ],
+            'source',
+            'source_id' => [
+                'show' => 'Dever::call("place_benefit/manage/user.getSourceInfo", [{source}, {source_id}])',
+            ],
+            'num' => [
+                'name' => '领取数量',
+            ],
+            'cdate',
+        ],
+        'button' => [
+            
+        ],
+        'data_button' => [
+            
+        ],
+        'search'    => [
+            'type',
+            'source',
+        ],
+    ],
+];

+ 1 - 1
src/place/benefit/table/perk_voucher.php

@@ -11,7 +11,7 @@ return [
         'type'        => [
             'name'      => '类型',
             'type'      => 'varchar(15)',
-            'default'   => 'select',
+            'default'   => '',
             'value'    => 'Dever::call("place_benefit/item.getType", 3)',
         ],
 

+ 1 - 1
src/place/benefit/table/role_action.php

@@ -33,7 +33,7 @@ return [
         'type'        => [
             'name'      => '类型',
             'type'      => 'varchar(15)',
-            'default'   => 'score_num',
+            'default'   => '',
             'value'    => 'Dever::call("place_benefit/item.getType", 2)',
         ],
 

+ 1 - 1
src/place/benefit/table/role_period.php

@@ -13,7 +13,7 @@ return [
         'type'        => [
             'name'      => '类型',
             'type'      => 'varchar(15)',
-            'default'   => 'select',
+            'default'   => '',
             'value'    => 'Dever::call("place_benefit/item.getType", 2)',
         ],
 

+ 1 - 1
src/place/benefit/table/role_upgrade.php

@@ -13,7 +13,7 @@ return [
         'type'        => [
             'name'      => '类型',
             'type'      => 'varchar(15)',
-            'default'   => 'select',
+            'default'   => '',
             'value'    => 'Dever::call("place_benefit/item.getType", 1)',
         ],
 

+ 3 - 2
src/place/benefit/table/user.php

@@ -4,13 +4,14 @@ return [
     'partition' => 'Dever::call("manage/common.system")',
     'struct' => [
         'uid'        => [
-            'name'      => '用户',
+            'name'      => '用户ID',
             'type'      => 'int(11)',
         ],
 
         'type'        => [
-            'name'      => '类型',
+            'name'      => '权益类型',
             'type'      => 'varchar(15)',
+            'value'    => 'Dever::call("place_benefit/item.getType", 2)',
         ],
 
         'type_id'        => [

+ 6 - 4
src/place/benefit/table/user_log.php

@@ -14,8 +14,9 @@ return [
         ],
         
         'type'        => [
-            'name'      => '类型',
+            'name'      => '权益类型',
             'type'      => 'varchar(15)',
+            'value'    => 'Dever::call("place_benefit/item.getType", 2)',
         ],
 
         'type_id'        => [
@@ -24,17 +25,18 @@ return [
         ],
 
         'source' => [
-            'name'      => '来源',
+            'name'      => '来源类型',
             'type'      => 'tinyint(1)',
             'default'   => 1,
             'value'     => [
                 1 => '角色等级',
                 2 => '权益包',
+                10 => '后台发放',
             ],
         ],
 
         'source_id'        => [
-            'name'      => '来源id',
+            'name'      => '来源',
             'type'      => 'int(11)',
         ],
 
@@ -45,7 +47,7 @@ return [
         ],
 
         'content'        => [
-            'name'      => '内容',
+            'name'      => '描述',
             'type'      => 'varchar(50)',
         ],
     ],

+ 42 - 0
src/place/channel/table/shop_offline.php

@@ -0,0 +1,42 @@
+<?php
+return [
+    'name' => '线下门店',
+    'partition' => 'Dever::call("manage/common.system")',
+    'order' => 'sort asc',
+    'struct' => [
+        'name' => [
+            'name'      => '门店名称',
+            'type'      => 'varchar(50)',
+        ],
+
+        'type' => [
+            'name'      => '门店类型',
+            'type'      => 'tinyint(1)',
+            'default'   => 1,
+            'value'     => [
+                1 => '直营店',
+                2 => '连锁店',
+                3 => '抖店',
+                4 => '拼多多',
+                5 => '淘宝',
+                6 => '美团',
+            ],
+        ],
+
+        'status' => [
+            'name'      => '授权状态',
+            'type'      => 'tinyint(1)',
+            'default'   => 2,
+            'value'     => [
+                1 => '已授权',
+                2 => '未授权',
+            ],
+        ],
+
+        'sort' => [
+            'name'      => '排序',
+            'type'      => 'int(11)',
+            'default'   => 1,
+        ],
+    ],
+];

+ 2 - 1
src/place/interface/api/Order.php

@@ -10,7 +10,8 @@ class Order extends Core
     # 获取订单列表
     public function list()
     {
-        $data = Dever::load('source/order', 'place_order')->getList(Place::$uid);
+        $status = Dever::input('status');
+        $data = Dever::load('source/order', 'place_order')->getList(Place::$uid, $status);
         return ['list' => $data];
     }
 

+ 1 - 1
src/place/order/lib/Role/Log.php

@@ -1,6 +1,6 @@
 <?php namespace Place_order\Lib\Role;
 use Dever;
-use Place_order\Lib\Log;
+use Place_order\Lib\Log as Base;
 class Log extends Base
 {
     protected $table = 'role_log';

+ 3 - 1
src/place/order/lib/Role/Pay.php

@@ -25,13 +25,15 @@ class Pay extends Core
             'level_id' => $detail['id'],
             'level' => $detail['level'],
             'scope' => $detail['scope'],
-            'name' => $detail['name'],
+            'name' => $detail['title'],
             'cash' => Dever::number($detail['price']),
             'cash_text' => $detail['price_text'],
             'total_cash' => $detail['total_price'],
             'pay_cash' => $detail['total_price'],
             'num' => $detail['buy_num'],
             'stock' => 1,
+            'promotion' => $detail['promotion'],
+            'promotion_text' => $detail['promotion_text'],
         ];
         if (count($this->detail) < 3) {
             $this->order['name'][$detail['id']] = $detail['name'];

+ 1 - 1
src/place/order/lib/Source/Log.php

@@ -1,6 +1,6 @@
 <?php namespace Place_order\Lib\Source;
 use Dever;
-use Place_order\Lib\Log;
+use Place_order\Lib\Log as Base;
 class Log extends Base
 {
     protected $table = 'source_log';

+ 10 - 10
src/place/order/lib/Source/Order.php

@@ -25,6 +25,7 @@ class Order
             }
         }
         $set['num'] = 10;
+        $set['col'] = 'id,status,cdate,score_id,num,refund_status,cash';
         $data = Dever::db('source', 'place_order')->select($where, $set);
         if ($data) {
             foreach ($data as &$v) {
@@ -50,7 +51,7 @@ class Order
                 $info['time'] = $m - $info['time'];
             }
         }
-        $info['score'] = Dever::db('info', 'place_score')->find($info['score_id']);
+        $info['score'] = Dever::load('info', 'place_score')->get($info['score_id']);
         $info['detail'] = $this->getDetail($info);
         $info['info'] = '共' . intval($info['num']) . '件';
         $info = $this->getView($info, $view);
@@ -60,7 +61,7 @@ class Order
     # 获取订单里每个商品
     public function getDetail($info)
     {
-        $result = Dever::db('source_detail', 'place_order')->select(['order_id' => $info['id']]);
+        $result = Dever::db('source_detail', 'place_order')->select(['order_id' => $info['id']], ['col' => 'id,cash,status,name,sku_name,pic,num']);
         if ($result) {
             foreach ($result as &$v) {
                 $v['cash_text'] = Dever::load('info', 'place_score')->getText($v['cash'], $info['score']);
@@ -74,14 +75,19 @@ class Order
     public function getView($info, $view = true)
     {
         if (empty($info['score'])) {
-            $info['score'] = Dever::db('info', 'place_score')->find($info['score_id']);
+            $info['score'] = Dever::load('info', 'place_score')->get($info['score_id']);
         }
         $info['status_name'] = Dever::db('source', 'place_order')->value('status', $info['status']);
         if ($info['refund_status'] == 1) {
             $info['status_name'] = '退款申请中';
         }
+        $info['cash_text'] = Dever::load('info', 'place_score')->getText($info['cash'], $info['score']);
+
+        if (!$view) {
+            return $info;
+        }
+        $this->getViewDate($info);
         list(
-            $info['cash_text'], 
             $info['pay_cash_text'], 
             $info['wallet_cash_text'], 
             $info['coupon_cash_text'],
@@ -89,7 +95,6 @@ class Order
             $info['refund_cash_text'],
         ) = Dever::load('info', 'place_score')->getText(
             [
-                $info['cash'], 
                 $info['pay_cash'], 
                 $info['wallet_cash'], 
                 $info['coupon_cash'],
@@ -97,11 +102,6 @@ class Order
                 $info['refund_cash'],
             ], $info['score']);
 
-        $this->getViewDate($info);
-        if (!$view) {
-            return $info;
-        }
-
         # 收货地址
         if ($info['address_id']) {
             $info['address'] = Dever::load('address', 'place_user')->getInfo($info['address_id'], $info['uid']);

+ 4 - 3
src/place/order/lib/Source/Pay.php

@@ -14,11 +14,12 @@ class Pay extends Core
         if ($this->set['id'] != $source['cate_id']) {
             Dever::error('资源不存在');
         }
-        $detail = Dever::load('sku', 'api')->getList(['info_id' => $source['id']], $info['sku_id'], 'place_source');
-        if (!$detail['info']) {
+        //$detail = Dever::load('sku', 'api')->getList(['info_id' => $source['id']], $info['sku_id'], 'place_source');
+        $detail = Dever::load('sku', 'api')->getInfo(['id' => $info['sku_id'], 'info_id' => $source['id']], 'place_source');
+        if (!$detail) {
             Dever::error('规格不存在');
         }
-        $detail = Dever::load('price', 'place_source')->get($detail['info'], $this->set, $info['num']);
+        $detail = Dever::load('price', 'place_source')->get($detail, $this->set, $info['num']);
         $have = Dever::load('price', 'place_source')->getHave($source);
         if ($have['status'] != 1) {
             Dever::error('专享资源无法购买');

+ 1 - 1
src/place/order/lib/Source/Refund.php

@@ -56,7 +56,7 @@ class Refund
                     if ($rebate) {
                         $detail = Dever::db('source_detail', 'place_order')->select(['order_id' => $order['id']]);
                         if ($detail) {
-                            $score = Dever::db('info', 'place_score')->find($order['score_id']);
+                            $score = Dever::load('info', 'place_score')->get($order['score_id']);
                             $rebate = ['rule' => []];
                             Dever::db('rebate', 'place_order')->delete(['table' => 'source', 'table_id' => $order['id']]);
                             Dever::db('user_log', 'place_score')->delete(['relation' => 'source_order_' . $order['id']]);

+ 2 - 2
src/place/order/manage/Lib/Source/Info.php

@@ -43,7 +43,7 @@ class Info
         $result = [];
         if ($detail) {
             $tip['type'] = 'line';
-            $score = Dever::db('info', 'place_score')->find($score_id);
+            $score = Dever::load('info', 'place_score')->get($score_id);
             foreach ($detail as $v) {
                 $tip['content'] = [
                     ['name' => '编号', 'content' => Dever::load('info', 'place_source')->getCode($v['id'])],
@@ -67,7 +67,7 @@ class Info
         if ($data['parent_uid'] && $data['parent_uid'] > 0) {
             $parent = Dever::load('manage/user', 'place_user')->getInfo($data['parent_uid']);
         }
-        $score = Dever::db('info', 'place_score')->find($data['score_id']);
+        $score = Dever::load('info', 'place_score')->get($data['score_id']);
         $result['type'] = 'list';
         $result['content'] = array
         (

+ 1 - 1
src/place/order/manage/Lib/Source/View.php

@@ -495,7 +495,7 @@ class View
     {
         foreach ($rebate as &$v) {
             //$v['status'] = $this->getRefundStatus($v);
-            $score = Dever::db('info', 'place_score')->find($v['score_id']);
+            $score = Dever::load('info', 'place_score')->get($v['score_id']);
             $v['score_name'] = $score['name'];
             $v['username'] = '无';
             if ($v['level'] == 0) {

+ 26 - 9
src/place/role/lib/Info.php

@@ -32,7 +32,7 @@ class Info
         if (!$info) {
             Dever::error('角色信息错误');
         }
-        $info['score'] = Dever::db('info', 'place_score')->find($info['score_id'], ['col' => 'id,exp,name,symbol,symbol_location']);
+        $info['score'] = Dever::load('info', 'place_score')->get($info['score_id']);
         //$info['rebate'] = Dever::load('rebate', 'place_score')->get(4, $info['id']);
         return $info;
     }
@@ -46,14 +46,19 @@ class Info
             $where['level'] = ['>=', $user['level']];
         }
         $where['status'] = 1;
-        $data = Dever::db('level', 'place_role')->select($where, ['col' => 'id,info_id,name,info,level,pay_price as price,day,pay,type']);
+        $data = Dever::db('level', 'place_role')->select($where, ['col' => 'id,info_id,name,info,level,pay_price as price,day,upday,pay,type']);
         $type = Dever::load('item', 'place_benefit')->getType(2, true);
         if ($data) {
+            $user_level = Dever::db('level', 'place_role')->find($user['level_id']);
+            $set = ['user' => $user, 'score' => $score];
             foreach ($data as $v) {
-                if ($user['level_id'] > 0 && $v['id'] != $user['level_id'] && $v['type'] == 1 && $v['pay'] == 1) {
-                    $v['price'] -= $user['price'];
-                    $v['price'] = Dever::number($v['price']);
+                if ($v['type'] > 1) {
+                    continue;
                 }
+                if ($v['price'] <= 0) {
+                    continue;
+                }
+                $v = Dever::load('price', 'place_role')->get($v, $set);
                 $v['active'] = 0;
                 if ($v['day'] > 0) {
                     $v['day_desc'] = $v['day'] . '天';
@@ -61,8 +66,22 @@ class Info
                     $v['day_desc'] = '永久';
                 }
 
+                if ($user['level_id'] == $v['id']) {
+                    $v['button'] = '立即续费';
+                    $v['day_desc'] = '续期' . $v['day_desc'];
+                } elseif ($user['level_id'] > 0) {
+                    $v['button'] = '立即升级';
+                    if ($v['upday'] == 2 && $user_level['type'] == $v['type']) {
+                        $v['day_desc'] = '续期' . $v['day_desc'];
+                    }
+                } else {
+                    $v['button'] = '立即开通';
+                }
+
                 $v['price_text'] = Dever::load('info', 'place_score')->getText($v['price'], $score);
 
+                $v['profit'] = [];
+
                 # 获取权益
                 $upgrade = Dever::db('role_upgrade', 'place_benefit')->select(['level_id' => $v['id']]);
                 $v['upgrade'] = [];
@@ -80,8 +99,8 @@ class Info
                 # 获取权益
                 $period = Dever::db('role_period', 'place_benefit')->select(['level_id' => $v['id']]);
                 $v['period'] = [];
-                $v['profit'][] = '周期权益';
                 if ($period) {
+                    $v['profit'][] = '周期权益';
                     foreach ($period as $v1) {
                         $desc['config_day'] = $v1['day'];
                         $desc['config_num'] = $v1['num'];
@@ -94,9 +113,7 @@ class Info
                     }
                 }
 
-                if (isset($v['profit']) && $v['profit']) {
-                    $result[] = $v;
-                }
+                $result[] = $v;
             }
         }
         return $result;

+ 17 - 7
src/place/role/lib/Price.php

@@ -8,19 +8,30 @@ class Price
     {
         # 生成范围
         $info['scope'] = '2,' . $info['info_id'] . ',' . $info['id'];
-
-        if ($set['user'] && $set['user']['level_id'] > 0 && $info['id'] != $set['user']['level_id'] && $info['type'] == 1 && $info['pay'] == 1) {
-            $info['price'] -= $set['user']['price'];
-        }
-
         # 原价
         $info['m_price'] = Dever::number($info['price']);
+        $promotion = [];
+
+        $info['title'] = $info['name'] . ' [首次开通]';
+        if ($set['user'] && $set['user']['level_id'] > 0) {
+            if ($info['id'] == $set['user']['level_id']) {
+                $info['title'] = $info['name'] . ' [续期] ';
+            } elseif ($info['id'] != $set['user']['level_id'] && $info['type'] == 1 && $info['pay'] == 1) {
+                $info['price'] -= $set['user']['price'];
+                $info['price'] = Dever::number($info['price']);
+                $value = $info['m_price'] - $info['price'];
+                $value = Dever::load('info', 'place_score')->getText($value, $set['score']);
+                $promotion[] = ['name' => '差额', 'price' => $info['price'], 'type' => 1, 'value' => $value];
+                $info['title'] = $info['name'] . ' [升级] ';
+            }
+        }
 
         # 促销 必须登录才有
         if (Place::$uid) {
             $info['promotion'] = Dever::load('item', 'place_benefit')->load('promotion')->get(Place::$uid, $info['scope'], $info['price'], $set['score']['exp']);
             if ($info['promotion']) {
                 $info['price'] = $info['promotion']['price'];
+                $promotion[] = $info['promotion'];
             }
         }
 
@@ -35,10 +46,9 @@ class Price
 
         # 获取促销描述
         $info['promotion_text'] = '';
-        if ($info['promotion']) {
+        if ($promotion) {
             $info['promotion_text'] = '<table class="rich-table">';
             $info['promotion_text'] .= '<tr><td>原价<td><td><td><td>'.$info['m_price_text'].'<td></tr>';
-            $promotion = [$info['promotion']];
             foreach ($promotion as $k => $v) {
                 $text = Dever::load('info', 'place_score')->getText($v['price'], $set['score']);
                 $type = '<td><td>';

+ 16 - 6
src/place/role/lib/User.php

@@ -31,7 +31,7 @@ class User
                         $user['level'] = $level['level'];
                         $user['price'] = $level['pay_price'];
                         $user['title'] = $level['name'];
-                        $user['button'] = '立即续费';
+                        $user['button'] = '立即升级';
                         if ($info['edate']) {
                             $user['info'] = date('Y/m/d', $info['edate']) . '到期'; 
                         } else {
@@ -85,16 +85,26 @@ class User
             if ($info['day'] < 0) {
                 $info['day'] = 3650;
             }
+            $data['status'] = 1;
             $data['edate'] = $info['day']*86400;
             $date = time();
             if ($user) {
-                if ($level['type'] == 2) {
-                    return;
-                }
                 if ($user['status'] == 2 || $user['edate'] <= $date) {
                     $data['edate'] += $date;
                 } else {
-                    $data['edate'] += $user['edate'];
+                    if ($user['level_id'] == $info['id']) {
+                        $data['edate'] += $user['edate'];
+                    } elseif ($info['upday'] == 1) {
+                        $data['edate'] += $date;
+                    } else {
+                        $user_level = Dever::db('level', 'place_role')->find($user['level_id']);
+                        # 必须与上一等级升级方式相同,才能续时间,防止刷时间
+                        if ($user_level['type'] == $info['type']) {
+                            $data['edate'] += $user['edate'];
+                        } else {
+                            $data['edate'] += $date;
+                        }
+                    }
                 }
                 $state = Dever::db('user', 'place_role')->update($user['id'], $data);
             } else {
@@ -107,7 +117,7 @@ class User
                 $period = Dever::db('role_period', 'place_benefit')->select(['level_id' => $info['id']]);
                 if ($period) {
                     foreach ($period as $v) {
-                        Dever::load('user', 'place_benefit')->receive($uid, $v);
+                        Dever::load('user', 'place_benefit')->receive($uid, $v, 1, true);
                     }
                 }
             }

+ 8 - 2
src/place/role/manage/level.php

@@ -7,6 +7,7 @@ return [
             'name',
             'level',
             'day',
+            'upday',
             'type',
             'status',
         ],
@@ -52,7 +53,12 @@ return [
             ],
             'day' => [
                 'rules' => true,
-                'desc' => '设置时长天数,如365,如果填写-1就是永久有效',
+                'desc' => '设置时长天数,如365,如果填写-1就是永久有效(10年)',
+            ],
+            'upday' => [
+                'type' => 'radio',
+                'rules' => true,
+                'tip' => '重计时长:升级会重新开始计算时长<br />续费时长:原有等级必须与本等级升级方式相同,升级会在原有等级时长基础上计算时长。',
             ],
             'type' => [
                 'type' => 'radio',
@@ -60,7 +66,7 @@ return [
             ],
             'pay' => [
                 'type' => 'radio',
-                'tip' => '差额支付:如用户已是等级1,购买等级2时会自动减去等级1已支付的金额<br />全额支付:根据价格全额支付',
+                'tip' => '差额支付:升级会自动减去上一等级支付价格<br />全额支付:升级使用全额支付价格',
             ],
             'pay_price' => [
                 'tip' => '购买当前等级所需支付的积分金额,填写0则免费',

+ 4 - 2
src/place/role/manage/user_role.php

@@ -9,11 +9,13 @@ return [
             ],
             'info_id',
             'level_id',
-            'card',
+            'card' => [
+                'truncate' => true,
+            ],
             'edate' => [
                 'show' => 'date("Y-m-d H:i:s", {edate})',
             ],
-            'status',
+            'status' => '',
         ],
         'button' => [
             //'新增' => ['fastadd'],

+ 11 - 1
src/place/role/table/level.php

@@ -31,6 +31,16 @@ return [
             'type'      => 'int(11)',
         ],
 
+        'upday' => [
+            'name'      => '升级时长',
+            'type'      => 'tinyint(1)',
+            'default'   => 1,
+            'value'     => [
+                1 => '重计时长',
+                2 => '续费时长',
+            ],
+        ],
+
         'benefit' => [
             'name'      => '立刻发放权益',
             'type'      => 'tinyint(1)',
@@ -54,7 +64,7 @@ return [
         ],
 
         'pay' => [
-            'name'      => '升级方式',
+            'name'      => '支付方式',
             'type'      => 'tinyint(1)',
             'default'   => 1,
             'value'     => [

+ 11 - 3
src/place/score/lib/Info.php

@@ -3,17 +3,25 @@ use Dever;
 use Place;
 class Info
 {
+    # 获取基础信息
+    public function get($id)
+    {
+        return Dever::db('info', 'place_score')->find($id, ['col' => 'id,name,symbol,symbol_location,exp,status']);
+    }
+
     # 获取积分信息
     public function getInfo($id)
     {
-        $info = Dever::db('info', 'place_score')->find(['id' => $id, 'status' => 1], ['col' => 'id,name,symbol,symbol_location,exp,status']);
+        $info = $this->get($id);
         if (!$info) {
             Dever::error('积分信息错误');
         }
+        if ($info['status'] == 2) {
+            Dever::error('积分信息错误');
+        }
         $info['exp_tip'] = $this->getExpTip($info);
         $info['recharge'] = $info['withdraw'] = $info['exchange'] = 2;
         # 按照角色获取积分规则
-
         $info = Dever::load('item', 'place_benefit')->load('score')->get(Place::$uid, $info);
         $info['button'] = 1;
         if ($info['recharge'] == 1 && $info['exchange'] == 1 && $info['withdraw'] == 1) {
@@ -40,7 +48,7 @@ class Info
     public function getText($price, $score)
     {
         if (is_numeric($score)) {
-            $score = Dever::db('info', 'place_score')->find($score);
+            $score = $this->get($score);
         }
         $symbol = $score['symbol'];
         if ($score['symbol_location'] == 1) {

+ 1 - 1
src/place/score/lib/Log.php

@@ -28,7 +28,7 @@ class Log
         }
 
         # 规则操作
-        $data = Dever::load('item', 'place_benefit')->getUser($uid, 'score');
+        $data = Dever::load('user', 'place_benefit')->getValid($uid, 'score');
         if ($data) {
             $score = [];
             foreach ($data as $v) {

+ 0 - 47
src/place/score/table/info.php

@@ -37,53 +37,6 @@ return [
                 2 => '后',
             ],
         ],
-        'recharge' => [
-            'name'      => '充值',
-            'type'      => 'tinyint(1)',
-            'default'   => 2,
-            'value'     => [
-                1 => '开启',
-                2 => '关闭',
-            ],
-        ],
-        'exchange' => [
-            'name'      => '兑换',
-            'type'      => 'tinyint(1)',
-            'default'   => 2,
-            'value'     => [
-                1 => '开启',
-                2 => '关闭',
-            ],
-        ],
-        'withdraw' => [
-            'name'      => '提现',
-            'type'      => 'tinyint(1)',
-            'default'   => 2,
-            'value'     => [
-                1 => '开启',
-                2 => '关闭',
-            ],
-        ],
-        'withdraw_fee' => [
-            'name'      => '提现手续费',
-            'type'      => 'varchar(11)',
-            'default'   => '5',
-        ],
-        'withdraw_limit' => [
-            'name'      => '每日限次',
-            'type'      => 'int(11)',
-            'default'   => '5',
-        ],
-        'withdraw_min' => [
-            'name'      => '提现下限',
-            'type'      => 'varchar(11)',
-            'default'   => '1',
-        ],
-        'withdraw_max' => [
-            'name'      => '提现上限',
-            'type'      => 'varchar(11)',
-            'default'   => '100',
-        ],
         'sort' => [
             'name'      => '排序',
             'type'      => 'int(11)',

+ 1 - 1
src/place/source/lib/Cate.php

@@ -82,7 +82,7 @@ class Cate
                 $cate['help_cate_id'] = $channel['help_cate_id'];
             }
         }
-        $cate['score'] = Dever::db('info', 'place_score')->find($cate['score_id'], ['col' => 'id,name,exp,symbol,symbol_location']);
+        $cate['score'] = Dever::load('info', 'place_score')->get($cate['score_id']);
         $cate['scope'] = '1,' . $cate['channel_id'];
         if ($cate['parent_id']) {
             $cate['scope'] .= ',' . $cate['parent_id'];

+ 1 - 1
src/place/source/manage/cate.php

@@ -1,7 +1,7 @@
 <?php
 $channel_id = Dever::input('search')['channel_id'] ?? 1;
 $channel = Dever::db('channel', 'place_source')->find($channel_id);
-$score = Dever::db('info', 'place_score')->find($channel['score_id']);
+$score = Dever::load('info', 'place_score')->get($channel['score_id']);
 $helpCate = Dever::db('help_cate', 'place_source')->find($channel['help_cate_id']);
 return [
     'list' => [

+ 1 - 1
src/place/source/manage/spec_import.php

@@ -14,7 +14,7 @@ return [
                 'type' => 'radio',
                 'option' => [
                     ['id' => 1, 'name' => '规格模板'],
-                    ['id' => 2, 'name' => '资源'],
+                    //['id' => 2, 'name' => '资源'],
                 ],
                 'default' => 1,
             ],

+ 1 - 1
src/place/user/lib/Coupon.php

@@ -275,7 +275,7 @@ class Coupon
     public function use($type, $info, $score = false)
     {
         if (!$score) {
-            $score = Dever::db('info', 'place_score')->find($info['score_id']);
+            $score = Dever::load('info', 'place_score')->get($info['score_id']);
         }
         $info['coupon_cash'] = Dever::load('info', 'place_score')->toMoney($info['coupon_cash'], $score['exp']);
 

+ 2 - 2
src/place/user/lib/Gift.php

@@ -143,7 +143,7 @@ class Gift
 
     # 领取
     public function receive_commit(){}
-    public function receive($uid, $id)
+    public function receive($uid, $id, $limit = true)
     {
         $info = Dever::db('gift', 'place_benefit')->find(['id' => $id, 'status' => 1]);
         if (!$info) {
@@ -180,7 +180,7 @@ class Gift
     public function use($type, $info, $score = false)
     {
         if (!$score) {
-            $score = Dever::db('info', 'place_score')->find($info['score_id']);
+            $score = Dever::load('info', 'place_score')->get($info['score_id']);
         }
         $info['gift_cash'] = Dever::load('info', 'place_score')->toMoney($info['gift_cash'], $score['exp']);