Browse Source

报单清分功能完成

BF-202210271038\Administrator 2 years ago
parent
commit
19cef5f740

+ 1 - 0
app/Http/Controllers/Api/ContractController.php

@@ -70,6 +70,7 @@ class ContractController extends FrontController
             'status'=>1,
             'hash'=>$txid,
             'broadcast_data'=>'',
+            'is_out'=>'0',
             'error_msg'=>'',
             'money'=>$investData->{'invest_money'},
             'platform_money'=>$investData->{'platform_money'},

+ 14 - 0
app/Models/Contract.php

@@ -50,6 +50,20 @@ use Prettus\Repository\Traits\TransformableTrait;
  * @method static \Illuminate\Database\Eloquent\Builder|Contract whereTechnologyProportion($value)
  * @property string|null $contract_sn 合约编号
  * @method static \Illuminate\Database\Eloquent\Builder|Contract whereContractSn($value)
+ * @property float $platform_money 平台收益数量
+ * @property float $indirect_proportion 间推比例
+ * @property float $team_proportion 团队比例
+ * @property float $common_proportion 公排比例
+ * @property float $sediment_proportion 沉淀比例
+ * @property float|null $agency_proportion 代币比例
+ * @property int|null $is_out 是否公排出局
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereAgencyProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereCommonProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereIndirectProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereIsOut($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract wherePlatformMoney($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereSedimentProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereTeamProportion($value)
  */
 class Contract extends Model implements Transformable
 {

+ 12 - 0
app/Models/ContractDistribution.php

@@ -38,6 +38,18 @@ use Prettus\Repository\Traits\TransformableTrait;
  * @property int $to_m_id 收款人信息
  * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereToMId($value)
  * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereType($value)
+ * @property float $db_money 代币数量
+ * @property float $nbn_money bnb数量
+ * @property float $proportion 收益比例
+ * @property string|null $remark 备注
+ * @property int|null $status 1:成功,0:失败,2:交易失败
+ * @property string|null $to_address 收款地址
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereDbMoney($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereNbnMoney($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereRemark($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereStatus($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereToAddress($value)
  */
 class ContractDistribution extends Model implements Transformable
 {

+ 12 - 0
app/Models/Invest.php

@@ -38,6 +38,18 @@ use Prettus\Repository\Traits\TransformableTrait;
  * @method static \Illuminate\Database\Eloquent\Builder|Invest wherePointProportion($value)
  * @method static \Illuminate\Database\Eloquent\Builder|Invest whereRevealProportion($value)
  * @method static \Illuminate\Database\Eloquent\Builder|Invest whereTechnologyProportion($value)
+ * @property float $platform_money 平台收益数量
+ * @property float $indirect_proportion 间推比例
+ * @property float $team_proportion 团队比例
+ * @property float $common_proportion 公排比例
+ * @property float $sediment_proportion 沉淀比例
+ * @property float|null $agency_proportion 代币比例
+ * @method static \Illuminate\Database\Eloquent\Builder|Invest whereAgencyProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Invest whereCommonProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Invest whereIndirectProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Invest wherePlatformMoney($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Invest whereSedimentProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Invest whereTeamProportion($value)
  */
 class Invest extends Model implements Transformable
 {

+ 4 - 0
app/Models/Member.php

@@ -77,6 +77,10 @@ use Prettus\Repository\Traits\TransformableTrait;
  * @method static \Illuminate\Database\Eloquent\Builder|Member whereIsLock($value)
  * @method static \Illuminate\Database\Eloquent\Builder|Member whereMP($value)
  * @method static \Illuminate\Database\Eloquent\Builder|Member whereRecomMobile($value)
+ * @property int|null $is_auto 是否自动升级
+ * @property int|null $is_boss is_boss
+ * @method static \Illuminate\Database\Eloquent\Builder|Member whereIsAuto($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Member whereIsBoss($value)
  */
 class Member extends Model implements Transformable
 {

+ 4 - 0
app/Models/Members.php

@@ -80,6 +80,10 @@ use Prettus\Repository\Traits\TransformableTrait;
  * @method static \Illuminate\Database\Eloquent\Builder|Members whereErrMsg($value)
  * @method static \Illuminate\Database\Eloquent\Builder|Members whereIsLock($value)
  * @method static \Illuminate\Database\Eloquent\Builder|Members whereMP($value)
+ * @property int|null $is_auto 是否自动升级
+ * @property int|null $is_boss is_boss
+ * @method static \Illuminate\Database\Eloquent\Builder|Members whereIsAuto($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Members whereIsBoss($value)
  */
 class Members extends Model implements Transformable
 {

+ 337 - 19
app/Servers/ContractServer.php

@@ -14,10 +14,13 @@ use App\Models\ContractDistribution;
 use App\Models\ContractLog;
 use App\Models\ErrorRecord;
 use App\Models\Invest;
+use App\Models\Level;
 use App\Models\Member;
 use App\Models\MemberBoth;
+use App\Models\MemberClan;
 use App\Servers\Icon\BanRPC;
 use App\Servers\Icon\TronRPC;
+use Illuminate\Support\Facades\DB;
 
 /**
  * Redis数据缓存类
@@ -28,13 +31,13 @@ class ContractServer
 
     static private $server = '';
     private $distributionArr=[
-      1=>'直推奖',
-      2=>'均富池',
-      3=>'见点奖',
-      4=>'dao池',
-      5=>'技术奖',
-      6=>'托底池',
-      7=>'推荐奖',
+      1=>'平台奖金',
+      2=>'直推奖金',
+      3=>'间推奖金',
+      4=>'团队奖金',
+      5=>'公排池',
+      6=>'沉淀奖',
+      7=>'代币奖',
     ];
 
 
@@ -60,25 +63,340 @@ class ContractServer
      */
     function broadcastDetection(){
         //检测报单信息
-        $contractList=Contract::where('status',1)->select(['id','hash','m_id'])->limit(50)->get();
+        $contractList=Contract::where('status',1)->limit(50)->get();
+        $sysAddress=CommonServer::creatServer()->getConfigValue('sys_address');
+        $sysAddress=strtolower($sysAddress);
         foreach ($contractList as $contract){
-            $broadcastData=BanRPC::creatServer()->getTransactionReceipt($contract->{'hash'});
-            if (empty($broadcastData)) {
-                //交易正在广播中,下次继续查询
-                continue;
-            } else {
-                //交易已完成 返回数据格式数据 ,将数据json保存
-                $updateInfo['broadcast_data'] = json_encode($broadcastData);
-                if ($broadcastData['status'] == '0x1') {
-                    $updateInfo['status'] = 2;
+            $contractNum=Contract::where('hash',$contract->{'hash'})->count();
+            if($contractNum>0){
+                $broadcastData=BanRPC::creatServer()->getTransactionReceipt($contract->{'hash'});
+                $memberAddress=Member::where('id',$contract->{'m_id'})->value('address');
+                $memberAddress=strtolower($memberAddress);
+                if (empty($broadcastData)) {
+                    //交易正在广播中,下次继续查询
+                    continue;
                 } else {
-                    $updateInfo['status'] = 3;
+                    //交易已完成 返回数据格式数据 ,将数据json保存
+                    $updateInfo['broadcast_data'] = json_encode($broadcastData);
+                    if ($broadcastData['status'] == '0x1') {
+                        if($sysAddress!=strtolower($broadcastData['to'])){
+                            $updateInfo['status'] = 3;
+                            $updateInfo['error_msg'] = '收款地址不匹配';
+                        }elseif ($memberAddress!=strtolower($broadcastData['from'])){
+                            $updateInfo['status'] = 3;
+                            $updateInfo['error_msg'] = '转出地址不匹配';
+                        }else{
+                            $updateInfo['status'] = 2;
+                        }
+                    } else {
+                        $updateInfo['status'] = 3;
+                        $updateInfo['error_msg'] = '广播失败';
+                    }
+
+                }
+            }else{
+                $updateInfo['status'] = 3;
+                $updateInfo['error_msg'] = '当前哈希被重复使用';
+            }
+            //检测是否有更新细腻
+            if($updateInfo){
+                DB::beginTransaction();
+               $ret= $contract->update($updateInfo);
+               if(empty($ret)){
+                   CommonServer::creatServer()->addErrorRecord('保单信息更新失败',$contract,0);
+                   DB::rollBack();
+               }
+               if($updateInfo['status']==2){
+                   //报单成功,就进行清分
+                   $memberTeam=MemberClan::where('m_id')->select(['id','m_id','p_ids','one_m_id','two_m_id'])->first();
+                   $pIds=array_reverse(array_filter(explode(',',$memberTeam->{'p_ids'})));
+                   //平台清分
+                   $this->platformDistribution($contract,$pIds);
+                   //直推及间推发放
+                   $this->directProportion($contract,$memberTeam);
+                   //团队清分
+                   $this->teamProportion($contract,$memberTeam);
+                   //公排分账
+                   $this->commonProportion($contract);
+                   //沉淀账户分账
+                   $this->sedimentProportion($contract);
+                   //代币清分
+                   $this->agencyProportion($contract);
+               }
+
+
+
+
+               DB::commit();
+            }
+        }
+
+    }
+
+    /**
+     * 系统分账功能
+     * @param Contract $contract
+     * @param $pIds
+     */
+    private function platformDistribution(Contract $contract,$pIds){
+        $platformMoney=$contract->{'platform_money'};
+        if(empty($platformMoney)){
+            $this->addContractLog($contract,'平台清分金额为0,停止平台清分');
+        }else{
+            //验证平台分红
+            $receiveLevelId=CommonServer::creatServer()->getConfigValue('receive_level_id');
+            //用户分红金额
+            if(empty($receiveLevelId)){
+                $this->addContractLog($contract,'未设置平台分红等级,跳出分红');
+            }else{
+                $pMember=Member::whereIn('id',$pIds)->where('level_id','>=',$receiveLevelId)->orderBy('id','desc')->select(['id','address','is_auto'])->first();
+                if($pMember){
+                    $receiveUserMax=CommonServer::creatServer()->getConfigValue('receive_user_max');
+                    $teamContractNum=$this->getTeamContractNum($pMember->{'id'});
+                    if($teamContractNum>=$receiveUserMax){
+                        //最大比例
+                        $receiveProportion=CommonServer::creatServer()->getConfigValue('receive_max');
+                        $this->addContractLog($contract,$teamContractNum.'团队数量满足条件,执行最大分红比例');
+                    }else{
+                        //最小比例
+                        $receiveProportion=CommonServer::creatServer()->getConfigValue('receive_mix');
+                        $this->addContractLog($contract,$teamContractNum.'团队数量满不足条件,执行最小分红比例');
+                    }
+                    if(empty($receiveProportion)){
+                        $this->addContractLog($contract,$teamContractNum.'平台分红比例不存在,跳出分红');
+                    }else{
+                        $receiveMoney=round($platformMoney*$receiveProportion/100,6);
+                        if($receiveMoney<=0){
+                            $this->addContractLog($contract,$receiveProportion.'分红比例金额小于0,跳出分红');
+                        }else{
+                            //计算推荐分红数量及平台收益数量
+                            if($pMember->{'is_auto'}==1){
+                                $this->addContractLog($contract,'后台升级用户,跳出分红');
+                            }else{
+                                $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$receiveMoney,1,$pMember->{'id'},$pMember->{'address'},$receiveProportion,1,'平台用户分红');
+                                $platformMoney-=$receiveMoney;
+                            }
+
+                        }
+                    }
+                }else{
+                    $this->addContractLog($contract,$receiveLevelId.'及以上的父级不存在,跳出分红');
+                }
+            }
+            $openSys=CommonServer::creatServer()->getConfigValue('open_sys');
+            if($openSys){
+                $receiveAddress=CommonServer::creatServer()->getConfigValue('receive_address');
+                if(empty($receiveAddress)){
+                    $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$platformMoney,1,0,'',$contract->{'platform_money'},0,'平台分红至系统账户');
+                }else{
+                    $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$platformMoney,1,0,$receiveAddress,$contract->{'platform_money'},1,'平台分红至系统账户');
+                }
+            }else{
+                $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$platformMoney,1,0,'',$contract->{'platform_money'},0,'平台关闭转账至系统账户,不进行划拨分账');
+            }
+        }
+    }
+
+    /**
+     * 直推及间推
+     * @param Contract $contract
+     * @param MemberClan $memberTeam
+     */
+    private function directProportion(Contract $contract,MemberClan $memberTeam){
+        $directMember=Member::where('id',$memberTeam->{'one_m_id'})->select(['id','address','is_boss'])->first();
+        if(empty($directMember)){
+            $this->addContractLog($contract,'直推人信息异常,停止清分');
+        }else{
+            if($directMember->{'is_boss'}){
+                $this->addContractLog($contract,'直推人是boss,直与间都划分为直推人');
+                $directProportion=($contract->{'direct_proportion'}+$contract->{'indirect_proportion'});
+                $directMoney=round(($contract->{'money'}-$contract->{'platform_money'})*$directProportion/100,6);
+                $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$directMoney,2,$directMember->{'id'},$directMember->{'address'},$directProportion,1,'直推BOSS分红');
+            }else{
+                $directMoney=round(($contract->{'money'}-$contract->{'platform_money'})*$contract->{'direct_proportion'}/100,6);
+                $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$directMoney,2,$directMember->{'id'},$directMember->{'address'},$contract->{'direct_proportion'},1,'直推分红');
+                $indirectMember=Member::where('id',$memberTeam->{'two_m_id'})->select(['id','address','is_boss'])->first();
+                $indirectMoney=round(($contract->{'money'}-$contract->{'platform_money'})*$contract->{'indirect_proportion'}/100,6);
+                if(empty($indirectMember)){
+                    $this->addContractLog($contract,'间推人信息不存在,停止清分');
+                    $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$indirectMoney,3,$directMember->{'id'},$directMember->{'address'},$contract->{'indirect_proportion'},0,'间推推分红,间推人不存在,未划分');
+                }else{
+                    $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$indirectMoney,3,$directMember->{'id'},$directMember->{'address'},$contract->{'indirect_proportion'},1,'间推推分红');
+                }
+            }
+        }
+    }
+
+    /**
+     * 团队清分
+     * @param Contract $contract
+     * @param $pIds
+     */
+    private function teamProportion(Contract $contract,$pIds){
+        $levels=Level::select(['direct_num','id','lateral_num'])->get()->toArray();
+        $levelArr=[];
+        foreach ($levels as $level){
+            $levelArr[$level['id']]=$level;
+        }
+        $totalMoney=$contract->{'money'}-$contract->{'platform_money'};
+        $teamTotalMoney=round($totalMoney*$contract->{'team_proportion'}/100,6);
+        $startId=1;
+        $isLateral=false;
+        //已经使用过的比例
+        $useProportion=0;
+        //已经使用金额
+        $userMoney=0;
+        //使用金额
+        $grantMoney=0;
+        foreach ($pIds as $pId){
+            $pMember=Member::where('id',$pId)->select(['id','address','level_id'])->first();
+            if(empty($pMember)){
+                $this->addContractLog($contract,$pId.',无当前父及信息,停止清分');
+            }else{
+                $levelData=empty($levelArr[$pMember->{'level_id'}])?0:$levelArr[$pMember->{'level_id'}];
+                if(empty($levelData)){
+                    $this->addContractLog($contract,$pMember->{'level_id'}.',无当前等级配置信息,停止清分');
+                }else{
+                    if($pMember->{'level_id'}>$startId || ($pMember->{'level_id'}==$startId &&!$isLateral)){
+                        //等级大于等于当前等级
+                        $isLateral=true;
+                        //等级比例
+                        $levelProportion=$levelData['direct_num'];
+                        //等级比例-减去已经使用比例,获取到可用比列
+                        $grantProportion=$levelProportion-$useProportion;
+                        //累计已经使用的比例
+                        $useProportion+=$grantProportion;
+                        $grantMoney=round($grantProportion*$totalMoney/100,6);
+                        if($userMoney+$grantMoney>$teamTotalMoney){
+                            $grantMoney=$teamTotalMoney-$userMoney;
+                            if($grantMoney<=0){
+                                $this->addContractLog($contract,$pMember->{'level_id'}.'层级,资金已不足,停止团队奖金清分');
+                            }
+                        }
+                        $userMoney+=$grantMoney;
+                        $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$grantMoney,4,$pMember->{'id'},$pMember->{'address'},$grantProportion,1,$pMember->{'level_id'}.'级别团队分红');
+                    }elseif($pMember->{'level_id'}==$startId && $isLateral){
+                        //平级奖金发放
+                        $isLateral=false;
+                        $startId=$pMember->{'level_id'}+1;
+                        $lateralMoney=round($grantMoney*$levelData['lateral_num']/100,6);
+                        if($lateralMoney>0){
+                            if($userMoney+$lateralMoney>$teamTotalMoney){
+                                $lateralMoney=$teamTotalMoney-$userMoney;
+                                if($lateralMoney<=0){
+                                    $this->addContractLog($contract,$pMember->{'level_id'}.'层级,资金已不足,停止团队平级奖金清分');
+                                }
+                            }
+                            $userMoney+=$lateralMoney;
+                            $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$lateralMoney,4,$pMember->{'id'},$pMember->{'address'},$levelData['lateral_num'],1,$pMember->{'level_id'}.'级别团队平级分红');
+                        }else{
+                            $this->addContractLog($contract,$pMember->{'level_id'}.'层级,平级奖金小于等于0,停止团队平级奖金清分');
+                        }
+                        if($startId>count($levels)){
+                            //清分完成,跳出循环
+                            break;
+                        }
+                    }
                 }
-                dd($updateInfo);
+            }
+        }
+    }
 
+    /**
+     * 公排分账
+     * @param Contract $contract
+     */
+    private function commonProportion(Contract $contract){
+        $commonMoney=round(($contract->{'money'}-$contract->{'platform_money'})*$contract->{'common_proportion'}/100,6);
+        $openSys=CommonServer::creatServer()->getConfigValue('open_sys');
+        if($openSys){
+            $commonAddress=CommonServer::creatServer()->getConfigValue('common_address');
+            if(empty($commonAddress)){
+                $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$commonMoney,5,0,'',$contract->{'common_proportion'},0,'公排分账,无收款地址信息。系统关闭');
+            }else{
+                $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$commonMoney,5,0,$commonAddress,$contract->{'common_proportion'},1,'公排分账');
             }
+        }else{
+            $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$commonMoney,5,0,'',$contract->{'common_proportion'},0,'平台关闭转账至系统账户,不进行划拨分账');
         }
+        //公排触发清算队列
+    }
 
+    /**
+     * 沉淀账户收款地址
+     * @param Contract $contract
+     */
+    private function sedimentProportion(Contract $contract){
+        $sedimentMoney=round(($contract->{'money'}-$contract->{'platform_money'})*$contract->{'sediment_proportion'}/100,6);
+        $openSys=CommonServer::creatServer()->getConfigValue('open_sys');
+        if($openSys){
+            $sedimentAddress=CommonServer::creatServer()->getConfigValue('sediment_address');
+            if(empty($sedimentAddress)){
+                $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$sedimentMoney,6,0,'',$contract->{'sediment_proportion'},0,'沉淀分账,无收款地址信息。系统关闭');
+            }else{
+                $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$sedimentMoney,6,0,$sedimentAddress,$contract->{'sediment_proportion'},1,'沉淀分账');
+            }
+        }else{
+            $this->addDistribution($contract->{'id'},$contract->{'m_id'},0,$sedimentMoney,6,0,'',$contract->{'sediment_proportion'},0,'平台关闭转账至系统账户,不进行划拨分账');
+        }
+    }
+
+    /**
+     * 代币比例
+     * @param Contract $contract
+     */
+    private function agencyProportion(Contract $contract){
+        $agencyMoney=round(($contract->{'money'}-$contract->{'platform_money'})*$contract->{'agency_proportion'}/100,6);
+        $exchangeMoney=CommonServer::creatServer()->getConfigValue('exchange_money');
+        $dbMoney=$agencyMoney*$exchangeMoney;
+        $member=Member::where('id',$contract->{'m_id'})->select(['id','address','is_boss'])->first();
+        $this->addDistribution($contract->{'id'},$contract->{'m_id'},$dbMoney,0,7,$member->{'id'},$member->{'address'},$contract->{'agency_proportion'},1,'代币分账');
+        MoneyDetailServer::creatServer()->write(1,1,$dbMoney,1,$member->{'id'},'报单代币清分',$contract->{'id'});
+    }
+
+    /**
+     * 添加清分记录
+     * @param $contractId
+     * @param $mId
+     * @param $nbnMoney
+     * @param $dbMoney
+     * @param $type
+     * @param $toMid
+     * @param $toAddress
+     * @param $proportion
+     * @param $status
+     * @param string $remark
+     */
+    function addDistribution($contractId,$mId,$dbMoney,$nbnMoney,$type,$toMid,$toAddress,$proportion,$status,$remark='奖金发放'){
+        ContractDistribution::create([
+            'contract_id' => $contractId,
+            'broadcast_id' => 0,
+            'm_id' => $mId,
+            'db_money' => $dbMoney,
+            'nbn_money' => $nbnMoney,
+            'type' => $type,
+            'to_m_id' => $toMid,
+            'to_address' => $toAddress,
+            'status' => $status,
+            'proportion' => $proportion,
+            'remark' => $remark
+        ]);
+    }
+
+    /**
+     * 获取团队合约数量
+     * @param $mId
+     * @return int
+     */
+    function getTeamContractNum($mId){
+        $contractNum=0;
+        $teamIds=MemberClan::where('id',$mId)->value('m_ids');
+        $teamIds=array_filter(explode(',',$teamIds));
+        $teamIds[]=$mId;
+        if($teamIds){
+            $contractNum=Contract::whereIn('m_id',$teamIds)->where('status','2')->count();
+        }
+        return $contractNum;
     }
 
 

+ 13 - 92
app/Servers/MoneyDetailServer.php

@@ -35,47 +35,10 @@ class MoneyDetailServer
     ];
 
     private $status_arr = [
-        1 => '消费金订单抵扣',
-        2 => '商城购买',
-        3 => '线下消费',
-        4 => '兑换商品',
-        5 => '奖励',
-        6 => '分销佣金',//订单分佣
-        7 => '佣金',//门店分佣
-        8 => '支付返现',//门店分佣
-        9 => '余额提现',//门店分佣
-        10 => '退货/退款',//门店分佣
-        11 => '线下代理收益',//线下订单佣金
-        12 => '购买返现',//线上订单佣金
-        13 => '返现',//进货订单平台返现
-        14 => '驳回',//提现驳回
-        15 => '闲置交易',//提现驳回
-        16 => '分销返现',//提现驳回
-        17 => '线上代理收益',//提现驳回
-        18 => '进货返现',//提现驳回
-        19 => '账户合并',//账户合并变动金额、消费金、公益豆
+        1 => '代币分账',
     ];
 
 
-    private $water_type = [
-        1 => [
-            ['water_key' => '2', 'water_name' => '商城购买'],
-            ['water_key' => '6', 'water_name' => '分销佣金'],
-//            ['water_key' => '7', 'water_name' => '佣金'],
-            ['water_key' => '11', 'water_name' => '线下代理收益'],
-            ['water_key' => '15', 'water_name' => '闲置交易'],
-            ['water_key' => '16', 'water_name' => '分销返现'],
-            ['water_key' => '17', 'water_name' => '线上代理收益'],
-            ['water_key' => '18', 'water_name' => '进货返现'],
-            ['water_key' => '12', 'water_name' => '购买返现'],
-            ['water_key' => '8', 'water_name' => '支付返现'],
-            ['water_key' => '9', 'water_name' => '提现'],
-            ['water_key' => '10', 'water_name' => '退款'],
-
-        ]
-
-    ];
-
 
     static private $server = null;
 
@@ -122,15 +85,7 @@ class MoneyDetailServer
         return empty($this->status_arr[$status]) ? '' : $this->status_arr[$status];
     }
 
-    /**
-     * 获取消费类型
-     * @param $type
-     * @return array|\string[][]
-     */
-    public function getWaterType($type)
-    {
-        return empty($this->water_type[$type]) ? [] : $this->water_type[$type];
-    }
+
 
     /**
      * 获取订单类型
@@ -163,13 +118,21 @@ class MoneyDetailServer
      * @param int $level
      * @return MoneyDetail|false|\Illuminate\Database\Eloquent\Model
      */
-    public function write($type, $status, $price, $addReduce, $m_id, $mark = '', $fromID = 0, $shop_id = 0, $level = 0)
+    public function write($type, $status, $price, $addReduce, $m_id, $mark = '', $fromID = 0)
     {
         $money_mode = Member::where('id', $m_id)->select(['id', 'money'])->first();
         if (empty($money_mode)) {
             return false;
         }
-        $money_mode->increment('money', $price);
+        $remainder=$money_mode->{'money'};
+        if($addReduce==1){
+            $money_mode->increment('money', $price);
+        }else{
+            if($remainder<$price){
+                return false;
+            }
+            $money_mode->decrement('money', $price);
+        }
         $detail = MoneyDetail::create(
             [
                 'type' => $type,              // 货币类型
@@ -178,9 +141,7 @@ class MoneyDetailServer
                 'add_reduce' => $addReduce,         // 增加 | 减少
                 'm_id' => $m_id,          // 被操作会员ID
                 'mark' => $mark,              // 备注
-                'shop_id' => $shop_id,              // 备注
                 'source_id' => $fromID,           // 操作员备注
-                'level' => $level,           // 操作员备注
                 'remainder' => sprintf("%.2f", ($addReduce == 0 ? $price * -1 : $price) + $remainder),// 剩余数目
             ]
         );
@@ -188,49 +149,9 @@ class MoneyDetailServer
         return $detail->{'id'};
     }
 
-    /**
-     * 验证会员余额是否充足
-     * @param $m_id
-     * @param $money
-     * @return bool
-     */
-    function verifyMoney($m_id, $money)
-    {
-        $type_key = $this->type_key[1];
-        $balance = Member::where('id', $m_id)->select(['id', 'money', 'benefit_money', 'consume_money'])->value($type_key);
-        return ($balance >= $money) ? true : false;
-    }
 
-    /**
-     * 获取会员余额
-     * @param $m_id
-     * @param $type
-     * @param $shop_id
-     * @return mixed
-     */
-    function getMoney($m_id, $type=1)
-    {
-        if (empty($this->type_key[$type])) return 0;
-        $type_key = $this->type_key[$type];
-        $balance = Member::where('id', $m_id)->value($type_key);
-        $balance = CommonServer::creatServer()->setFormatNum($balance);
-        return $balance;
-    }
 
-    /**
-     * 获取收支
-     * @param $m_id
-     * @param $type
-     * @param $date_arr
-     * @return array
-     */
-    function getMoneyIncome($m_id, $type, $date_arr)
-    {
-        $where = [['m_id', $m_id], ['type', $type]];
-        $income = MoneyDetail::where($where)->where('add_reduce', 1)->whereBetween('created_at', $date_arr)->sum('price');
-        $expenses = MoneyDetail::where($where)->where('add_reduce', 0)->whereBetween('created_at', $date_arr)->sum('price');
-        return ['income' => $income, 'expenses' => $expenses];
-    }
+