afa 4 сар өмнө
parent
commit
20c7fd161e

+ 26 - 9
application/admin/controller/general/Sharingfees.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller\general;
 
+use app\common\model\ProductLists;
 use app\common\controller\Backend;
 
 /**
@@ -22,16 +23,32 @@ class Sharingfees extends Backend
     {
         parent::_initialize();
         $this->model = new \app\common\model\Sharingfees;
-
     }
 
-
-
-    /**
-     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
-     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
-     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
-     */
-
+    public function index()
+    {
+        //设置过滤方法
+        $this->request->filter(['strip_tags', 'trim']);
+        if (false === $this->request->isAjax()) {
+            return $this->view->fetch();
+        }
+        //如果发送的来源是 Selectpage,则转发到 Selectpage
+        if ($this->request->request('keyField')) {
+            return $this->selectpage();
+        }
+        [$where, $sort, $order, $offset, $limit] = $this->buildparams();
+        $list = $this->model
+            ->where($where)
+            ->order($sort, $order)
+            ->paginate($limit);
+
+        $productLists = new ProductLists;
+        foreach ($list as $key => $value) {
+            $name =$productLists->where('id', 'in', $value->product_id)->column('zh_name');
+            $list[$key]['product_id'] = implode(',', $name);
+        }
+        $result = ['total' => $list->total(), 'rows' => $list->items()];
+        return json($result);
+    }
 
 }

+ 8 - 2
application/admin/view/general/sharingfees/add.html

@@ -6,16 +6,22 @@
             <input id="c-product_id" data-rule="required" data-source="product/lists/index" data-multiple="true" class="form-control selectpage" data-field="zh_name" name="row[product_id]" type="text" value="">
         </div>
     </div>
+   
+
     <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Num')}:</label>
+        <label class="control-label col-xs-12 col-sm-2">{:__('分润类型')}:</label>
         <div class="col-xs-12 col-sm-8">
-            <input id="c-num" data-rule="required" class="form-control" name="row[num]" type="number" value="0">
+            {:build_radios('row[type_id]', ['1'=>__('存储服务费'), '0'=>__('手续费')])}
         </div>
     </div>
+
+          
+
     <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Fees')}:</label>
         <div class="col-xs-12 col-sm-8">
             <input id="c-fees" data-rule="required" class="form-control" step="0.001" name="row[fees]" type="number" value="0.000">
+            <p style="color:cadetblue">请输入%</p>
         </div>
     </div>
    

+ 7 - 9
application/admin/view/general/sharingfees/edit.html

@@ -3,27 +3,25 @@
     <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Product_id')}:</label>
         <div class="col-xs-12 col-sm-8">
-            <input id="c-product_id" data-rule="required" data-source="product/index" class="form-control selectpage" name="row[product_id]" type="text" value="{$row.product_id|htmlentities}">
+            <input id="c-product_id" data-rule="required" data-source="product/lists/index"" data-multiple="true" class="form-control selectpage" data-field="zh_name" name="row[product_id]" type="text" value="{$row.product_id|htmlentities}">
         </div>
     </div>
+   
     <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Num')}:</label>
+        <label class="control-label col-xs-12 col-sm-2">{:__('分润类型')}:</label>
         <div class="col-xs-12 col-sm-8">
-            <input id="c-num" data-rule="required" class="form-control" name="row[num]" type="number" value="{$row.num|htmlentities}">
+            {:build_radios('row[type_id]', ['1'=>__('存储服务费'), '0'=>__('手续费')], $row.type_id)}
         </div>
     </div>
+
     <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Fees')}:</label>
         <div class="col-xs-12 col-sm-8">
             <input id="c-fees" data-rule="required" class="form-control" step="0.001" name="row[fees]" type="number" value="{$row.fees|htmlentities}">
+            <p style="color:cadetblue">请输入%</p>
         </div>
     </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-status" data-rule="required" class="form-control" name="row[status]" type="number" value="{$row.status|htmlentities}">
-        </div>
-    </div>
+
 
     <div class="form-group layer-footer">
         <label class="control-label col-xs-12 col-sm-2"></label>

+ 7 - 1
application/admin/view/product/pledges/add.html

@@ -70,7 +70,13 @@
         </div>
     </div>
     
-
+     <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('服务费分润')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-share" data-rule="required" class="form-control" step="0.001" name="row[share]" type="number" value="0.000">
+            <p style="color:cadetblue">请输入%</p>
+        </div>
+    </div>
     <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Detail')}:</label>
         <div class="col-xs-12 col-sm-8">

+ 9 - 0
application/admin/view/product/pledges/edit.html

@@ -70,6 +70,15 @@
             <input id="c-teac" class="form-control" name="row[teac]" type="number" value="{$row.teac|htmlentities}">
         </div>
     </div>
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('服务费分润')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-share" data-rule="required" class="form-control" step="0.001" name="row[share]" type="number" value="{$row.share|htmlentities}">
+            <p style="color:cadetblue">请输入%</p>
+        </div>
+    </div>
+
     <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Detail')}:</label>
         <div class="col-xs-12 col-sm-8">

+ 120 - 15
application/api/command/SharingFees.php

@@ -3,13 +3,18 @@
 
 namespace app\api\command;
 
-use app\common\logic\ScanLogic;
+
 use think\console\Command;
 use think\console\Input;
 use think\console\Output;
+use fast\Asset;
+use app\common\model\ProductPledges;
 use app\common\model\ProductOrder;
-use app\common\model\UserModel;
-use think\Model;
+use app\common\model\LedgerTokenChangeModel;
+use app\common\model\LedgerFrozenChangeModel;
+use app\common\model\LedgerWalletModel;
+use app\common\model\Sharingfees as SharingFeesModel;
+use app\common\model\LedgerTeacChangeModel;
 
 
 class SharingFees extends Command
@@ -29,10 +34,13 @@ class SharingFees extends Command
         $output->writeln('定时任务开始执行:' . date('Y-m-d H:i:s', time()));
 
         /*** 发放分红收益 ***/
-        $output->writeln("开始发放空投:");
-        $i = 0;
-        $count = $this->reset_user_pledge($i);
-        $output->writeln('定时任务执行结束,总执行:' .  $count  . '个');
+        $output->writeln("手续费分润:");
+      
+        $feeCount = self::setSharingFees();
+
+        //存储服务费分润
+        $pledgeCount = self::setSharingPledge();
+        $output->writeln('定时任务执行结束,手续费执行:' .  $feeCount  . '个,服务费执行:' .  $pledgeCount  . '个');
     }
 
 
@@ -43,20 +51,117 @@ class SharingFees extends Command
       (茶宝:100/300=0.333 茶宝(手续费账户)200/300=0.666)
       2)再算出持有A产品的用户,每人持有量;根据每人持有量*每份应发数量,计算出每人应发总额,发放到该用户的茶宝账户上。
       3)按上述算法,以此计算持有B和持有CDE的用户
-
     */
+    public static function setSharingFees(){
 
-
-    public  function reset_user_pledge(){
-
-      
-
+        $list = SharingFeesModel::where(['status'=> SharingFeesModel::Normal])->where('type_id', SharingFeesModel::TypeFees)->select();
+        if(empty($list)) return true;
+        $output = new Output();
+        $wallet = new LedgerWalletModel();
+        $productOrder = new ProductOrder();
+        $i = 0;
+        //茶宝手续费
+        $tokenFee = abs(LedgerTokenChangeModel::whereTime('create_time', 'today')->where('action', 'in', [LedgerTokenChangeModel::Giveaway, LedgerTokenChangeModel::Pledge, LedgerTokenChangeModel::TransferFee])->sum('change_amount'));
+        //冻结手续费
+        $frozenFee = abs(LedgerFrozenChangeModel::where('create_time', 'yesterday')->where('action', 'in', [LedgerFrozenChangeModel::Giveaway, LedgerFrozenChangeModel::Pledge, LedgerFrozenChangeModel::TransferFees])->sum('change_amount'));
+        foreach($list as $item){
+          
+            //TOKEN产品的持有量
+            $productHold = $productOrder::getHoldProductNum($item->product_id);
+            //分润
+            $tokenFees = bcmul($tokenFee, bcdiv($item->fees, 100, 3), 3);
+
+            //统计产品总数量
+            $productNum =  array_sum(array_column($productHold, 'num')) ;
+            //每份产品的分润
+            $tave = bcdiv($tokenFees, $productNum, 6);
+
+            //冻结分润
+            $frozenFees = bcmul($frozenFee, bcdiv($item->fees, 100, 3), 3);
+            //每份产品的分润
+            $fave = bcdiv($frozenFees, $productNum, 6);
+            //$output->writeln('产品:' . $item->product_id . '茶宝分润:' . $tave . ' 手续费账户分润:' . $fave );
+            foreach ($productHold as $vv) {
+                //茶宝
+                $tokenNum = bcmul($vv->num, $tave, 6);
+                if($tokenNum > 0) {
+                    $wallet->changeWalletAccount($vv->user_id, Asset::TOKEN, $tokenNum , LedgerTokenChangeModel::SharingFees);
+                    $output->writeln('用户:' . $vv->user_id . '茶宝分润:' . $tokenNum );
+                }
+                //手续费
+                $frozenNum = bcmul($vv->num, $fave, 6);
+                if($frozenNum > 0) {
+                    $wallet->changeWalletAccount($vv->user_id, Asset::FROZEN, $frozenNum , LedgerFrozenChangeModel::SharingFees);
+                    $output->writeln('用户:' . $vv->user_id. ' 手续费账户分润:' . $frozenNum );
+                }
+                $i +=1;
+            }
+        }
+        return $i;
+    }
 
 
 
+    //存储服务费分润
+    public static function setSharingPledge(){
 
+        $list = SharingFeesModel::where(['status'=> SharingFeesModel::Normal])->where('type_id', SharingFeesModel::TypeStorage)->select();
+        if(empty($list)) return true;
+        
+        $teacFee = abs(LedgerTeacChangeModel::whereTime('create_time', 'today')->where('action', LedgerTeacChangeModel::PledgeFee)->sum('change_amount'));       //TEAC   const PledgeFee        = 7; //存储服务费
+        $tokenFee = abs(LedgerTokenChangeModel::whereTime('create_time', 'today')->where('action', LedgerTokenChangeModel::Pledge)->sum('change_amount'));       //TOKEN   const PledgeFee        = 7; //存储服务费
+        $frozenFee = abs(LedgerFrozenChangeModel::whereTime('create_time', 'today')->where('action', LedgerFrozenChangeModel::Pledge)->sum('change_amount'));       //FROZEN   const PledgeFee        = 7; //存储服务费
+        $i = 0;
+        $output = new Output();
+        $wallet = new LedgerWalletModel();
+        $productOrder = new ProductOrder();
+        foreach($list as $item){
+          
+            //TOKEN产品的持有量
+            $productHold = $productOrder::getHoldProductNum($item->product_id);
+            //统计产品总数量
+            $productNum =  array_sum(array_column($productHold, 'num')) ;
+
+            //Teac分润
+            $teacFees = bcmul($teacFee, bcdiv($item->fees, 100, 3), 3);
+            //每份产品的分润
+            $tave = bcdiv($teacFees, $productNum, 6);
+
+            //TOKEN分润
+            $tokenFees = bcmul($tokenFee, bcdiv($item->fees, 100, 3), 3);
+            //每份产品的分润
+            $cave = bcdiv($tokenFees, $productNum, 6);
+
+            //冻结分润
+            $frozenFees = bcmul($frozenFee, bcdiv($item->fees, 100, 3), 3);
+            //每份产品的分润
+            $fave = bcdiv($frozenFees, $productNum, 6);
+            //$output->writeln('产品:' . $item->product_id . '茶宝分润:' . $tave . ' 手续费账户分润:' . $fave );
+            foreach ($productHold as $vv) {
+
+                //TEAC
+                $teacNum = bcmul($vv->num, $tave, 6);
+                if($teacNum > 0) {
+                    $wallet->changeWalletAccount($vv->user_id, Asset::TEAC, $teacNum , LedgerTokenChangeModel::SharingFees);
+                    $output->writeln('用户:' . $vv->user_id . 'TEAC分润:' . $teacNum );
+                }
+
+                //茶宝
+                $tokenNum = bcmul($vv->num, $cave, 6);
+                if($tokenNum > 0) {
+                    $wallet->changeWalletAccount($vv->user_id, Asset::TOKEN, $tokenNum , LedgerTokenChangeModel::SharingFees);
+                    $output->writeln('用户:' . $vv->user_id . '茶宝分润:' . $tokenNum );
+                }
+                //手续费
+                $frozenNum = bcmul($vv->num, $fave, 6);
+                if($frozenNum > 0) {
+                    $wallet->changeWalletAccount($vv->user_id, Asset::FROZEN, $frozenNum , LedgerFrozenChangeModel::SharingFees);
+                    $output->writeln('用户:' . $vv->user_id. ' 手续费账户分润:' . $frozenNum );
+                }
+                $i +=1;
+            }
+        }
+        return $i;
     }
 
-
-
 }

+ 0 - 2
application/api/logic/PledgeLogic.php

@@ -3,8 +3,6 @@
 namespace app\api\logic;
 
 use Exception;
-use think\Env;
-use think\Cache;
 use think\Loader ;
 use fast\Asset;
 use app\common\model\LedgerFrozenChangeModel;

+ 3 - 1
application/common/model/LedgerFrozenChangeModel.php

@@ -23,7 +23,7 @@ class LedgerFrozenChangeModel extends Model
     const TeamLevel         = 8; //等级分佣
     const Pledge            = 9; //质押服务费  2
     const TransferFees      = 10; //转让手续费
-
+    const SharingFees       = 11; //手续费分润
 
     public static function getStatusList()
     {
@@ -40,6 +40,8 @@ class LedgerFrozenChangeModel extends Model
             self::TeamLevel => __('社区服务奖励'),
             self::Pledge => __('质押'),
             self::TransferFees => __('转让手续费'),
+            self::SharingFees => __('手续费分润'),
+
 
         ];
     }

+ 3 - 0
application/common/model/LedgerTokenChangeModel.php

@@ -37,6 +37,8 @@ class LedgerTokenChangeModel extends Model
     const RwaExchangeRecord = 23; //兑换Rwa
     const Promotion         = 24; //推广奖励
     const TransferFee       = 25; //转让手续费 3
+    const SharingFees       = 26; //手续费分润
+
 
     /*
     * 支付状态
@@ -96,6 +98,7 @@ class LedgerTokenChangeModel extends Model
             self::RwaExchangeRecord => __('兑换Rwa'),
             self::Promotion => __('推广奖励'),
             self::TransferFee => __('转让手续费'),
+            self::SharingFees => __('手续费分润'),
 
            ];
     }

+ 9 - 0
application/common/model/ProductOrder.php

@@ -121,6 +121,15 @@ class ProductOrder extends Model
         return self::where('user_id', $uid)->whereIn('product_id', $productId)->whereIn('status', [self::Paid, self::Transferred, self::Freeze])->count();
     }
 
+    //获取持有持有产品数量
+    public static function getHoldProductNum(string $productId){
+        
+        return self::whereIn('product_id', $productId)->whereIn('status', [self::Paid, self::Transferred, self::Freeze])
+        ->field('user_id,sum(num) as num')
+        ->group('user_id')
+        ->select();
+    }
+
     //获取持有产品数量
     public static function getByOrderProductNum($productId, $num, $uid)
     {

+ 6 - 2
application/common/model/Sharingfees.php

@@ -25,9 +25,13 @@ class Sharingfees extends Model
         'update_time_text'
     ];
     
+    // 状态
+    const Hidden           = 0;
+    const Normal           = 1;
 
-    
-
+    // 分润类型
+    const TypeFees         = 0;
+    const TypeStorage      = 1;
 
 
     public function getCreateTimeTextAttr($value, $data)

+ 2 - 0
application/common/model/UserArea.php

@@ -51,6 +51,8 @@ class UserArea  extends Model
     {
         $row = self::where('user_id', $uid)->where('type_id', self::DefaultAdders)->find();
         if($row){
+            $row->name = self::DefaultAdders;
+            $row->phone = $uid;
             $row->area_code = $areaCode;
             $row->address   = $address;
             return $row->save();

+ 6 - 6
public/assets/js/backend/general/sharingfees.js

@@ -25,13 +25,13 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                 columns: [
                     [
                         {checkbox: true},
-                        {field: 'id', title: __('Id')},
-                        {field: 'product_id', title: __('Product_id'), operate: 'LIKE'},
-                        {field: 'num', title: __('Num')},
+                        {field: 'id', title: __('Id'), operate: false},
+                        {field: 'product_id', title: __('Product_id'), operate: false},
                         {field: 'fees', title: __('Fees'), operate:'BETWEEN'},
-                        {field: 'status', title: __('Status')},
-                        {field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
-                        {field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
+                        {field: 'type_id', title: __('分润类型'), searchList: { "1": __('存储服务费'), "0": __('手续费') }, formatter: Table.api.formatter.status },
+                        {field: 'status', title: __('Status'), searchList: { "1": __('上架'), "0": __('下架') }, formatter: Table.api.formatter.toggle },
+                        {field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', operate: false, autocomplete:false, formatter: Table.api.formatter.datetime},
+                        {field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', operate: false, autocomplete:false, formatter: Table.api.formatter.datetime},
                         {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
                     ]
                 ]

+ 3 - 0
public/assets/js/backend/ledger/ledger_frozen_change.js

@@ -39,6 +39,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                                 7: '生态节点',
                                 8: '社区服务奖励',
                                 9: '存储服务费',
+                                10: '转让手续费',
+                                11: '手续费分润',
+
                             }, operate: 'FIND_IN_SET', formatter: Table.api.formatter.label
                         },
                     ]

+ 3 - 0
public/assets/js/backend/ledger/ledger_token_change.js

@@ -58,6 +58,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                                 22: '茶付宝划转',
                                 23: '兑换Rwa',
                                 24: '推广奖励',
+                                25: '转让手续费',
+                                26: '手续费分润',
+
                             }, operate: 'FIND_IN_SET', formatter: Table.api.formatter.label
                         },
                     ]

+ 2 - 0
public/assets/js/backend/product/pledges.js

@@ -36,6 +36,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                         {field: 'income_reta', title: __('Income_reta'), operate: false},
                         {field: 'token', title: __('Token'), operate: false},
                         {field: 'teac', title: __('Teac'), operate: false},
+                        {field: 'share', title: __('服务费分润'), operate: false},
+
                         {field: 'weigh', title: __('Weigh'), operate: false},
                         {field: 'is_renew', title: __('续费'), searchList: {0:__('关闭'),1 :__('开启')}, formatter: Table.api.formatter.toggle},
                         {field: 'status', title: __('Status'), searchList: {0:__('关闭'),1 :__('正常')}, formatter: Table.api.formatter.toggle},