Commit 7c2966a7 authored by 朱招明's avatar 朱招明

奖励方案相关功能

1.后台管理相关 2.Api接口相关
parent 4bf8ca9f
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateSchemesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
/**
* 奖励方案列表
*/
Schema::create('schemes', function (Blueprint $table) {
$table->increments('id');
$table->string('name', '100')->default('')->comment('方案名称');
$table->tinyInteger('direct_source_ratio')->default(0)->comment('直接客源奖励比例');
$table->tinyInteger('indirect_source_ratio')->default(0)->comment('间接客源奖励比例');
$table->decimal('recharge_amount', 10, 2)->default(0)->comment('充值金额');
$table->decimal('consume_amount', 10, 2)->default(0)->comment('可消费充值金额');
$table->decimal('unconsume_amount', 10, 2)->default(0)->comment('不可消费充值金额');
$table->tinyInteger('online_pay')->default(0)->comment('是否线上支付 0否 1是');
$table->tinyInteger('dividend_type')->default(1)->comment('分红方式 1毛利分红 2实收分红');
$table->tinyInteger('benefit_month')->default(0)->comment('受益时长/月');
$table->tinyInteger('status')->default(1)->comment('启用状态 1启用 2停用');
$table->string('interests_images','200')->default('')->comment('方案权益图片');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('schemes');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateSchemeConfigsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
/**
* 奖励方案配置
*/
Schema::create('scheme_configs', function (Blueprint $table) {
$table->increments('id');
$table->tinyInteger('introduce_manager_ratio')->comment('介绍掌柜奖励比例');
$table->tinyInteger('default_manager_ratio')->comment('默认奖励比例');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('scheme_configs');
}
}
<?php
namespace Modules\Share\Entities;
use Illuminate\Database\Eloquent\Model;
class Scheme extends Model
{
protected $fillable = [
'name','direct_source_ratio', 'indirect_source_ratio','recharge_amount','consume_amount','unconsume_amount','online_pay','dividend_type','benefit_month',
];
}
<?php
namespace Modules\Share\Entities;
use Illuminate\Database\Eloquent\Model;
class schemeConfig extends Model
{
protected $fillable = [];
}
<?php
namespace Modules\Share\Http\Controllers\Admin\Forms;
use Encore\Admin\Widgets\Form;
use Illuminate\Http\Request;
use Modules\Share\Entities\SchemeConfig;
class SchemeConfigSet extends Form
{
/**
* The form title.
*
* @var string
*/
public $title = '方案统一配置';
/**
* Handle the form request.
*
* @param Request $request
*
* @return \Illuminate\Http\RedirectResponse
*/
public function handle(Request $request)
{
//dump($request->all());
$SchemeConfig = SchemeConfig::first();
$SchemeConfig->introduce_manager_ratio = $request->introduce_manager_ratio;
$SchemeConfig->default_manager_ratio = $request->default_manager_ratio;
$SchemeConfig->save();
admin_success('设置成功');
return back();
}
/**
* Build a form here.
*/
public function form()
{
$this->number('introduce_manager_ratio','介绍掌柜奖励比例')->default(0)->rules('required|Numeric|between:0,100');
$this->number('default_manager_ratio','默认奖励比例')->default(0)->rules('required|Numeric|between:0,100');
}
/**
* The data of the form.
*
* @return array $data
*/
public function data()
{
$SchemeConfig = SchemeConfig::first();
return [
'introduce_manager_ratio' => $SchemeConfig->introduce_manager_ratio,
'default_manager_ratio' => $SchemeConfig->default_manager_ratio,
];
}
}
<?php
namespace Modules\Share\Http\Controllers\Admin;
use Encore\Admin\Layout\Content;
use Modules\Share\Entities\Scheme;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use SMG\Admin\Grid;
use Encore\Admin\Show;
use Modules\Share\Http\Controllers\Admin\Forms\SchemeConfigSet;
class SchemeController extends AdminController
{
/**
* Title for current resource.
*
* @var string
*/
protected $title = '方案管理';
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new Scheme());
$grid->column('id', 'Id');
$grid->column('name', '名称');
$grid->column('direct_source_ratio', '直接客源奖励比例');
$grid->column('indirect_source_ratio', '间接客源奖励比例');
$grid->column('recharge_amount', '充值金额');
$grid->column('consume_amount', '可消费充值金额');
$grid->column('unconsume_amount', '不可消费充值金额');
$grid->column('online_pay', '是否线上支付')->display(function ($v) {
return $v == 1 ?'是':'否';
});
$grid->column('dividend_type', '分红方式')->display(function ($v) {
return $v == 1 ?'毛利分红':'实收分红';
});
$grid->column('benefit_month', '受益时长')->display(function ($v) {
return $v .'个月';
});
$grid->column('status', '是否启用')->display(function ($v) {
return $v == 1 ?'启用':'禁用';
});
$grid->column('created_at', '创建时间');
$grid->filter(function ($filter) {
$filter->like('name', '方案名称');
$filter->equal('dividend_type','分红方式')->select([1 => '毛利分红',2 => '实收分红']);
$filter->equal('status','状态')->radio([
'' => '全部',
0 => '禁用',
1 => '启用',
]);
});
$grid->enableFilter();
return $grid;
}
/**
* Make a show builder.
*
* @param mixed $id
* @return Show
*/
protected function detail($id)
{
$show = new Show(Scheme::findOrFail($id));
$show->field('id', 'Id');
$show->field('name', '名称');
$show->field('direct_source_ratio', '直接客源奖励比例');
$show->field('indirect_source_ratio', '间接客源奖励比例');
$show->field('recharge_amount', '充值金额');
$show->field('consume_amount', '可消费充值金额');
$show->field('unconsume_amount', '不可消费充值金额');
$show->field('online_pay', '是否线上支付')->as(function ($v) {
return $v == 1 ?'是':'否';
});
$show->field('dividend_type', '分红方式')->as(function ($v) {
return $v == 1 ?'毛利分红':'实收分红';
});
$show->field('benefit_month', '受益时长')->as(function ($v) {
return $v .'个月';
});
$show->field('status', '是否启用')->as(function ($v) {
return $v == 1 ?'启用':'禁用';
});
$show->field('status', '是否启用');
return $show;
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
$form = new Form(new Scheme());
$form->text('name', '名称')->rules('required');
$form->number('direct_source_ratio', '直接客源奖励比例')->rules('required|Numeric|between:0,100');
$form->number('indirect_source_ratio', '间接客源奖励比例')->rules('required|Numeric|between:0,100');
$form->decimal('recharge_amount', '充值金额')->rules('required|Numeric|between:1,99999999');
$form->decimal('consume_amount', '可消费充值金额')->rules('required|Numeric|between:1,99999999');
$form->decimal('unconsume_amount', '不可消费充值金额')->rules('required|Numeric|between:1,99999999');
$form->switch('online_pay', '线上支付')->default(1)->rules('required');
$form->select('dividend_type', '分红方式')->options([1 => '毛利分红', 2 => '实收分红'])->rules('required');
$form->number('benefit_month', '受益时长/个月')->rules('required');
$form->switch('status', '是否启用')->default(1)->rules('required');
return $form;
}
public function config(Content $content)
{
return $content
->title('方案配置')
->body(new SchemeConfigSet());
}
}
<?php
namespace Modules\Share\Http\Controllers\Api;
use Illuminate\Pagination\AbstractPaginator;
use Illuminate\Pagination\LengthAwarePaginator;
use Modules\Base\Http\Controllers\BaseController;
use Modules\Base\Transformers\CommonTransformer;
use Modules\Base\Transformers\BaseTransformer;
class ApiController extends BaseController
{
use \Dingo\Api\Routing\Helpers;
public function paginator(AbstractPaginator $list, BaseTransformer $transform)
{
if ($list instanceof LengthAwarePaginator) {
return $this->response->paginator($list, $transform);
}
return $this->response->collection($list->getCollection(), $transform)
->setMeta(['pagination' => ['per_page' => $list->perPage(), 'current_page' => $list->currentPage(), 'count' => $list->count()]]);
}
public function emptyObject()
{
return $this->response->array(['data' => new \stdClass()]);
}
public function emptyPageData()
{
return $this->response->paginator(new LengthAwarePaginator(collect(), 0, request('per_page', 20)), new CommonTransformer());
}
}
This diff is collapsed.
<?php
namespace Modules\Share\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller;
class BaseController extends Controller
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
<?php
namespace Modules\Share\Http\Requests;
use Dingo\Api\Http\FormRequest;
use Dingo\Api\Http\Request;
class BaseRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$method = strtolower($this->method()).'Rules';
$rules = $this->$method();
foreach ($rules as &$rule) {
if (is_string($rule) && strpos($rule, 'bail') === false) {
$rule = 'bail|'.$rule;
} elseif (is_array($rule) && !in_array('bail', $rule)) {
array_unshift($rule, 'bail');
}
}
return $rules;
}
protected function postRules()
{
return [];
}
protected function getRules()
{
return [];
}
protected function putRules()
{
return [];
}
protected function deleteRules()
{
return [];
}
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* @return bool
*/
public function isApi()
{
if ($this->container['request'] instanceof Request) {
return true;
}
return false;
}
}
<?php
namespace Modules\Share\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class SchemeRequest extends BaseRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function postRules()
{
return [
'name' => 'required',
'direct_source_ratio' => 'required|Numeric|between:0,100',
'indirect_source_ratio' => 'required|Numeric|between:0,100',
'recharge_amount' => 'required|Numeric|between:1,99999999',
'consume_amount' => 'required|Numeric',
'unconsume_amount' => 'required|Numeric',
'online_pay' => 'required',
'dividend_type' => 'required',
'benefit_month' => 'required',
'interests_images' => 'required',
];
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function putRules()
{
return [
'id' => 'required',
'name' => 'required',
'direct_source_ratio' => 'required|Numeric|between:0,100',
'indirect_source_ratio' => 'required|Numeric|between:0,100',
'recharge_amount' => 'required|Numeric|between:1,99999999',
'consume_amount' => 'required|Numeric',
'unconsume_amount' => 'required|Numeric',
'online_pay' => 'required',
'dividend_type' => 'required',
'benefit_month' => 'required',
'interests_images' => 'required',
];
}
public function messages()
{
return [
'id.required' => '方案ID不能为空',
'name.required' => '方案名称不能为空',
'direct_source_ratio.required' => '直接客源奖励比例不能为空',
'direct_source_ratio.between' => '直接客源奖励比例必须介于 0 - 100 之间',
'indirect_source_ratio.required' => '间接客源奖励不能为空',
'indirect_source_ratio.between' => '间接客源奖励必须介于 0 - 100 之间',
'recharge_amount.required' => '充值金额不能为空',
'recharge_amount.between' => '充值金额必须为1-99999999元之间',
'consume_amount.required' => '可消费充值金额不能为空',
'unconsume_amount.required' => '不可消费充值金额不能为空',
'online_pay.required' => '是否线上支付不能为空',
'dividend_type.required' => '分红方式不能为空',
'benefit_month.required' => '受益时长不能为空',
'interests_images.required' => '方案权益不能为空',
];
}
}
<?php
/**
* Admin
*/
Route::group([
'prefix' => config('admin.route.prefix'),
'middleware' => config('admin.route.middleware'),
'namespace' => 'Modules\Share\Http\Controllers\Admin',
], function ($router) {
//方案管理curd
$router->resource('scheme', 'SchemeController');
//方案配置
$router->get('scheme_config', 'SchemeController@config');
Route::group(['middleware' => 'web', 'prefix' => 'share', 'namespace' => 'Modules\Share\Http\Controllers'], function()
{
Route::get('/', 'ShareController@index');
});
/**
* api
*/
$api = app('Dingo\Api\Routing\Router');
$api->version(
'v1',
array_merge(
[
'namespace' => 'Modules\Share\Http\Controllers\Api',
'prefix' => 'api/share',
],
config('api.defaultSetting', [])
),
function ($api) {
// 方案列表
$api->post('/schemes/list', 'SchemeController@index')
->name('api.share.scheme.store');
// 新增方案
$api->post('/schemes', 'SchemeController@create')
->name('api.share.scheme.create');
// 查看方案详细信息
$api->get('/schemes/{scheme_id}', 'SchemeController@show')
->name('api.share.scheme.show');
// 修改方案
$api->put('/schemes', 'SchemeController@edit')
->name('api.share.scheme.edit');
// 启用/停用 方案
$api->put('/schemes/status/{scheme_id}', 'SchemeController@status')
->name('api.share.scheme.status');
// 删除方案
$api->delete('/schemes/{scheme_id}', 'SchemeController@destroy')
->name('api.base.scheme.destroy');
// 获取方案配置
$api->get('/schemes_setting', 'SchemeController@showSetting')
->name('api.base.scheme.showSetting');
// 修改方案配置
$api->put('/schemes_setting', 'SchemeController@setting')
->name('api.base.scheme.setting');
}
);
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/6/13
* Time: 9:52
*/
namespace Modules\Share\Services;
class BaseService
{
protected $model;
public function create($data)
{
return $this->model = $this->model->create($data)->refresh();
}
public function update($id, $data)
{
$this->model = $this->model->find($id);
$this->model->fill($data);
return $this->model->save();
}
public function getModel()
{
return $this->model;
}
}
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/6/13
* Time: 9:53
*/
namespace Modules\Share\Services;
use Modules\Share\Entities\Scheme;
class SchemeService extends BaseService
{
public function __construct(Scheme $scheme)
{
$this->model = $scheme;
}
public function update($id, $data)
{
return parent::update($id, $data);
}
}
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/6/27
* Time: 17:44
*/
namespace Modules\Share\Transformers;
use League\Fractal\TransformerAbstract;
class BaseTransformer extends TransformerAbstract
{
protected static $extraIncludes = [];
protected static $extraDefaultIncludes = [];
public function __construct()
{
if (!isset(static::$extraIncludes[static::class])) {
static::$extraIncludes[static::class] = [];
}
if (!isset(static::$extraDefaultIncludes[static::class])) {
static::$extraDefaultIncludes[static::class] = [];
}
$this->availableIncludes = array_merge($this->availableIncludes, static::$extraIncludes[static::class]);
$this->defaultIncludes = array_merge($this->defaultIncludes, static::$extraDefaultIncludes[static::class]);
}
public static function addIncludes($name)
{
if (!isset(static::$extraIncludes[static::class])) {
static::$extraIncludes[static::class] = [];
}
$name = (array) $name;
$temp = [];
foreach ($name as $key => $value) {
if (is_string($key) && $value instanceof \Closure) {
static::macro('include'.ucfirst($key), $value);
$value = $key;
}
$temp[] = $value;
}
static::$extraIncludes[static::class] = array_merge(static::$extraIncludes[static::class], $temp);
}
public static function addDefaultIncludes($name)
{
if (!isset(static::$extraDefaultIncludes[static::class])) {
static::$extraDefaultIncludes[static::class] = [];
}
static::$extraDefaultIncludes[static::class] += (array) $name;
}
/**
* 修改返回
*
* @param $arr
*
* @return mixed
*/
public function alter($arr)
{
return $arr;
}
public static function checkExtraInclude($key)
{
static $extra_includes;
if ($extra_includes == null) {
$extra_includes = array_map('trim', explode(',', request('extra_include', '')));
}
return array_search($key, $extra_includes) === false ? false : true;
}
public function single($value, $transformer)
{
return $value ? $this->item($value, $transformer) : null;
}
}
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/6/8
* Time: 12:20
*/
namespace Modules\Share\Transformers;
use Modules\Share\Entities\SchemeConfig;
class SchemeConfigTransformer extends BaseTransformer
{
/**
* @OA\Schema(
* description="方案列表",
* type="object",
* schema="SchemeConfig",
* @OA\Property(property="introduce_manager_ratio", type="integer", description="介绍掌柜奖励比例"),
* @OA\Property(property="default_manager_ratio", type="integer", description="默认奖励比例"),
* )
*/
public function transform(SchemeConfig $schemeConfig)
{
return map_attr($schemeConfig, ['introduce_manager_ratio', 'default_manager_ratio']);
}
}
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/6/8
* Time: 12:20
*/
namespace Modules\Share\Transformers;
use Modules\Share\Entities\Scheme;
class SchemeTransformer extends BaseTransformer
{
/**
* @OA\Schema(
* description="方案列表",
* type="object",
* schema="Scheme",
* @OA\Property(property="id", type="integer", description="ID"),
* @OA\Property(property="name", type="string", description="方案名称"),
* @OA\Property(property="direct_source_ratio", type="integer", description="直接客源奖励比例"),
* @OA\Property(property="indirect_source_ratio", type="integer", description="间接客源奖励比例"),
* @OA\Property(property="recharge_amount", type="float", description="充值金额"),
* @OA\Property(property="consume_amount", type="float", description="可消费充值金额"),
* @OA\Property(property="unconsume_amount", type="float", description="不可消费充值金额"),
* @OA\Property(property="online_pay", type="integer", description="是否线上支付"),
* @OA\Property(property="dividend_type", type="integer", description="分红方式"),
* @OA\Property(property="benefit_month", type="integer", description="受益时长/月"),
* @OA\Property(property="interests_images", type="string", description="方案权益"),
* @OA\Property(property="status", type="integer", description="启用状态"),
* @OA\Property(property="created_at", type="string", description="写入时间"),
* @OA\Property(property="updated_at", type="string", description="更新时间")
* )
*/
public function transform(Scheme $scheme)
{
return map_attr($scheme, ['id', 'name', 'direct_source_ratio', 'indirect_source_ratio','recharge_amount','consume_amount','unconsume_amount','online_pay','dividend_type','benefit_month','interests_images', 'status', 'created_at', 'updated_at']);
}
}
<?php
use Encore\Admin\Auth\Database\Menu;
use Illuminate\Database\Migrations\Migration;
class ImportMenu0414122047 extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$parent_id = 0;
$menu = $this->createMenu('方案管理', NULL, 'fa-bars', $parent_id);
$parent_id=$menu->id;
$this->createMenu('方案列表', 'scheme', 'fa-bars', $parent_id);
$this->createMenu('方案配置', 'scheme_config', 'fa-bars', $parent_id);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
/**
* 创建菜单
*
* @param $title
* @param $uri
* @param string $icon
* @param int $parentId
*
* @return mixed
*/
protected function createMenu($title, $uri, $icon = 'fa-bars', $parentId = 0)
{
$lastOrder = Menu::max('order');
return Menu::create([
'parent_id' => $parentId,
'order' => $lastOrder + 1,
'title' => $title,
'icon' => $icon,
'uri' => $uri,
]);
}
/**
* 创建权限
*
* @param $name
* @param $slug
* @param $path
* @param null $http_method
*/
protected function createPermission($name, $slug, $path, $http_method = null)
{
\Encore\Admin\Auth\Database\Permission::create([
'name' => $name,
'slug' => $slug,
'http_path' => '/'.trim($path, '/'),
'http_method' => $http_method,
]);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment