Kaynağa Gözat

合约日志记录

sys 3 yıl önce
ebeveyn
işleme
d28bce9d77
34 değiştirilmiş dosya ile 1525 ekleme ve 42 silme
  1. 1 0
      app/Console/Commands/TestCommand.php
  2. 13 2
      app/Http/Controllers/Api/ContractController.php
  3. 82 0
      app/Http/Controllers/ContractDistribution/ContractDistributionsController.php
  4. 82 0
      app/Http/Controllers/ContractLog/ContractLogsController.php
  5. 30 0
      app/Http/Requests/ContractDistributionCreateRequest.php
  6. 30 0
      app/Http/Requests/ContractDistributionUpdateRequest.php
  7. 30 0
      app/Http/Requests/ContractLogCreateRequest.php
  8. 30 0
      app/Http/Requests/ContractLogUpdateRequest.php
  9. 16 0
      app/Models/Contract.php
  10. 49 0
      app/Models/ContractDistribution.php
  11. 43 0
      app/Models/ContractLog.php
  12. 24 0
      app/Presenters/ContractDistributionPresenter.php
  13. 24 0
      app/Presenters/ContractLogPresenter.php
  14. 2 0
      app/Providers/RepositoryServiceProvider.php
  15. 15 0
      app/Repositories/ContractDistributionRepository.php
  16. 15 0
      app/Repositories/ContractLogRepository.php
  17. 57 0
      app/Repositories/Eloquent/ContractDistributionRepositoryEloquent.php
  18. 57 0
      app/Repositories/Eloquent/ContractLogRepositoryEloquent.php
  19. 36 4
      app/Servers/ContractServer.php
  20. 2 36
      app/Servers/IndentNumServer.php
  21. 33 0
      app/Transformers/ContractDistributionTransformer.php
  22. 33 0
      app/Transformers/ContractLogTransformer.php
  23. 24 0
      app/Validators/ContractDistributionValidator.php
  24. 24 0
      app/Validators/ContractLogValidator.php
  25. 40 0
      database/migrations/2022_10_24_151413_create_contract_distributions_table.php
  26. 37 0
      database/migrations/2022_10_24_152413_create_contract_logs_table.php
  27. 85 0
      resources/views/admins/contractDistributions/create.blade.php
  28. 86 0
      resources/views/admins/contractDistributions/edit.blade.php
  29. 156 0
      resources/views/admins/contractDistributions/index.blade.php
  30. 85 0
      resources/views/admins/contractLogs/create.blade.php
  31. 86 0
      resources/views/admins/contractLogs/edit.blade.php
  32. 156 0
      resources/views/admins/contractLogs/index.blade.php
  33. 21 0
      routes/web/contractDistribution.php
  34. 21 0
      routes/web/contractLog.php

+ 1 - 0
app/Console/Commands/TestCommand.php

@@ -96,6 +96,7 @@ class TestCommand extends Command
      */
     public function handle()
     {
+        dd(urldecode('https%3A%2F%2Fwealfavor-1257406827.cos.ap-beijing.myqcloud.com%2Fapp-serve%2F2022-10-24%2Fgeraov3msn.jpg'));
 //        for ($i=1;$i<=20;++$i){
 //            MemberServer::creatServer()->register($i.'abc', 1, '', '');
 //        }

+ 13 - 2
app/Http/Controllers/Api/ContractController.php

@@ -8,6 +8,8 @@ use App\Http\Controllers\FrontController;
 use App\Models\Contract;
 use App\Models\Invest;
 use App\Servers\CommonServer;
+use App\Servers\ContractServer;
+use App\Servers\IndentNumServer;
 use App\Servers\MemberServer;
 use App\Servers\RedisDataServer;
 use Illuminate\Support\Facades\Auth;
@@ -70,19 +72,28 @@ class ContractController extends FrontController
         if($num>0){
             return $this->apiResponseError('当前交易已执行');
         }
-        $investData=Invest::where('id',$investId)->select(['id','invest_money'])->first();
+        $investData=Invest::where('id',$investId)->first();
         $contractData=Contract::create([
             'm_id'=>$mId,
             'type'=>$investId,
             'status'=>1,
             'hash'=>$txid,
             'broadcast_data'=>'',
-            'money'=>$investData->{'invest_money'},
             'error_msg'=>'',
+            'money'=>$investData->{'invest_money'},
+            'direct_proportion'=>$investData->{'direct_proportion'},
+            'grant_proportion'=>$investData->{'grant_proportion'},
+            'point_proportion'=>$investData->{'point_proportion'},
+            'dao_proportion'=>$investData->{'dao_proportion'},
+            'technology_proportion'=>$investData->{'technology_proportion'},
+            'reveal_proportion'=>$investData->{'reveal_proportion'},
+            'parent_proportion'=>$investData->{'parent_proportion'},
+            'contract_sn'=>IndentNumServer::creatServer()->getIndentNum(1),
         ]);
         if(empty($contractData)){
             return  $this->apiResponseError('执行失败');
         }else{
+            ContractServer::creatServer()->addContractLog($contractData,'合约创建成功');
             return  $this->apiResponseSuccess('执行成功');
         }
     }

+ 82 - 0
app/Http/Controllers/ContractDistribution/ContractDistributionsController.php

@@ -0,0 +1,82 @@
+<?php
+
+namespace App\Http\Controllers\ContractDistribution;
+
+use App\Http\Controllers\AdminBaseController;
+use App\Http\Requests\ContractDistributionCreateRequest;
+use App\Http\Requests\ContractDistributionUpdateRequest;
+use App\Repositories\Eloquent\ContractDistributionRepositoryEloquent;
+use App\Validators\ContractDistributionValidator;
+
+/**
+ * Class ContractDistributionsController.
+ *
+ * @package namespace App\Http\Controllers;
+ */
+class ContractDistributionsController extends AdminBaseController
+{
+    /**
+     * @var ContractDistributionRepositoryEloquent
+     */
+    protected $repository;
+
+    /**
+     * @var ContractDistributionValidator
+     */
+    protected $validator;
+
+    /**
+     * ContractDistributionsController constructor.
+     *
+     * @param ContractDistributionRepositoryEloquent $repository
+     * @param ContractDistributionValidator $validator
+     */
+    public function __construct(ContractDistributionRepositoryEloquent $repository, ContractDistributionValidator $validator)
+    {
+        parent::__construct($repository, $validator);
+    }
+
+    /**
+     * 数据检索
+     */
+     public function _indexScopeQuery()
+        {
+            $where = [];
+            $search = explode(";", request()->input('search', ""));
+            $start = $end = null;
+            $fieldSearchable=$this->repository->getFieldsSearchable();
+            foreach ($search as $value) {
+                if (!empty($value)) {
+                    list($one, $tow) = explode(":", $value);
+                    if (!empty($fieldSearchable[$one])) {
+                        if($fieldSearchable[$one]=='like')$tow="%{$tow}%";
+                        $where[]=[$one,$fieldSearchable[$one],$tow];
+                    } elseif ($one == 'start') {
+                        $start = $tow . " 00:00:00";
+                    } elseif ($one == 'end') {
+                        $end = $tow . " 23:59:59";
+                    } else {
+                        continue;
+                    }
+                }
+            }
+            return function ($query) use ($where, $start, $end) {
+
+                if ($start) $where[] = ['created_at', '>=', $start];
+                if ($end) $where[] = ['created_at', '<=', $end];
+                if ($where) {
+                    $query->where($where);
+                }
+
+            };
+        }
+
+   /**
+     * 数据更新
+     */
+    protected function _indexPost($datum)
+    {
+        return $datum;
+    }
+
+}

+ 82 - 0
app/Http/Controllers/ContractLog/ContractLogsController.php

@@ -0,0 +1,82 @@
+<?php
+
+namespace App\Http\Controllers\ContractLog;
+
+use App\Http\Controllers\AdminBaseController;
+use App\Http\Requests\ContractLogCreateRequest;
+use App\Http\Requests\ContractLogUpdateRequest;
+use App\Repositories\Eloquent\ContractLogRepositoryEloquent;
+use App\Validators\ContractLogValidator;
+
+/**
+ * Class ContractLogsController.
+ *
+ * @package namespace App\Http\Controllers;
+ */
+class ContractLogsController extends AdminBaseController
+{
+    /**
+     * @var ContractLogRepositoryEloquent
+     */
+    protected $repository;
+
+    /**
+     * @var ContractLogValidator
+     */
+    protected $validator;
+
+    /**
+     * ContractLogsController constructor.
+     *
+     * @param ContractLogRepositoryEloquent $repository
+     * @param ContractLogValidator $validator
+     */
+    public function __construct(ContractLogRepositoryEloquent $repository, ContractLogValidator $validator)
+    {
+        parent::__construct($repository, $validator);
+    }
+
+    /**
+     * 数据检索
+     */
+     public function _indexScopeQuery()
+        {
+            $where = [];
+            $search = explode(";", request()->input('search', ""));
+            $start = $end = null;
+            $fieldSearchable=$this->repository->getFieldsSearchable();
+            foreach ($search as $value) {
+                if (!empty($value)) {
+                    list($one, $tow) = explode(":", $value);
+                    if (!empty($fieldSearchable[$one])) {
+                        if($fieldSearchable[$one]=='like')$tow="%{$tow}%";
+                        $where[]=[$one,$fieldSearchable[$one],$tow];
+                    } elseif ($one == 'start') {
+                        $start = $tow . " 00:00:00";
+                    } elseif ($one == 'end') {
+                        $end = $tow . " 23:59:59";
+                    } else {
+                        continue;
+                    }
+                }
+            }
+            return function ($query) use ($where, $start, $end) {
+
+                if ($start) $where[] = ['created_at', '>=', $start];
+                if ($end) $where[] = ['created_at', '<=', $end];
+                if ($where) {
+                    $query->where($where);
+                }
+
+            };
+        }
+
+   /**
+     * 数据更新
+     */
+    protected function _indexPost($datum)
+    {
+        return $datum;
+    }
+
+}

+ 30 - 0
app/Http/Requests/ContractDistributionCreateRequest.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ContractDistributionCreateRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return false;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            //
+        ];
+    }
+}

+ 30 - 0
app/Http/Requests/ContractDistributionUpdateRequest.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ContractDistributionUpdateRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return false;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            //
+        ];
+    }
+}

+ 30 - 0
app/Http/Requests/ContractLogCreateRequest.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ContractLogCreateRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return false;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            //
+        ];
+    }
+}

+ 30 - 0
app/Http/Requests/ContractLogUpdateRequest.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ContractLogUpdateRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return false;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            //
+        ];
+    }
+}

+ 16 - 0
app/Models/Contract.php

@@ -34,6 +34,22 @@ use Prettus\Repository\Traits\TransformableTrait;
  * @method static \Illuminate\Database\Eloquent\Builder|Contract whereType($value)
  * @method static \Illuminate\Database\Eloquent\Builder|Contract whereUpdatedAt($value)
  * @mixin \Eloquent
+ * @property float $direct_proportion 直推比例
+ * @property float $grant_proportion 均富比例
+ * @property float $point_proportion 见点比例
+ * @property float $dao_proportion dao比例
+ * @property float $technology_proportion 技术比例
+ * @property float $reveal_proportion 托底比例
+ * @property float|null $parent_proportion 族谱比例
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereDaoProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereDirectProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereGrantProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereParentProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract wherePointProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereRevealProportion($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereTechnologyProportion($value)
+ * @property string|null $contract_sn 合约编号
+ * @method static \Illuminate\Database\Eloquent\Builder|Contract whereContractSn($value)
  */
 class Contract extends Model implements Transformable
 {

+ 49 - 0
app/Models/ContractDistribution.php

@@ -0,0 +1,49 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Prettus\Repository\Contracts\Transformable;
+use Prettus\Repository\Traits\TransformableTrait;
+
+/**
+ * Class ContractDistribution.
+ *
+ * @package namespace App\Models;
+ * @property int $id
+ * @property int $contract_id 合约ID
+ * @property int $m_id 会员ID
+ * @property int $broadcast_id 广播ID
+ * @property int $is_transition 是否转换为lk
+ * @property float $usdt_num 清分USDT
+ * @property float $lk_num 清分lk
+ * @property float $lk_money lk价格
+ * @property \Illuminate\Support\Carbon|null $created_at
+ * @property \Illuminate\Support\Carbon|null $updated_at
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution newModelQuery()
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution newQuery()
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution query()
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereBroadcastId($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereContractId($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereCreatedAt($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereId($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereIsTransition($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereLkMoney($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereLkNum($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereMId($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereUpdatedAt($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractDistribution whereUsdtNum($value)
+ * @mixin \Eloquent
+ */
+class ContractDistribution extends Model implements Transformable
+{
+    use TransformableTrait;
+
+    /**
+     * The attributes that are mass assignable.
+     *
+     * @var array
+     */
+    protected $guarded = ['id', 'updated_at', 'created_at'];
+
+}

+ 43 - 0
app/Models/ContractLog.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Prettus\Repository\Contracts\Transformable;
+use Prettus\Repository\Traits\TransformableTrait;
+
+/**
+ * Class ContractLog.
+ *
+ * @package namespace App\Models;
+ * @property int $id
+ * @property int $contract_id 合约ID
+ * @property int $m_id 会员ID
+ * @property string $msg 日志说明
+ * @property string $data 相关数据
+ * @property \Illuminate\Support\Carbon|null $created_at
+ * @property \Illuminate\Support\Carbon|null $updated_at
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractLog newModelQuery()
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractLog newQuery()
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractLog query()
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractLog whereContractId($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractLog whereCreatedAt($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractLog whereData($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractLog whereId($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractLog whereMId($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractLog whereMsg($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|ContractLog whereUpdatedAt($value)
+ * @mixin \Eloquent
+ */
+class ContractLog extends Model implements Transformable
+{
+    use TransformableTrait;
+
+    /**
+     * The attributes that are mass assignable.
+     *
+     * @var array
+     */
+    protected $guarded = ['id', 'updated_at', 'created_at'];
+
+}

+ 24 - 0
app/Presenters/ContractDistributionPresenter.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Presenters;
+
+use App\Transformers\ContractDistributionTransformer;
+use Prettus\Repository\Presenter\FractalPresenter;
+
+/**
+ * Class ContractDistributionPresenter.
+ *
+ * @package namespace App\Presenters;
+ */
+class ContractDistributionPresenter extends FractalPresenter
+{
+    /**
+     * Transformer
+     *
+     * @return \League\Fractal\TransformerAbstract
+     */
+    public function getTransformer()
+    {
+        return new ContractDistributionTransformer();
+    }
+}

+ 24 - 0
app/Presenters/ContractLogPresenter.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Presenters;
+
+use App\Transformers\ContractLogTransformer;
+use Prettus\Repository\Presenter\FractalPresenter;
+
+/**
+ * Class ContractLogPresenter.
+ *
+ * @package namespace App\Presenters;
+ */
+class ContractLogPresenter extends FractalPresenter
+{
+    /**
+     * Transformer
+     *
+     * @return \League\Fractal\TransformerAbstract
+     */
+    public function getTransformer()
+    {
+        return new ContractLogTransformer();
+    }
+}

+ 2 - 0
app/Providers/RepositoryServiceProvider.php

@@ -51,6 +51,8 @@ class RepositoryServiceProvider extends ServiceProvider
         $this->app->bind(\App\Repositories\InvestRepository::class, \App\Repositories\Eloquent\InvestRepositoryEloquent::class);
         $this->app->bind(\App\Repositories\MemberBothRepository::class, \App\Repositories\Eloquent\MemberBothRepositoryEloquent::class);
         $this->app->bind(\App\Repositories\MemberGradeRepository::class, \App\Repositories\Eloquent\MemberGradeRepositoryEloquent::class);
+        $this->app->bind(\App\Repositories\ContractDistributionRepository::class, \App\Repositories\Eloquent\ContractDistributionRepositoryEloquent::class);
+        $this->app->bind(\App\Repositories\ContractLogRepository::class, \App\Repositories\Eloquent\ContractLogRepositoryEloquent::class);
         //:end-bindings:
     }
 }

+ 15 - 0
app/Repositories/ContractDistributionRepository.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Repositories;
+
+use Prettus\Repository\Contracts\RepositoryInterface;
+
+/**
+ * Interface ContractDistributionRepository.
+ *
+ * @package namespace App\Repositories;
+ */
+interface ContractDistributionRepository extends RepositoryInterface
+{
+    //
+}

+ 15 - 0
app/Repositories/ContractLogRepository.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Repositories;
+
+use Prettus\Repository\Contracts\RepositoryInterface;
+
+/**
+ * Interface ContractLogRepository.
+ *
+ * @package namespace App\Repositories;
+ */
+interface ContractLogRepository extends RepositoryInterface
+{
+    //
+}

+ 57 - 0
app/Repositories/Eloquent/ContractDistributionRepositoryEloquent.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace App\Repositories\Eloquent;
+
+use Prettus\Repository\Eloquent\BaseRepository;
+use Prettus\Repository\Criteria\RequestCriteria;
+use App\Repositories\ContractDistributionRepository;
+use App\Models\ContractDistribution;
+use App\Validators\ContractDistributionValidator;
+
+/**
+ * Class ContractDistributionRepositoryEloquent.
+ *
+ * @package namespace App\Repositories\Eloquent;
+ */
+class ContractDistributionRepositoryEloquent extends BaseRepository implements ContractDistributionRepository
+{
+    /**
+     * 查询检索的字段
+     *
+     * @return string
+     */
+    protected $fieldSearchable = [
+        'id'                => '=',
+    ];
+
+    /**
+     * Specify Model class name
+     *
+     * @return string
+     */
+    public function model()
+    {
+        return ContractDistribution::class;
+    }
+
+    /**
+    * Specify Validator class name
+    *
+    * @return mixed
+    */
+    public function validator()
+    {
+
+        return ContractDistributionValidator::class;
+    }
+
+
+    /**
+     * Boot up the repository, pushing criteria
+     */
+    public function boot()
+    {
+        // $this->pushCriteria(app(RequestCriteria::class));
+    }
+
+}

+ 57 - 0
app/Repositories/Eloquent/ContractLogRepositoryEloquent.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace App\Repositories\Eloquent;
+
+use Prettus\Repository\Eloquent\BaseRepository;
+use Prettus\Repository\Criteria\RequestCriteria;
+use App\Repositories\ContractLogRepository;
+use App\Models\ContractLog;
+use App\Validators\ContractLogValidator;
+
+/**
+ * Class ContractLogRepositoryEloquent.
+ *
+ * @package namespace App\Repositories\Eloquent;
+ */
+class ContractLogRepositoryEloquent extends BaseRepository implements ContractLogRepository
+{
+    /**
+     * 查询检索的字段
+     *
+     * @return string
+     */
+    protected $fieldSearchable = [
+        'id'                => '=',
+    ];
+
+    /**
+     * Specify Model class name
+     *
+     * @return string
+     */
+    public function model()
+    {
+        return ContractLog::class;
+    }
+
+    /**
+    * Specify Validator class name
+    *
+    * @return mixed
+    */
+    public function validator()
+    {
+
+        return ContractLogValidator::class;
+    }
+
+
+    /**
+     * Boot up the repository, pushing criteria
+     */
+    public function boot()
+    {
+        // $this->pushCriteria(app(RequestCriteria::class));
+    }
+
+}

+ 36 - 4
app/Servers/ContractServer.php

@@ -10,7 +10,9 @@ use App\Jobs\BusinessFileJob;
 use App\Jobs\MsgFileJob;
 use App\Models\BlockItems;
 use App\Models\Contract;
+use App\Models\ContractLog;
 use App\Models\ErrorRecord;
+use App\Models\Invest;
 use App\Models\Member;
 use App\Servers\Icon\TronRPC;
 
@@ -55,6 +57,7 @@ class ContractServer
                     'msg' => '合约状态从异常',
                     'data' => json_encode($contract)
                 ]);
+                $this->addContractLog($contract,'合约状态异常,程序终止清分,记录扫快信息',$blockItem);
             }else{
                 $ret = TronRPC::CreationTron()->getTransaction($contract->{'hash'});
                 if (!empty($ret['ret'][0]['contractRet']) && $ret['ret'][0]['contractRet'] == 'SUCCESS') {
@@ -72,24 +75,53 @@ class ContractServer
                     }
                 } else {
                     ErrorRecord::create([
-                        'm_id' => 0,
+                        'm_id' => $contract->{'m_id'},
                         'msg' => '交易失败',
                         'data' => json_encode($contract)
                     ]);
                 }
-
             }
+        }else{
+            ErrorRecord::create([
+                'm_id' => 0,
+                'msg' => '合约信息不存在,扫快信息:',
+                'data' => json_encode($blockItem)
+            ]);
         }
     }
 
-
+    /**
+     * 首单清分
+     * @param Contract $contract
+     */
     function oneSettle(Contract $contract){
-
+        if($contract->{'direct_proportion'}>0){
+            //直推金额分化
+        }
     }
 
 
+    /**
+     * 复投清分
+     * @param Contract $contract
+     */
     function twoSettle(Contract $contract){
+    }
 
+    /**
+     * 合约日志记录
+     * @param Contract $contract
+     * @param $msg
+     * @param array $data
+     */
+    function addContractLog(Contract $contract,$msg,$data=[]){
+        ContractLog::create([
+           'contract_id'=> $contract->{'id'},
+           'm_id'=> $contract->{'m_id'},
+           'msg'=> $msg,
+           'contract_data'=> json_encode($contract),
+           'data'=> json_encode($data),
+        ]);
     }
 
 

+ 2 - 36
app/Servers/IndentNumServer.php

@@ -63,42 +63,6 @@ class IndentNumServer
         if(empty($row)){
             $row = IndentNum::where('type', $type)->first()->toArray();
 
-        }
-        IndentNumJob::dispatch($type)->onConnection('redis')->onQueue('indent_num');
-        $redis_data = RedisDataServer::creatServer()->getWaitQueue($redis_name,2);
-        $redis_num=empty($redis_data[1])?false:$redis_data[1];
-        $row['digits'] = $length > 0 ? $length : $row['digits'];
-        $date = date("Ymd");
-        if (!$redis_num) {
-            if ($row['is_date'] == 1) {
-                $num = sprintf("%0{$row['digits']}s", $row['number'] + 1);
-                $new_cod = $date . $num;
-            } else {
-                $new_cod = sprintf("%0{$row['digits']}s", $row['number'] + 1);
-            }
-        } else {
-            if ($row['is_date'] == 1) {
-                $num = sprintf("%0{$row['digits']}s", $redis_num);
-                $new_cod = $date . $num;
-            } else {
-                $new_cod = sprintf("%0{$row['digits']}s", $redis_num);
-            }
-        }
-        ++ $row['number'];
-        RedisDataServer::creatServer()->setData($redis_name.'_data',$row,'json',60);
-        IndentNum::where('id',$row['id'])->increment('number');
-        return $row['code_str'] . $new_cod;
-    }
-
-
-    function getIndentNumTwo($type, $length = 0)
-    {
-        $redis_name = $this->key_name . '_' . $type;
-//        event(new NumEvent($type));
-        $row=RedisDataServer::creatServer()->getData($redis_name.'_data','json');
-        if(empty($row)){
-            $row = IndentNum::where('type', $type)->first()->toArray();
-
         }
         $redis_num=$row['number']+1;
         RedisDataServer::creatServer()->setData($redis_name.'_data',$row,'json',60);
@@ -123,6 +87,8 @@ class IndentNumServer
         return $row['code_str'] . $new_cod;
     }
 
+
+
     /**
      * 验证队列的数据并自动生成
      * @param $type

+ 33 - 0
app/Transformers/ContractDistributionTransformer.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Transformers;
+
+use League\Fractal\TransformerAbstract;
+use App\Models\ContractDistribution;
+
+/**
+ * Class ContractDistributionTransformer.
+ *
+ * @package namespace App\Transformers;
+ */
+class ContractDistributionTransformer extends TransformerAbstract
+{
+    /**
+     * Transform the ContractDistribution entity.
+     *
+     * @param \App\Models\ContractDistribution $model
+     *
+     * @return array
+     */
+    public function transform(ContractDistribution $model)
+    {
+        return [
+            'id'         => (int) $model->id,
+
+            /* place your other model properties here */
+
+            'created_at' => $model->created_at,
+            'updated_at' => $model->updated_at
+        ];
+    }
+}

+ 33 - 0
app/Transformers/ContractLogTransformer.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Transformers;
+
+use League\Fractal\TransformerAbstract;
+use App\Models\ContractLog;
+
+/**
+ * Class ContractLogTransformer.
+ *
+ * @package namespace App\Transformers;
+ */
+class ContractLogTransformer extends TransformerAbstract
+{
+    /**
+     * Transform the ContractLog entity.
+     *
+     * @param \App\Models\ContractLog $model
+     *
+     * @return array
+     */
+    public function transform(ContractLog $model)
+    {
+        return [
+            'id'         => (int) $model->id,
+
+            /* place your other model properties here */
+
+            'created_at' => $model->created_at,
+            'updated_at' => $model->updated_at
+        ];
+    }
+}

+ 24 - 0
app/Validators/ContractDistributionValidator.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Validators;
+
+use \Prettus\Validator\Contracts\ValidatorInterface;
+use \Prettus\Validator\LaravelValidator;
+
+/**
+ * Class ContractDistributionValidator.
+ *
+ * @package namespace App\Validators;
+ */
+class ContractDistributionValidator extends LaravelValidator
+{
+    /**
+     * Validation Rules
+     *
+     * @var array
+     */
+    protected $rules = [
+        ValidatorInterface::RULE_CREATE => [],
+        ValidatorInterface::RULE_UPDATE => [],
+    ];
+}

+ 24 - 0
app/Validators/ContractLogValidator.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Validators;
+
+use \Prettus\Validator\Contracts\ValidatorInterface;
+use \Prettus\Validator\LaravelValidator;
+
+/**
+ * Class ContractLogValidator.
+ *
+ * @package namespace App\Validators;
+ */
+class ContractLogValidator extends LaravelValidator
+{
+    /**
+     * Validation Rules
+     *
+     * @var array
+     */
+    protected $rules = [
+        ValidatorInterface::RULE_CREATE => [],
+        ValidatorInterface::RULE_UPDATE => [],
+    ];
+}

+ 40 - 0
database/migrations/2022_10_24_151413_create_contract_distributions_table.php

@@ -0,0 +1,40 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+/**
+ * Class CreateContractDistributionsTable.
+ */
+class CreateContractDistributionsTable extends Migration
+{
+	/**
+	 * Run the migrations.
+	 *
+	 * @return void
+	 */
+	public function up()
+	{
+		Schema::create('contract_distributions', function(Blueprint $table) {
+            $table->increments('id');
+            $table->integer('contract_id')->index('contract_id')->comment('合约ID');
+            $table->integer('m_id')->index('m_id')->comment('会员ID');
+            $table->integer('broadcast_id')->comment('广播ID');
+            $table->integer('is_transition')->comment('是否转换为lk');
+            $table->double('usdt_num',16,6)->default(0)->comment('清分USDT');
+            $table->double('lk_num',16,6)->default(0)->comment('清分lk');
+            $table->double('lk_money',16,6)->default(0)->comment('lk价格');
+            $table->timestamps();
+		});
+	}
+
+	/**
+	 * Reverse the migrations.
+	 *
+	 * @return void
+	 */
+	public function down()
+	{
+		Schema::drop('contract_distributions');
+	}
+}

+ 37 - 0
database/migrations/2022_10_24_152413_create_contract_logs_table.php

@@ -0,0 +1,37 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+/**
+ * Class CreateContractLogsTable.
+ */
+class CreateContractLogsTable extends Migration
+{
+	/**
+	 * Run the migrations.
+	 *
+	 * @return void
+	 */
+	public function up()
+	{
+		Schema::create('contract_logs', function(Blueprint $table) {
+            $table->increments('id');
+            $table->integer('contract_id')->index('contract_id')->comment('合约ID');
+            $table->integer('m_id')->index('m_id')->comment('会员ID');
+            $table->string('msg')->comment('日志说明');
+            $table->text('data')->comment('相关数据');
+            $table->timestamps();
+		});
+	}
+
+	/**
+	 * Reverse the migrations.
+	 *
+	 * @return void
+	 */
+	public function down()
+	{
+		Schema::drop('contract_logs');
+	}
+}

+ 85 - 0
resources/views/admins/contractDistributions/create.blade.php

@@ -0,0 +1,85 @@
+<div style="margin-top: 10px;" id="contractDistributions-app">
+    <div style="text-align: center;margin-top: 5px;margin-bottom: 10px;font-size: 20px;">
+        新增 - ContractDistribution
+    </div>
+    <el-form action="{{route('admin.contractDistribution.save')}}" method="post" id="form-create">
+        <!-- image -->
+        <ui-file label="图片(686*128)" size="0.5" name="image" :data="{uploadName:'contractDistributions'}" tips="图片建议(686*128)"></ui-file>
+        <!-- link -->
+{{--        <ui-input-text label="contractDistribution链接" name="link" placeholder="contractDistribution跳转链接" maxlength="255" tips="请输入有效的链接" autofocus="true"></ui-input-text>--}}
+        <!-- show -->
+        <ui-radio label="是否开启" :params="params" tips="控制前台是否显示"></ui-radio>
+        <!-- sort -->
+        <ui-input-number label="排序" checked="checked" value="50" name="sort" min="1" max="100" tips="控制前台显示顺序"></ui-input-number>
+        <ui-submit></ui-submit>
+    </el-form>
+</div>
+
+<script type="application/javascript">
+    $(function () {
+        // 注意:Vue组件一定放在jQuery.validator前面验证
+        new Vue({
+            el: '#contractDistributions-app',
+            data :function () {
+                return {
+                    params: {
+                        // 注意:group和attr连个属性都不能省略 就算为空
+                        group: {},
+                        attr: {
+                            name: 'status',   // 当前checkbox框的name属性  【必填】
+                            radioCheck:1,   // 当前选中项 int | string   【必填】
+                            label: 'el-radio-button', // 当前样式 默认 el-radio 样式 【非必填】
+                            radios: [ // 每个checkbox 就是一个json对象     【必填】
+                                {
+                                    value:0,      // 当前选中时值也就是value属性的值      【必填】
+                                    label: '关闭',    // 当前提示文字                 【必填】
+                                    disable: false   // 是否禁止点击 默认:false 不禁止
+                                },
+                                {
+                                    value:1,      // 当前选中时值也就是value属性的值      【必填】
+                                    label: '开启',    // 当前提示文字                 【必填】
+                                    disable: false   // 是否禁止点击 默认:false 不禁止
+                                }
+                            ]
+                        }
+                    }
+                };
+            }
+        });
+        jQuery.validator.setDefaults({
+            debug: false,         // 调试模式true不会提交,false允许提交
+            success: "success",   // 匹配成功的class样式名称
+            errorElement: 'div'   // 兼容el标签时使用(兼容el Vue组件label.error标签问题)
+        });
+        // 前台数据验证 验证需要设置window.form全局变量
+        window.form = $('#form-create').validate({
+            rules: {
+                image: {
+                    required: true,
+                    maxlength: 255,
+                    normalizer: function ( value ) {
+                        return $.trim(value);
+                    }
+                },
+                // link: {
+                //     required: true,
+                //     url:true,
+                //     maxlength: 255,
+                //     normalizer: function ( value ) {
+                //         return $.trim(value);
+                //     }
+                // },
+                show: {
+                    required: true
+                },
+                sort: {
+                    required: true,
+                    normalizer: function ( value ) {
+                        return $.trim(value);
+                    }
+                }
+            }
+        });
+    });
+</script>
+@include('layouts.admin.form_script')

+ 86 - 0
resources/views/admins/contractDistributions/edit.blade.php

@@ -0,0 +1,86 @@
+<div style="margin-top: 10px;" id="contractDistributions-app">
+    <div style="text-align: center;margin-top: 5px;margin-bottom: 10px;font-size: 20px;">
+        编辑ContractDistribution
+    </div>
+    <el-form action="{{route('admin.contractDistribution.update',array('id'=>$model->id))}}" method="post" id="form-create">
+        <!-- 图片 -->
+        <ui-file label="图片(686*128)" size="0.5" name="image" :data="{uploadName:'contractDistributions'}" imageurl="{{$model->image}}" tips="图片大小建议(686*128)"></ui-file>
+        <!-- 链接 -->
+{{--        <ui-input-text label="链接" name="link" value="{{$model->link}}" placeholder="跳转链接" maxlength="255" tips="请输入有效的链接" autofocus="true"></ui-input-text>--}}
+        <!-- 是否显示 -->
+        <ui-radio label="是否开启" :params="params" tips="控制前台是否显示"></ui-radio>
+        <!-- 排序 -->
+        <ui-input-number label="排序" checked="checked" name="sort" value="{{$model->sort}}" min="1" max="100" tips="控制前台显示顺序"></ui-input-number>
+        <ui-submit></ui-submit>
+    </el-form>
+</div>
+
+<script type="application/javascript">
+    $(function () {
+        // 注意:Vue组件一定放在jQuery.validator前面验证
+        new Vue({
+            el: '#contractDistributions-app',
+            data :function () {
+                return {
+                    params: {
+                        // 注意:group和attr连个属性都不能省略 就算为空
+                        group: {},
+                        attr: {
+                            name: 'status',   // 当前checkbox框的name属性  【必填】
+                            radioCheck:{{$model->status}},   // 当前选中项 int | string   【必填】
+                            label: 'el-radio-button', // 当前样式 默认 el-radio 样式 【非必填】
+                            radios: [ // 每个checkbox 就是一个json对象     【必填】
+                                {
+                                    value:0,      // 当前选中时值也就是value属性的值      【必填】
+                                    label: '关闭',    // 当前提示文字                 【必填】
+                                    disable: false   // 是否禁止点击 默认:false 不禁止
+                                },
+                                {
+                                    value:1,      // 当前选中时值也就是value属性的值      【必填】
+                                    label: '开启',    // 当前提示文字                 【必填】
+                                    disable: false   // 是否禁止点击 默认:false 不禁止
+                                }
+                            ]
+                        }
+                    }
+                };
+            }
+        });
+        jQuery.validator.setDefaults({
+            debug: false,         // 调试模式true不会提交,false允许提交
+            success: "success",   // 匹配成功的class样式名称
+            errorElement: 'div'   // 兼容el标签时使用(兼容el Vue组件label.error标签问题)
+        });
+        // 前台数据验证 验证需要设置window.form全局变量
+        window.form = $('#form-create').validate({
+            rules: {
+                image: {
+                    required: true,
+                    maxlength: 255,
+                    normalizer: function ( value ) {
+                        return $.trim(value);
+                    }
+                },
+                // link: {
+                //     required: true,
+                //     maxlength: 255,
+                //     normalizer: function ( value ) {
+                //         return $.trim(value);
+                //     }
+                // },
+                show: {
+                    required: true
+                },
+                sort: {
+                    required: true,
+                    normalizer: function ( value ) {
+                        return $.trim(value);
+                    }
+                }
+            }
+        });
+        // 编辑保存变量
+        window.formDatum = $('form').serialize();
+    });
+</script>
+@include('layouts.admin.form_script')

+ 156 - 0
resources/views/admins/contractDistributions/index.blade.php

@@ -0,0 +1,156 @@
+@extends('layouts.admin.app')
+@section('plug-css')
+    <link href="{{ asset('js/bootstrap-table/dist/bootstrap-table.css') }}" rel="stylesheet">
+@endsection
+@section('crumbs')
+    <ol class="breadcrumb crumbs">
+        <li><a href="{{ route('admin.index') }}#">后台导航</a></li>
+        <li><a href="{{ route('admin.contractDistribution.index') }}">后台ContractDistribution首页</a></li>
+        <li class="active">ContractDistribution列表</li>
+    </ol>
+@endsection
+
+@section('content')
+    <form id="searchForm" class="form-inline">
+        <div class="">
+            <div class="form-group">
+                <label for="name" class="label-css"> ID:</label>
+                <input class="form-control" type="text" name="id">
+            </div>
+            &ensp;&ensp;
+            <button type="button" class="btn btn-primary">查询</button>
+        </div>
+    </form>
+    <hr class="hr-css">
+    <div>
+        <div id="toolbar">
+            <div class="columns columns-left btn-group pull-left">
+                <a class="createForm" data-url="{{ route('admin.contractDistribution.store') }}" data-title="create">
+                    <button class="btn btn-default" type="button">
+                        <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>&ensp;新增ContractDistribution
+                    </button>
+                </a>
+                <a>
+                    <button id="deleteAll" data-url="{{ route('admin.contractDistribution.destroys',['is_del'=>1]) }}" class="btn btn-default" type="button">
+                        <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>&ensp;删除
+                    </button>
+                </a>
+            </div>
+        </div>
+        <table id="ContentTable"></table>
+    </div>
+@endsection
+
+@section('plug-js')
+    <script src="{{ asset('js/bootstrap-table/dist/bootstrap-table.js') }}"></script>
+    <script src="{{ asset('js/bootstrap-table/dist/locale/bootstrap-table-zh-CN.js') }}"></script>
+    <script src="{{ asset('js/jquery-validation1.16/dist/jquery.validate.min.js') }}"></script>
+    <script src="{{ asset('js/jquery-validation1.16/dist/additional-methods.min.js') }}"></script>
+    <script src="{{ asset('js/jquery-validation1.16/src/localization/messages_zh.js') }}"></script>
+@endsection
+
+@section('scripts')
+    <script>
+        $(function(){
+            BootStrapInit.init('tableContractDistribution','ContentTable',{
+                searchForm: 'searchForm',   // 表单搜索id 省略默认 'searchForm'
+                url: "{{ route('admin.contractDistribution.ajax.index') }}",
+                method: 'post',
+                toolbar: '#toolbar',
+                idField: '',        // 指定主键列
+                uniqueId: "id",     // 这里需要指定当前查询表唯一主键字段
+                columns: [
+                    {
+                        checkbox: true,
+                        align: 'center',
+                        valign: 'middle'
+                    },
+                    {
+                        field: 'id',
+                        title: 'ID',
+                        align: 'center',
+                        valign: 'middle',
+                        sortable: true
+                    },
+                    {
+                        field: 'image',
+                        title: 'Image',
+                        align: 'center',
+                        valign: 'middle',
+                        formatter:thumbFormatter
+                    },
+                    // {
+                    //     field: 'link',
+                    //     title: '链接',
+                    //     align: 'center',
+                    //     valign: 'middle'
+                    // },
+                    {
+                        field: 'status',
+                        title: '显示',
+                        align: 'center',
+                        valign: 'middle',
+                        sortable: true,
+                        formatter:yesOrNo,
+                        bool_data:{
+                            'class' : 'cursor',
+//                            'url'   : 'javascript:;',
+                            'table' : 'contractDistributions'
+//                            'pk' : 'id'   // 主键名称不写默认id主键
+                        }
+                    },
+                    {
+                        field: 'sort',
+                        title: '排序',
+                        align: 'center',
+                        valign: 'middle',
+                        sortable: true,
+                        formatter:inputData,
+                        input_data: {
+//                        'class' : 'cursor',     // 当前样式
+//                        'url'   : 'javascript', // url存在 及请求指定地址修改数据
+                            'table' : 'contractDistributions'   // url为空时采用,
+//                        'pk'    : 'id'          // 默认修改主键名称 不写 默认id为主键
+                        }
+                    },
+                    {
+                        field: 'created_at',
+                        title: '创建时间',
+                        align: 'center',
+                        valign: 'middle',
+                        sortable: true
+                    },
+                    {
+                        field: 'updated_at',
+                        title: '更新时间',
+                        align: 'center',
+                        valign: 'middle',
+                        sortable: true
+                    },
+                    {
+                        pkId: 'id',         // 当前主键id 兼容排序 field='id' 默认值id
+                        title: '操作',
+                        align: 'center',
+                        valign: 'middle',
+                        width: '185px',
+                        formatter:operateFormatter,
+                        btn_group:[
+                            {
+                                'name'  : '编辑',
+                                'class' : 'btn-primary createForm',
+                                'url'   : 'javascript:;',
+                                'confirm_url': '{{ route('admin.contractDistribution.edit', ['id'=>'-val-'])}}'
+                            },
+                            {
+                                'name'  : '删除',
+                                'class' : 'btn-danger deleteBtn', // class标签 deleteBtn删除 layer弹出框
+                                'url'   : 'javascript:;',
+                                'confirm_url': '{{ route('admin.contractDistribution.destroy', ['id'=>'-val-','is_del'=>1])}}'   // 选择按钮
+                            }
+                        ]
+                    }
+                ]
+            });
+        });
+    </script>
+@endsection

+ 85 - 0
resources/views/admins/contractLogs/create.blade.php

@@ -0,0 +1,85 @@
+<div style="margin-top: 10px;" id="contractLogs-app">
+    <div style="text-align: center;margin-top: 5px;margin-bottom: 10px;font-size: 20px;">
+        新增 - ContractLog
+    </div>
+    <el-form action="{{route('admin.contractLog.save')}}" method="post" id="form-create">
+        <!-- image -->
+        <ui-file label="图片(686*128)" size="0.5" name="image" :data="{uploadName:'contractLogs'}" tips="图片建议(686*128)"></ui-file>
+        <!-- link -->
+{{--        <ui-input-text label="contractLog链接" name="link" placeholder="contractLog跳转链接" maxlength="255" tips="请输入有效的链接" autofocus="true"></ui-input-text>--}}
+        <!-- show -->
+        <ui-radio label="是否开启" :params="params" tips="控制前台是否显示"></ui-radio>
+        <!-- sort -->
+        <ui-input-number label="排序" checked="checked" value="50" name="sort" min="1" max="100" tips="控制前台显示顺序"></ui-input-number>
+        <ui-submit></ui-submit>
+    </el-form>
+</div>
+
+<script type="application/javascript">
+    $(function () {
+        // 注意:Vue组件一定放在jQuery.validator前面验证
+        new Vue({
+            el: '#contractLogs-app',
+            data :function () {
+                return {
+                    params: {
+                        // 注意:group和attr连个属性都不能省略 就算为空
+                        group: {},
+                        attr: {
+                            name: 'status',   // 当前checkbox框的name属性  【必填】
+                            radioCheck:1,   // 当前选中项 int | string   【必填】
+                            label: 'el-radio-button', // 当前样式 默认 el-radio 样式 【非必填】
+                            radios: [ // 每个checkbox 就是一个json对象     【必填】
+                                {
+                                    value:0,      // 当前选中时值也就是value属性的值      【必填】
+                                    label: '关闭',    // 当前提示文字                 【必填】
+                                    disable: false   // 是否禁止点击 默认:false 不禁止
+                                },
+                                {
+                                    value:1,      // 当前选中时值也就是value属性的值      【必填】
+                                    label: '开启',    // 当前提示文字                 【必填】
+                                    disable: false   // 是否禁止点击 默认:false 不禁止
+                                }
+                            ]
+                        }
+                    }
+                };
+            }
+        });
+        jQuery.validator.setDefaults({
+            debug: false,         // 调试模式true不会提交,false允许提交
+            success: "success",   // 匹配成功的class样式名称
+            errorElement: 'div'   // 兼容el标签时使用(兼容el Vue组件label.error标签问题)
+        });
+        // 前台数据验证 验证需要设置window.form全局变量
+        window.form = $('#form-create').validate({
+            rules: {
+                image: {
+                    required: true,
+                    maxlength: 255,
+                    normalizer: function ( value ) {
+                        return $.trim(value);
+                    }
+                },
+                // link: {
+                //     required: true,
+                //     url:true,
+                //     maxlength: 255,
+                //     normalizer: function ( value ) {
+                //         return $.trim(value);
+                //     }
+                // },
+                show: {
+                    required: true
+                },
+                sort: {
+                    required: true,
+                    normalizer: function ( value ) {
+                        return $.trim(value);
+                    }
+                }
+            }
+        });
+    });
+</script>
+@include('layouts.admin.form_script')

+ 86 - 0
resources/views/admins/contractLogs/edit.blade.php

@@ -0,0 +1,86 @@
+<div style="margin-top: 10px;" id="contractLogs-app">
+    <div style="text-align: center;margin-top: 5px;margin-bottom: 10px;font-size: 20px;">
+        编辑ContractLog
+    </div>
+    <el-form action="{{route('admin.contractLog.update',array('id'=>$model->id))}}" method="post" id="form-create">
+        <!-- 图片 -->
+        <ui-file label="图片(686*128)" size="0.5" name="image" :data="{uploadName:'contractLogs'}" imageurl="{{$model->image}}" tips="图片大小建议(686*128)"></ui-file>
+        <!-- 链接 -->
+{{--        <ui-input-text label="链接" name="link" value="{{$model->link}}" placeholder="跳转链接" maxlength="255" tips="请输入有效的链接" autofocus="true"></ui-input-text>--}}
+        <!-- 是否显示 -->
+        <ui-radio label="是否开启" :params="params" tips="控制前台是否显示"></ui-radio>
+        <!-- 排序 -->
+        <ui-input-number label="排序" checked="checked" name="sort" value="{{$model->sort}}" min="1" max="100" tips="控制前台显示顺序"></ui-input-number>
+        <ui-submit></ui-submit>
+    </el-form>
+</div>
+
+<script type="application/javascript">
+    $(function () {
+        // 注意:Vue组件一定放在jQuery.validator前面验证
+        new Vue({
+            el: '#contractLogs-app',
+            data :function () {
+                return {
+                    params: {
+                        // 注意:group和attr连个属性都不能省略 就算为空
+                        group: {},
+                        attr: {
+                            name: 'status',   // 当前checkbox框的name属性  【必填】
+                            radioCheck:{{$model->status}},   // 当前选中项 int | string   【必填】
+                            label: 'el-radio-button', // 当前样式 默认 el-radio 样式 【非必填】
+                            radios: [ // 每个checkbox 就是一个json对象     【必填】
+                                {
+                                    value:0,      // 当前选中时值也就是value属性的值      【必填】
+                                    label: '关闭',    // 当前提示文字                 【必填】
+                                    disable: false   // 是否禁止点击 默认:false 不禁止
+                                },
+                                {
+                                    value:1,      // 当前选中时值也就是value属性的值      【必填】
+                                    label: '开启',    // 当前提示文字                 【必填】
+                                    disable: false   // 是否禁止点击 默认:false 不禁止
+                                }
+                            ]
+                        }
+                    }
+                };
+            }
+        });
+        jQuery.validator.setDefaults({
+            debug: false,         // 调试模式true不会提交,false允许提交
+            success: "success",   // 匹配成功的class样式名称
+            errorElement: 'div'   // 兼容el标签时使用(兼容el Vue组件label.error标签问题)
+        });
+        // 前台数据验证 验证需要设置window.form全局变量
+        window.form = $('#form-create').validate({
+            rules: {
+                image: {
+                    required: true,
+                    maxlength: 255,
+                    normalizer: function ( value ) {
+                        return $.trim(value);
+                    }
+                },
+                // link: {
+                //     required: true,
+                //     maxlength: 255,
+                //     normalizer: function ( value ) {
+                //         return $.trim(value);
+                //     }
+                // },
+                show: {
+                    required: true
+                },
+                sort: {
+                    required: true,
+                    normalizer: function ( value ) {
+                        return $.trim(value);
+                    }
+                }
+            }
+        });
+        // 编辑保存变量
+        window.formDatum = $('form').serialize();
+    });
+</script>
+@include('layouts.admin.form_script')

+ 156 - 0
resources/views/admins/contractLogs/index.blade.php

@@ -0,0 +1,156 @@
+@extends('layouts.admin.app')
+@section('plug-css')
+    <link href="{{ asset('js/bootstrap-table/dist/bootstrap-table.css') }}" rel="stylesheet">
+@endsection
+@section('crumbs')
+    <ol class="breadcrumb crumbs">
+        <li><a href="{{ route('admin.index') }}#">后台导航</a></li>
+        <li><a href="{{ route('admin.contractLog.index') }}">后台ContractLog首页</a></li>
+        <li class="active">ContractLog列表</li>
+    </ol>
+@endsection
+
+@section('content')
+    <form id="searchForm" class="form-inline">
+        <div class="">
+            <div class="form-group">
+                <label for="name" class="label-css"> ID:</label>
+                <input class="form-control" type="text" name="id">
+            </div>
+            &ensp;&ensp;
+            <button type="button" class="btn btn-primary">查询</button>
+        </div>
+    </form>
+    <hr class="hr-css">
+    <div>
+        <div id="toolbar">
+            <div class="columns columns-left btn-group pull-left">
+                <a class="createForm" data-url="{{ route('admin.contractLog.store') }}" data-title="create">
+                    <button class="btn btn-default" type="button">
+                        <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>&ensp;新增ContractLog
+                    </button>
+                </a>
+                <a>
+                    <button id="deleteAll" data-url="{{ route('admin.contractLog.destroys',['is_del'=>1]) }}" class="btn btn-default" type="button">
+                        <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>&ensp;删除
+                    </button>
+                </a>
+            </div>
+        </div>
+        <table id="ContentTable"></table>
+    </div>
+@endsection
+
+@section('plug-js')
+    <script src="{{ asset('js/bootstrap-table/dist/bootstrap-table.js') }}"></script>
+    <script src="{{ asset('js/bootstrap-table/dist/locale/bootstrap-table-zh-CN.js') }}"></script>
+    <script src="{{ asset('js/jquery-validation1.16/dist/jquery.validate.min.js') }}"></script>
+    <script src="{{ asset('js/jquery-validation1.16/dist/additional-methods.min.js') }}"></script>
+    <script src="{{ asset('js/jquery-validation1.16/src/localization/messages_zh.js') }}"></script>
+@endsection
+
+@section('scripts')
+    <script>
+        $(function(){
+            BootStrapInit.init('tableContractLog','ContentTable',{
+                searchForm: 'searchForm',   // 表单搜索id 省略默认 'searchForm'
+                url: "{{ route('admin.contractLog.ajax.index') }}",
+                method: 'post',
+                toolbar: '#toolbar',
+                idField: '',        // 指定主键列
+                uniqueId: "id",     // 这里需要指定当前查询表唯一主键字段
+                columns: [
+                    {
+                        checkbox: true,
+                        align: 'center',
+                        valign: 'middle'
+                    },
+                    {
+                        field: 'id',
+                        title: 'ID',
+                        align: 'center',
+                        valign: 'middle',
+                        sortable: true
+                    },
+                    {
+                        field: 'image',
+                        title: 'Image',
+                        align: 'center',
+                        valign: 'middle',
+                        formatter:thumbFormatter
+                    },
+                    // {
+                    //     field: 'link',
+                    //     title: '链接',
+                    //     align: 'center',
+                    //     valign: 'middle'
+                    // },
+                    {
+                        field: 'status',
+                        title: '显示',
+                        align: 'center',
+                        valign: 'middle',
+                        sortable: true,
+                        formatter:yesOrNo,
+                        bool_data:{
+                            'class' : 'cursor',
+//                            'url'   : 'javascript:;',
+                            'table' : 'contractLogs'
+//                            'pk' : 'id'   // 主键名称不写默认id主键
+                        }
+                    },
+                    {
+                        field: 'sort',
+                        title: '排序',
+                        align: 'center',
+                        valign: 'middle',
+                        sortable: true,
+                        formatter:inputData,
+                        input_data: {
+//                        'class' : 'cursor',     // 当前样式
+//                        'url'   : 'javascript', // url存在 及请求指定地址修改数据
+                            'table' : 'contractLogs'   // url为空时采用,
+//                        'pk'    : 'id'          // 默认修改主键名称 不写 默认id为主键
+                        }
+                    },
+                    {
+                        field: 'created_at',
+                        title: '创建时间',
+                        align: 'center',
+                        valign: 'middle',
+                        sortable: true
+                    },
+                    {
+                        field: 'updated_at',
+                        title: '更新时间',
+                        align: 'center',
+                        valign: 'middle',
+                        sortable: true
+                    },
+                    {
+                        pkId: 'id',         // 当前主键id 兼容排序 field='id' 默认值id
+                        title: '操作',
+                        align: 'center',
+                        valign: 'middle',
+                        width: '185px',
+                        formatter:operateFormatter,
+                        btn_group:[
+                            {
+                                'name'  : '编辑',
+                                'class' : 'btn-primary createForm',
+                                'url'   : 'javascript:;',
+                                'confirm_url': '{{ route('admin.contractLog.edit', ['id'=>'-val-'])}}'
+                            },
+                            {
+                                'name'  : '删除',
+                                'class' : 'btn-danger deleteBtn', // class标签 deleteBtn删除 layer弹出框
+                                'url'   : 'javascript:;',
+                                'confirm_url': '{{ route('admin.contractLog.destroy', ['id'=>'-val-','is_del'=>1])}}'   // 选择按钮
+                            }
+                        ]
+                    }
+                ]
+            });
+        });
+    </script>
+@endsection

+ 21 - 0
routes/web/contractDistribution.php

@@ -0,0 +1,21 @@
+<?php
+
+use Illuminate\Support\Facades\Route;
+
+Route::group(['domain' => env('APP_HOST'), 'prefix' => 'admin/contractDistribution'],function(){
+    Route::get('index', 'ContractDistributionsController@index')->name('admin.contractDistribution.index');
+    Route::post('index', 'ContractDistributionsController@index')->name('admin.contractDistribution.ajax.index');
+
+    Route::get('store','ContractDistributionsController@store')->name('admin.contractDistribution.store');
+    Route::post('store','ContractDistributionsController@store')->name('admin.contractDistribution.save');
+
+    Route::post('destroy/{id?}','ContractDistributionsController@destroy')->name('admin.contractDistribution.destroy');
+    Route::post('destroys','ContractDistributionsController@destroys')->name('admin.contractDistribution.destroys');
+
+    Route::get('edit/{id?}','ContractDistributionsController@edit')->name('admin.contractDistribution.edit');
+    Route::post('update/{id?}','ContractDistributionsController@update')->name('admin.contractDistribution.update');
+});
+
+Route::group(['domain' => env('APP_HOST_WEB'), 'prefix' => 'contractDistribution'],function (){
+    Route::post('list', 'Front\\ContractDistributionsController@index');
+});

+ 21 - 0
routes/web/contractLog.php

@@ -0,0 +1,21 @@
+<?php
+
+use Illuminate\Support\Facades\Route;
+
+Route::group(['domain' => env('APP_HOST'), 'prefix' => 'admin/contractLog'],function(){
+    Route::get('index', 'ContractLogsController@index')->name('admin.contractLog.index');
+    Route::post('index', 'ContractLogsController@index')->name('admin.contractLog.ajax.index');
+
+    Route::get('store','ContractLogsController@store')->name('admin.contractLog.store');
+    Route::post('store','ContractLogsController@store')->name('admin.contractLog.save');
+
+    Route::post('destroy/{id?}','ContractLogsController@destroy')->name('admin.contractLog.destroy');
+    Route::post('destroys','ContractLogsController@destroys')->name('admin.contractLog.destroys');
+
+    Route::get('edit/{id?}','ContractLogsController@edit')->name('admin.contractLog.edit');
+    Route::post('update/{id?}','ContractLogsController@update')->name('admin.contractLog.update');
+});
+
+Route::group(['domain' => env('APP_HOST_WEB'), 'prefix' => 'contractLog'],function (){
+    Route::post('list', 'Front\\ContractLogsController@index');
+});