Merge branch 'master' into 1.1

This commit is contained in:
2020-09-27 16:21:52 +08:00
5 changed files with 418 additions and 297 deletions

View File

@@ -0,0 +1,94 @@
<?php
namespace App\Admin\Controllers\Activity;
use App\Admin\Renderable\Activity\Grants;
use App\Models\Activity;
use App\Models\ActivityCouponLog;
use App\Models\ActivityGrant;
use App\Models\ActivityRule;
use App\Models\User;
use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Illuminate\Support\MessageBag;
use Illuminate\Routing\Controller as AdminController;
class LogController extends AdminController
{
use HasResourceActions;
protected $title = '回调记录';
/**
* Get content title.
* @return string
*/
protected function title()
{
return $this->title;
}
/**
* Index interface.
* @param Content $content
* @return Content
*/
public function index(Content $content)
{
return $content
->title($this->title())
->description($this->description['index'] ?? trans('admin.list'))
->body($this->grid());
}
protected function grid()
{
$grid = new Grid(new ActivityCouponLog);
$grid->model()->latest();
$grid->disableActions();
$grid->disableCreateButton();
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->equal('code', '卡券编号');
$filter->equal('type', '分类')->select(ActivityCouponLog::TYPES);
});
$filter->column(1 / 2, function ($filter) {
$filter->equal('status', '状态')->select(ActivityCouponLog::STATUS);
$filter->between('created_at', '开始时间')->datetime();
});
});
$grid->column('id', '#ID#');
$grid->column('code', '卡券编号');
$grid->column('type', '分类')
->using(ActivityCouponLog::TYPES)
->label([
1 => 'default',
2 => 'warning',
3 => 'info',
]);
$grid->column('status', '状态')
->using(ActivityCouponLog::STATUS)
->label([
1 => 'default',
2 => 'warning',
3 => 'info',
]);
$grid->column('remark', '处理结果');
$grid->column('created_at', '操作时间');
return $grid;
}
}

View File

@@ -1,57 +1,58 @@
<?php <?php
use Illuminate\Routing\Router; use Illuminate\Routing\Router;
Admin::routes(); Admin::routes();
Route::group([ Route::group([
'prefix' => config('admin.route.prefix'), 'prefix' => config('admin.route.prefix'),
'namespace' => config('admin.route.namespace'), 'namespace' => config('admin.route.namespace'),
'middleware' => config('admin.route.middleware'), 'middleware' => config('admin.route.middleware'),
], function (Router $router) { ], function (Router $router) {
$router->get('/', 'HomeController@index')->name('admin.home'); $router->get('/', 'HomeController@index')->name('admin.home');
$router->get('test', 'TestController@index')->name('test.index'); $router->get('test', 'TestController@index')->name('test.index');
$router->post('uploads/editor', 'UploadController@editor')->name('uploads.editor'); $router->post('uploads/editor', 'UploadController@editor')->name('uploads.editor');
/** /**
* 账户管理 * 账户管理
*/ */
$router->get('accounts', 'Account\IndexController@index'); $router->get('accounts', 'Account\IndexController@index');
$router->get('accounts/logs', 'Account\LogController@index'); $router->get('accounts/logs', 'Account\LogController@index');
$router->resource('accounts/rules', 'Account\RuleController'); $router->resource('accounts/rules', 'Account\RuleController');
/** /**
* 用户管理 * 用户管理
*/ */
$router->get('user/parent', 'User\IndexController@getParent'); $router->get('user/parent', 'User\IndexController@getParent');
$router->resource('users', 'User\IndexController'); $router->resource('users', 'User\IndexController');
//身份管理 //身份管理
$router->resource('identity', 'IdentityController'); $router->resource('identity', 'IdentityController');
/** /**
* api 日志 * api 日志
*/ */
$router->resource('logs', 'Log\IndexController'); $router->resource('logs', 'Log\IndexController');
$router->resource('coupons', 'Coupon\IndexController'); //平安卡券 $router->resource('coupons', 'Coupon\IndexController'); //平安卡券
$router->resource('wos', 'Wo\IndexController'); //沃钱包业务 $router->resource('wos', 'Wo\IndexController'); //沃钱包业务
/** /**
* 财务管理 * 财务管理
*/ */
$router->resource('finances', 'Finance\IndexController'); $router->resource('finances', 'Finance\IndexController');
$router->resource('financelogs', 'Finance\LogController'); $router->resource('financelogs', 'Finance\LogController');
$router->get('census/today', 'Finance\CensusController@today'); $router->get('census/today', 'Finance\CensusController@today');
$router->resource('census', 'Finance\CensusController'); $router->resource('census', 'Finance\CensusController');
//省份地址 //省份地址
$router->get('ajax/areas/children', 'Ajax\AreaController@children')->name('areas.children'); $router->get('ajax/areas/children', 'Ajax\AreaController@children')->name('areas.children');
//活动列表 //活动列表
$router->resource('activities', 'Activity\IndexController'); $router->resource('activities', 'Activity\IndexController');
$router->resource('rules', 'Activity\RuleController'); $router->resource('rules', 'Activity\RuleController');
$router->resource('activitycoupons', 'Activity\CouponController'); $router->resource('activitycoupons', 'Activity\CouponController');
$router->resource('activitycouponlogs', 'Activity\LogController');
});
});

View File

@@ -1,238 +1,251 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Api\Controllers\ApiResponse; use App\Api\Controllers\ApiResponse;
use SelfCoupon; use SelfCoupon;
use App\Models\User; use App\Models\User;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use XuanChen\Coupon\Coupon; use XuanChen\Coupon\Coupon;
// use Wo; // use Wo;
class TestController class TestController
{ {
use ApiResponse; use ApiResponse;
public $baseUrl = 'http://pa.ysd-bs.com/api/V1/'; public $baseUrl = 'http://pa.ysd-bs.com/api/V1/';
public function index(Request $request) public function index(Request $request)
{ {
$user_id = $request->user_id; // $user_id = $request->user_id;
$data = $request->data; // $data = $request->data;
$this->user = User::find(3); // $this->user = User::find(3);
//
$data = '5VehIrHTZsS1BY8V5VcKlhTN9hbutq4j+HIT2zRCbSqgPWvClQSxYSP7mn7PmHuiYQpj55NRC6w4397FfdVTq23wd4BOQ964giie/JForTjt0l7UaY23XzKnNjDSKiGqr7DAbd8P3SzJ75ZjKaqUu7UWu3PVylAeesGRbZgpQEF/XKwOW4XMaJGV2tIsowILZCtF+moqHg7yA6hI4vT7iYU3rTq9vk7kpcnfArLKPQ5dxH9FFIegdr7E1S8NVwpTZrxeQEmjDUsGrBcWe/Q9dRWXSlKF1Hdz2qCUCK94fu3gqvEVSYRllTCa5mwQhlYJLs2UTmWMSism7nsivySseSl1/JOvNH0lyvWaV1XDUMKG8oTC+kOPQKxFA3qp2xO9ohRhN0dkpML4JVgkMF1r6rv+rThYQuOL/rnsuY5Jdh4QdPWCItQ05lqI46s2yPyKROrLx7jQ3/+BOyEmP+Cj5W8/trEAVS1HczMj4Jnl3vrcY879ubokUcEatalAuKGM0uLNAqQF5XfHzgXam4coEMek8MjdbxW+Z9+eZFQp/P1ts7yN5qzpac6Y8CrqSMFJZf1vwowp+1peiEC5tCsXlHCsDLPS8Uh1LNnC3sag0XZu7jX5uVR9nxR2c/ibBJOAHcUO+NcjmzoN+dQOeBkb/aWj9B+9mW5RUQmfUk6O+Vwkb5ruZZbXsoJJULj4tHJv87+mVo30e0mBbaPD47+fTp1+qSJtLOOlLO2nEj1NNDBSBGLM4RxTDQ4ju2r6HY9YyMXsbNC2YB8zrXrDsUoB1WSuu5XcaWx8rzA0NpckzNbEIuv0+6fA69gXOhC9xcGGPyEBbko73XHr7W8MIDtWhGOG8kHf1cAMdjwVGS2OUJ6XKZnBMwIzY8cJn4Fi+jXRMFnt+7BxWLToNQsyOoHbYWypeM8FrAb4VQeaxGhBQUXUmHhmAp00jcGEe/ngxn1oVjq6G+pEq8CxBntvQ+GZ975sPaCqkYOjbuHa9Myd2tT6GWbczL/YcR4RRV96ByYYCEOBy01LsBNeo6SSpWYcK4eoLhc70v8s'; // $data = '5VehIrHTZsS1BY8V5VcKlhTN9hbutq4j+HIT2zRCbSqgPWvClQSxYSP7mn7PmHuiYQpj55NRC6w4397FfdVTq23wd4BOQ964giie/JForTjt0l7UaY23XzKnNjDSKiGqr7DAbd8P3SzJ75ZjKaqUu7UWu3PVylAeesGRbZgpQEF/XKwOW4XMaJGV2tIsowILZCtF+moqHg7yA6hI4vT7iYU3rTq9vk7kpcnfArLKPQ5dxH9FFIegdr7E1S8NVwpTZrxeQEmjDUsGrBcWe/Q9dRWXSlKF1Hdz2qCUCK94fu3gqvEVSYRllTCa5mwQhlYJLs2UTmWMSism7nsivySseSl1/JOvNH0lyvWaV1XDUMKG8oTC+kOPQKxFA3qp2xO9ohRhN0dkpML4JVgkMF1r6rv+rThYQuOL/rnsuY5Jdh4QdPWCItQ05lqI46s2yPyKROrLx7jQ3/+BOyEmP+Cj5W8/trEAVS1HczMj4Jnl3vrcY879ubokUcEatalAuKGM0uLNAqQF5XfHzgXam4coEMek8MjdbxW+Z9+eZFQp/P1ts7yN5qzpac6Y8CrqSMFJZf1vwowp+1peiEC5tCsXlHCsDLPS8Uh1LNnC3sag0XZu7jX5uVR9nxR2c/ibBJOAHcUO+NcjmzoN+dQOeBkb/aWj9B+9mW5RUQmfUk6O+Vwkb5ruZZbXsoJJULj4tHJv87+mVo30e0mBbaPD47+fTp1+qSJtLOOlLO2nEj1NNDBSBGLM4RxTDQ4ju2r6HY9YyMXsbNC2YB8zrXrDsUoB1WSuu5XcaWx8rzA0NpckzNbEIuv0+6fA69gXOhC9xcGGPyEBbko73XHr7W8MIDtWhGOG8kHf1cAMdjwVGS2OUJ6XKZnBMwIzY8cJn4Fi+jXRMFnt+7BxWLToNQsyOoHbYWypeM8FrAb4VQeaxGhBQUXUmHhmAp00jcGEe/ngxn1oVjq6G+pEq8CxBntvQ+GZ975sPaCqkYOjbuHa9Myd2tT6GWbczL/YcR4RRV96ByYYCEOBy01LsBNeo6SSpWYcK4eoLhc70v8s';
$iv = substr($this->user->des3key, 0, 8); // $iv = substr($this->user->des3key, 0, 8);
$ret = openssl_decrypt($data, 'DES-EDE3-CBC', $this->user->des3key, 0, $iv); // $ret = openssl_decrypt($data, 'DES-EDE3-CBC', $this->user->des3key, 0, $iv);
if (false === $ret) { // if (false === $ret) {
return openssl_error_string(); // return openssl_error_string();
} // }
dd($ret); // dd($ret);
dd(); // dd();
$this->user = User::find(215); $this->user = User::find(4);
$ret = [ $ret = [
'redemptionCode' => '951951858070', 'variable' => 100,
'total' => 5, 'mobile' => 15663876870,
'outletId' => '2006151433887', 'type' => 'silver',
]; 'remark' => '测试',
];
return $this->success($ret); $res['server_id'] = $this->user->server_id;
dd(phpinfo()); $res['des'] = $this->user->des3key;
dd(); $res['key'] = $this->user->server_key;
$num = 100;
return $this->success($ret);
for ($i = 1; $i <= $num; $i++) { dd();
$data = [ $this->user = User::find(4);
'outletId' => '2004020935777', $ret = [
'activityId' => 'ysd20200740', 'redemptionCode' => '951951858070',
'mobile' => '15663876870', 'total' => 5,
]; 'outletId' => '2008241014458',
];
$this->user = User::find(3);
return $this->success($ret);
$data = $this->jiami($data); dd(phpinfo());
dd();
$url = $this->baseUrl . 'user/grant'; $num = 100;
$res = $this->http($data, $url);
for ($i = 1; $i <= $num; $i++) {
// if (isset($res['data'])) { $data = [
// $jiemi = $this->jiemi($res['data']); 'outletId' => '2004020935777',
// dump($jiemi); 'activityId' => 'ysd20200740',
// } 'mobile' => '15663876870',
];
}
$this->user = User::find(3);
dump($this->getElapsedTime());
dump($this->getMemoryUsage()); $data = $this->jiami($data);
} $url = $this->baseUrl . 'user/grant';
$res = $this->http($data, $url);
/**
* Notes: 发券 // if (isset($res['data'])) {
* @Author: 玄尘 // $jiemi = $this->jiemi($res['data']);
* @Date : 2020/6/29 13:57 // dump($jiemi);
*/ // }
public function grant(Request $request)
{ }
$this->user = User::find(3);
dump($this->getElapsedTime());
$data = $this->jiami($request->all()); dump($this->getMemoryUsage());
$url = $this->baseUrl . 'user/grant'; }
$res = $this->http($data, $url);
/**
return $res; * Notes: 发券
* @Author: 玄尘
// dump($this->getElapsedTime()); * @Date : 2020/6/29 13:57
// dump($this->getMemoryUsage()); */
// public function grant(Request $request)
// dd($res); {
} $this->user = User::find(3);
//查询 $data = $this->jiami($request->all());
public function query(Request $request)
{ $url = $this->baseUrl . 'user/grant';
$this->user = User::find(3); $res = $this->http($data, $url);
$redemptionCode = $request->redemptionCode; return $res;
$outletId = $request->outletId;
// dump($this->getElapsedTime());
$data = $this->jiami($request->all()); // dump($this->getMemoryUsage());
//
$url = $this->baseUrl . 'user/query'; // dd($res);
$res = $this->http($data, $url); }
return $res; //查询
if (isset($res['data'])) { public function query(Request $request)
$jiemi = $this->jiemi($res['data']); {
dump($jiemi); $this->user = User::find(3);
}
$redemptionCode = $request->redemptionCode;
dump($this->getElapsedTime()); $outletId = $request->outletId;
dump($this->getMemoryUsage());
$data = $this->jiami($request->all());
dump($res);
$url = $this->baseUrl . 'user/query';
} $res = $this->http($data, $url);
//卡券作废 return $res;
public function destroy(Request $request) if (isset($res['data'])) {
{ $jiemi = $this->jiemi($res['data']);
$this->user = User::find(3); dump($jiemi);
}
$redemptionCode = $request->redemptionCode;
$data = $this->jiami($request->all()); dump($this->getElapsedTime());
dump($this->getMemoryUsage());
$url = $this->baseUrl . 'user/destroy';
$res = $this->http($data, $url); dump($res);
dump($this->getElapsedTime()); }
dump($this->getMemoryUsage());
if (isset($res['data'])) { //卡券作废
$jiemi = $this->jiemi($res['data']); public function destroy(Request $request)
dump($jiemi); {
} $this->user = User::find(3);
dump($res);
$redemptionCode = $request->redemptionCode;
} $data = $this->jiami($request->all());
/** $url = $this->baseUrl . 'user/destroy';
* Notes: 核销 $res = $this->http($data, $url);
* @Author: 玄尘
* @Date : 2020/6/29 14:01 dump($this->getElapsedTime());
*/ dump($this->getMemoryUsage());
public function checkcoupon(Request $request) if (isset($res['data'])) {
{ $jiemi = $this->jiemi($res['data']);
$user_id = $request->user_id; dump($jiemi);
}
$this->user = User::find($user_id); dump($res);
$data = $this->jiami([ }
'redemptionCode' => $request->redemptionCode,
'total' => $request->total, /**
'outletId' => $request->outletId, * Notes: 核销
'orderid' => $request->orderid, * @Author: 玄尘
]); * @Date : 2020/6/29 14:01
*/
$url = $this->baseUrl . 'user/freezecoupon'; public function checkcoupon(Request $request)
$res = $this->http($data, $url); {
$user_id = $request->user_id;
return $res;
$this->user = User::find($user_id);
$redemptionCode = $request->redemptionCode;
$total = $request->total; $data = $this->jiami([
$outletId = $request->outletId; 'redemptionCode' => $request->redemptionCode,
$orderid = $request->orderid ?? ''; 'total' => $request->total,
$res = Coupon::Redemption($this->user, $redemptionCode, $total, $outletId, $orderid); 'outletId' => $request->outletId,
'orderid' => $request->orderid,
if (is_string($res)) { ]);
return $this->error($res);
} $url = $this->baseUrl . 'user/freezecoupon';
$res = $this->http($data, $url);
return $this->success('核销成功');
} return $res;
public function http($data, $url) $redemptionCode = $request->redemptionCode;
{ $total = $request->total;
$client = new Client(); $outletId = $request->outletId;
$response = $client->request('POST', $url, ['form_params' => $data, 'http_errors' => false]); $orderid = $request->orderid ?? '';
$res = Coupon::Redemption($this->user, $redemptionCode, $total, $outletId, $orderid);
$body = $response->getBody();
$content = $body->getContents(); if (is_string($res)) {
$result = json_decode($content, true); return $this->error($res);
}
return $result;
} return $this->success('核销成功');
}
public function jiami($ret)
{ public function http($data, $url)
$jsonData = json_encode($ret); //数据JSON化 {
$ascdata = $this->keyasc($jsonData); //加密 $client = new Client();
$addcode = sprintf("%08d", mt_rand(0, 99999999)); //随机code 验证签名用 $response = $client->request('POST', $url, ['form_params' => $data, 'http_errors' => false]);
$sign = $this->keysign($ascdata, $addcode);
$body = $response->getBody();
$data = [ $content = $body->getContents();
'server_id' => $this->user->server_id, $result = json_decode($content, true);
'key' => $this->user->server_key,
'addcode' => $addcode, return $result;
'sign' => $sign, }
'data' => $ascdata,
]; public function jiami($ret)
{
return $data; $jsonData = json_encode($ret); //数据JSON化
} $ascdata = $this->keyasc($jsonData); //加密
$addcode = sprintf("%08d", mt_rand(0, 99999999)); //随机code 验证签名用
/** $sign = $this->keysign($ascdata, $addcode);
* 解密
* @param <type> $value $data = [
* @return <type> 'server_id' => $this->user->server_id,
*/ 'key' => $this->user->server_key,
public function jiemi($value) 'addcode' => $addcode,
{ 'sign' => $sign,
$iv = substr($this->user->des3key, 0, 8); 'data' => $ascdata,
$ret = openssl_decrypt($value, 'DES - EDE3 - CBC', $this->user->des3key, 0, $iv); ];
if (false === $ret) {
return openssl_error_string(); return $data;
} }
return $ret; /**
} * 解密
* @param <type> $value
function getMemoryUsage($precision = 2) * @return <type>
{ */
$size = memory_get_usage(true); public function jiemi($value)
{
$unit = ['b', 'kb', 'mb', 'gb', 'tb', 'pb']; $iv = substr($this->user->des3key, 0, 8);
$ret = openssl_decrypt($value, 'DES - EDE3 - CBC', $this->user->des3key, 0, $iv);
return round($size / pow(1024, ($i = floor(log($size, 1024)))), $precision) . ' ' . $unit[$i]; if (false === $ret) {
} return openssl_error_string();
}
function getElapsedTime(int $decimals = 2)
{ return $ret;
return number_format(microtime(true) - request()->server('REQUEST_TIME_FLOAT'), $decimals) . ' s'; }
}
function getMemoryUsage($precision = 2)
} {
$size = memory_get_usage(true);
$unit = ['b', 'kb', 'mb', 'gb', 'tb', 'pb'];
return round($size / pow(1024, ($i = floor(log($size, 1024)))), $precision) . ' ' . $unit[$i];
}
function getElapsedTime(int $decimals = 2)
{
return number_format(microtime(true) - request()->server('REQUEST_TIME_FLOAT'), $decimals) . ' s';
}
}

View File

@@ -3,7 +3,6 @@
namespace App\Merchant\Controllers\Coupon; namespace App\Merchant\Controllers\Coupon;
use App\Merchant\Controllers\Controller; use App\Merchant\Controllers\Controller;
use App\Merchant\Exporters\CouponExport;
use App\Models\ActivityRule; use App\Models\ActivityRule;
use App\Models\Coupon; use App\Models\Coupon;
use Auth; use Auth;
@@ -245,7 +244,7 @@ class IndexController extends Controller
if (!$request->end) { if (!$request->end) {
$request->end = now()->toDateTimeString(); $request->end = now()->toDateTimeString();
} }
set_time_limit(1200); set_time_limit(0);
ini_set('memory_limit', '1024M'); ini_set('memory_limit', '1024M');
$filename = '卡券记录' . date('YmdHis') . '.csv'; $filename = '卡券记录' . date('YmdHis') . '.csv';
$response = function () use ($user, $request) { $response = function () use ($user, $request) {

View File

@@ -9,4 +9,18 @@ class ActivityCouponLog extends Model
'source' => 'array', 'source' => 'array',
]; ];
const TYPE_DESTROY = 'Destroy';
const TYPE_VERIFICATION = 'Verification';
const TYPES = [
self::TYPE_DESTROY => '作废',
self::TYPE_VERIFICATION => '核销',
];
const STATUS_SUCCESS = 1;
const STATUS_ERROR = 0;
const STATUS = [
self::STATUS_SUCCESS => '成功',
self::STATUS_ERROR => '失败',
];
} }