Browse Source

商户入驻申请

master
Mike 5 years ago
committed by weigang
parent
commit
4a0c8b1511
  1. 29
      app/Constants/LogLabel.php
  2. 24
      app/Constants/SsdbKeysPrefix.php
  3. 19
      app/Controller/StoreController.php
  4. 622
      app/Libs/SimpleSSDB.php
  5. 16
      app/Listener/ValidatorFactoryResolvedListener.php
  6. 31
      app/Model/Store.php
  7. 61
      app/Request/StoreApplyEntryRequest.php
  8. 8
      app/Service/AttachmentService.php
  9. 92
      app/Service/StoreService.php
  10. 11
      app/Service/StoreServiceInterface.php
  11. 39
      app/TaskWorker/SSDBTask.php
  12. 3
      composer.json
  13. 1
      config/autoload/dependencies.php
  14. 1
      config/routes.php

29
app/Constants/LogLabel.php

@ -0,0 +1,29 @@
<?php
declare(strict_types=1);
namespace App\Constants;
use Hyperf\Constants\AbstractConstants;
use Hyperf\Constants\Annotation\Constants;
/**
* @Constants
*/
class LogLabel extends AbstractConstants
{
/**
* @Message("Ssdb Log Label")
*/
const SSDB_LOG = 'ssdb_log';
/**
* @Message("Device Speaker Log Label")
*/
const DEVICE_LOG = 'device_log';
/**
* @Message("Device Speaker Log Label")
*/
const COUPON_LOG = 'coupon_log';
}

24
app/Constants/SsdbKeysPrefix.php

@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace App\Constants;
use Hyperf\Constants\AbstractConstants;
use Hyperf\Constants\Annotation\Constants;
/**
* @Constants
*/
class SsdbKeysPrefix extends AbstractConstants
{
/**
* @Message("Params Token Key Prefix")
*/
const PARAMS_TOKEN = 'params_token_';
/**
* @Message("Store New User")
*/
const STORE_NEW_USER = 'store_new_user_';
}

19
app/Controller/StoreController.php

@ -4,17 +4,36 @@ declare(strict_types=1);
namespace App\Controller;
use App\Constants\ErrorCode;
use App\Request\StoreApplyEntryRequest;
use App\Service\StoreServiceInterface;
use Hyperf\Di\Annotation\Inject;
class StoreController extends BaseController
{
/**
* @Inject
* @var StoreServiceInterface
*/
protected $storeService;
/**
* 申请入驻
* 商户信息入驻+市场经理拉新记录
*/
public function applyEntry(StoreApplyEntryRequest $request)
{
$data = $request->validated();
$res = $this->storeService->entry($data);
if ($res !== true) {
return $this->result(ErrorCode::SAVE_FAILURE, $res, '申请失败,请稍后重试');
}
return $this->success('');
}
}

622
app/Libs/SimpleSSDB.php

@ -0,0 +1,622 @@
<?php
/**
* Copyright (c) 2012, ideawu
* All rights reserved.
* @author: ideawu
* @link: http://www.ideawu.com/
*
* SSDB PHP client SDK.
*/
namespace App\Libs;
use Exception;
class SSDBException extends Exception
{
}
class SSDBTimeoutException extends SSDBException
{
}
/**
* All methods(except *exists) returns false on error,
* so one should use Identical(if($ret === false)) to test the return value.
*/
class SimpleSSDB extends SSDB
{
function __construct($host, $port, $timeout_ms=2000){
parent::__construct($host, $port, $timeout_ms);
$this->easy();
}
}
class SSDB_Response
{
public $cmd;
public $code;
public $data = null;
public $message;
function __construct($code='ok', $data_or_message=null){
$this->code = $code;
if($code == 'ok'){
$this->data = $data_or_message;
}else{
$this->message = $data_or_message;
}
}
function __toString(){
if($this->code == 'ok'){
$s = $this->data === null? '' : json_encode($this->data);
}else{
$s = $this->message;
}
return sprintf('%-13s %12s %s', $this->cmd, $this->code, $s);
}
function ok(){
return $this->code == 'ok';
}
function not_found(){
return $this->code == 'not_found';
}
}
// Depricated, use SimpleSSDB instead!
class SSDB
{
private $debug = false;
public $sock = null;
private $_closed = false;
private $recv_buf = '';
private $_easy = false;
public $last_resp = null;
function __construct($host, $port, $timeout_ms=2000){
$timeout_f = (float)$timeout_ms/1000;
$this->sock = @stream_socket_client("[$host]:$port", $errno, $errstr, $timeout_f);
if(!$this->sock){
throw new SSDBException("$errno: $errstr");
}
$timeout_sec = intval($timeout_ms/1000);
$timeout_usec = ($timeout_ms - $timeout_sec * 1000) * 1000;
@stream_set_timeout($this->sock, $timeout_sec, $timeout_usec);
if(function_exists('stream_set_chunk_size')){
@stream_set_chunk_size($this->sock, 1024 * 1024);
}
}
function set_timeout($timeout_ms){
$timeout_sec = intval($timeout_ms/1000);
$timeout_usec = ($timeout_ms - $timeout_sec * 1000) * 1000;
@stream_set_timeout($this->sock, $timeout_sec, $timeout_usec);
}
/**
* After this method invoked with yesno=true, all requesting methods
* will not return a SSDB_Response object.
* And some certain methods like get/zget will return false
* when response is not ok(not_found, etc)
*/
function easy(){
$this->_easy = true;
}
function close(){
if(!$this->_closed){
@fclose($this->sock);
$this->_closed = true;
$this->sock = null;
}
}
function closed(){
return $this->_closed;
}
private $batch_mode = false;
private $batch_cmds = array();
function batch(){
$this->batch_mode = true;
$this->batch_cmds = array();
return $this;
}
function multi(){
return $this->batch();
}
function exec(){
$ret = array();
foreach($this->batch_cmds as $op){
list($cmd, $params) = $op;
$this->send_req($cmd, $params);
}
foreach($this->batch_cmds as $op){
list($cmd, $params) = $op;
$resp = $this->recv_resp($cmd, $params);
$resp = $this->check_easy_resp($cmd, $resp);
$ret[] = $resp;
}
$this->batch_mode = false;
$this->batch_cmds = array();
return $ret;
}
function request(){
$args = func_get_args();
$cmd = array_shift($args);
return $this->__call($cmd, $args);
}
private $async_auth_password = null;
function auth($password){
$this->async_auth_password = $password;
return null;
}
function __call($cmd, $params=array()){
$cmd = strtolower($cmd);
if($this->async_auth_password !== null){
$pass = $this->async_auth_password;
$this->async_auth_password = null;
$auth = $this->__call('auth', array($pass));
if($auth !== true){
throw new Exception("Authentication failed");
}
}
if($this->batch_mode){
$this->batch_cmds[] = array($cmd, $params);
return $this;
}
try{
if($this->send_req($cmd, $params) === false){
$resp = new SSDB_Response('error', 'send error');
}else{
$resp = $this->recv_resp($cmd, $params);
}
}catch(SSDBException $e){
if($this->_easy){
throw $e;
}else{
$resp = new SSDB_Response('error', $e->getMessage());
}
}
if($resp->code == 'noauth'){
$msg = $resp->message;
throw new Exception($msg);
}
$resp = $this->check_easy_resp($cmd, $resp);
return $resp;
}
private function check_easy_resp($cmd, $resp){
$this->last_resp = $resp;
if($this->_easy){
if($resp->not_found()){
return NULL;
}else if(!$resp->ok() && !is_array($resp->data)){
return false;
}else{
return $resp->data;
}
}else{
$resp->cmd = $cmd;
return $resp;
}
}
function multi_set($kvs=array()){
$args = array();
foreach($kvs as $k=>$v){
$args[] = $k;
$args[] = $v;
}
return $this->__call(__FUNCTION__, $args);
}
function multi_hset($name, $kvs=array()){
$args = array($name);
foreach($kvs as $k=>$v){
$args[] = $k;
$args[] = $v;
}
return $this->__call(__FUNCTION__, $args);
}
function multi_zset($name, $kvs=array()){
$args = array($name);
foreach($kvs as $k=>$v){
$args[] = $k;
$args[] = $v;
}
return $this->__call(__FUNCTION__, $args);
}
function incr($key, $val=1){
$args = func_get_args();
return $this->__call(__FUNCTION__, $args);
}
function decr($key, $val=1){
$args = func_get_args();
return $this->__call(__FUNCTION__, $args);
}
function zincr($name, $key, $score=1){
$args = func_get_args();
return $this->__call(__FUNCTION__, $args);
}
function zdecr($name, $key, $score=1){
$args = func_get_args();
return $this->__call(__FUNCTION__, $args);
}
function zadd($key, $score, $value){
$args = array($key, $value, $score);
return $this->__call('zset', $args);
}
function zRevRank($name, $key){
$args = func_get_args();
return $this->__call("zrrank", $args);
}
function zRevRange($name, $offset, $limit){
$args = func_get_args();
return $this->__call("zrrange", $args);
}
function hincr($name, $key, $val=1){
$args = func_get_args();
return $this->__call(__FUNCTION__, $args);
}
function hdecr($name, $key, $val=1){
$args = func_get_args();
return $this->__call(__FUNCTION__, $args);
}
private function send_req($cmd, $params){
$req = array($cmd);
foreach($params as $p){
if(is_array($p)){
$req = array_merge($req, $p);
}else{
$req[] = $p;
}
}
return $this->send($req);
}
private function recv_resp($cmd, $params){
$resp = $this->recv();
if($resp === false){
return new SSDB_Response('error', 'Unknown error');
}else if(!$resp){
return new SSDB_Response('disconnected', 'Connection closed');
}
if($resp[0] == 'noauth'){
$errmsg = isset($resp[1])? $resp[1] : '';
return new SSDB_Response($resp[0], $errmsg);
}
switch($cmd){
case 'dbsize':
case 'ping':
case 'qset':
case 'getbit':
case 'setbit':
case 'countbit':
case 'strlen':
case 'set':
case 'setx':
case 'setnx':
case 'zset':
case 'hset':
case 'qpush':
case 'qpush_front':
case 'qpush_back':
case 'qtrim_front':
case 'qtrim_back':
case 'del':
case 'zdel':
case 'hdel':
case 'hsize':
case 'zsize':
case 'qsize':
case 'hclear':
case 'zclear':
case 'qclear':
case 'multi_set':
case 'multi_del':
case 'multi_hset':
case 'multi_hdel':
case 'multi_zset':
case 'multi_zdel':
case 'incr':
case 'decr':
case 'zincr':
case 'zdecr':
case 'hincr':
case 'hdecr':
case 'zget':
case 'zrank':
case 'zrrank':
case 'zcount':
case 'zsum':
case 'zremrangebyrank':
case 'zremrangebyscore':
case 'ttl':
case 'expire':
if($resp[0] == 'ok'){
$val = isset($resp[1])? intval($resp[1]) : 0;
return new SSDB_Response($resp[0], $val);
}else{
$errmsg = isset($resp[1])? $resp[1] : '';
return new SSDB_Response($resp[0], $errmsg);
}
case 'zavg':
if($resp[0] == 'ok'){
$val = isset($resp[1])? floatval($resp[1]) : (float)0;
return new SSDB_Response($resp[0], $val);
}else{
$errmsg = isset($resp[1])? $resp[1] : '';
return new SSDB_Response($resp[0], $errmsg);
}
case 'get':
case 'substr':
case 'getset':
case 'hget':
case 'qget':
case 'qfront':
case 'qback':
if($resp[0] == 'ok'){
if(count($resp) == 2){
return new SSDB_Response('ok', $resp[1]);
}else{
return new SSDB_Response('server_error', 'Invalid response');
}
}else{
$errmsg = isset($resp[1])? $resp[1] : '';
return new SSDB_Response($resp[0], $errmsg);
}
break;
case 'qpop':
case 'qpop_front':
case 'qpop_back':
if($resp[0] == 'ok'){
$size = 1;
if(isset($params[1])){
$size = intval($params[1]);
}
if($size <= 1){
if(count($resp) == 2){
return new SSDB_Response('ok', $resp[1]);
}else{
return new SSDB_Response('server_error', 'Invalid response');
}
}else{
$data = array_slice($resp, 1);
return new SSDB_Response('ok', $data);
}
}else{
$errmsg = isset($resp[1])? $resp[1] : '';
return new SSDB_Response($resp[0], $errmsg);
}
break;
case 'keys':
case 'zkeys':
case 'hkeys':
case 'hlist':
case 'zlist':
case 'qslice':
if($resp[0] == 'ok'){
$data = array();
if($resp[0] == 'ok'){
$data = array_slice($resp, 1);
}
return new SSDB_Response($resp[0], $data);
}else{
$errmsg = isset($resp[1])? $resp[1] : '';
return new SSDB_Response($resp[0], $errmsg);
}
case 'auth':
case 'exists':
case 'hexists':
case 'zexists':
if($resp[0] == 'ok'){
if(count($resp) == 2){
return new SSDB_Response('ok', (bool)$resp[1]);
}else{
return new SSDB_Response('server_error', 'Invalid response');
}
}else{
$errmsg = isset($resp[1])? $resp[1] : '';
return new SSDB_Response($resp[0], $errmsg);
}
break;
case 'multi_exists':
case 'multi_hexists':
case 'multi_zexists':
if($resp[0] == 'ok'){
if(count($resp) % 2 == 1){
$data = array();
for($i=1; $i<count($resp); $i+=2){
$data[$resp[$i]] = (bool)$resp[$i + 1];
}
return new SSDB_Response('ok', $data);
}else{
return new SSDB_Response('server_error', 'Invalid response');
}
}else{
$errmsg = isset($resp[1])? $resp[1] : '';
return new SSDB_Response($resp[0], $errmsg);
}
break;
case 'scan':
case 'rscan':
case 'zscan':
case 'zrscan':
case 'zrange':
case 'zrrange':
case 'hscan':
case 'hrscan':
case 'hgetall':
case 'multi_hsize':
case 'multi_zsize':
case 'multi_get':
case 'multi_hget':
case 'multi_zget':
case 'zpop_front':
case 'zpop_back':
if($resp[0] == 'ok'){
if(count($resp) % 2 == 1){
$data = array();
for($i=1; $i<count($resp); $i+=2){
if($cmd[0] == 'z'){
$data[$resp[$i]] = intval($resp[$i + 1]);
}else{
$data[$resp[$i]] = $resp[$i + 1];
}
}
return new SSDB_Response('ok', $data);
}else{
return new SSDB_Response('server_error', 'Invalid response');
}
}else{
$errmsg = isset($resp[1])? $resp[1] : '';
return new SSDB_Response($resp[0], $errmsg);
}
break;
default:
return new SSDB_Response($resp[0], array_slice($resp, 1));
}
return new SSDB_Response('error', 'Unknown command: $cmd');
}
function send($data){
$ps = array();
foreach($data as $p){
$ps[] = strlen($p);
$ps[] = $p;
}
$s = join("\n", $ps) . "\n\n";
if($this->debug){
echo '> ' . str_replace(array("\r", "\n"), array('\r', '\n'), $s) . "\n";
}
try{
while(true){
$ret = @fwrite($this->sock, $s);
if($ret === false || $ret === 0){
$this->close();
throw new SSDBException('Connection lost');
}
$s = substr($s, $ret);
if(strlen($s) == 0){
break;
}
@fflush($this->sock);
}
}catch(Exception $e){
$this->close();
throw new SSDBException($e->getMessage());
}
return $ret;
}
function recv(){
$this->step = self::STEP_SIZE;
while(true){
$ret = $this->parse();
if($ret === null){
try{
$data = @fread($this->sock, 1024 * 1024);
if($this->debug){
echo '< ' . str_replace(array("\r", "\n"), array('\r', '\n'), $data) . "\n";
}
}catch(Exception $e){
$data = '';
}
if($data === false || $data === ''){
if(feof($this->sock)){
$this->close();
throw new SSDBException('Connection lost');
}else{
throw new SSDBTimeoutException('Connection timeout');
}
}
$this->recv_buf .= $data;
# echo "read " . strlen($data) . " total: " . strlen($this->recv_buf) . "\n";
}else{
return $ret;
}
}
}
const STEP_SIZE = 0;
const STEP_DATA = 1;
public $resp = array();
public $step;
public $block_size;
private function parse(){
$spos = 0;
$epos = 0;
$buf_size = strlen($this->recv_buf);
// performance issue for large reponse
//$this->recv_buf = ltrim($this->recv_buf);
while(true){
$spos = $epos;
if($this->step === self::STEP_SIZE){
$epos = strpos($this->recv_buf, "\n", $spos);
if($epos === false){
break;
}
$epos += 1;
$line = substr($this->recv_buf, $spos, $epos - $spos);
$spos = $epos;
$line = trim($line);
if(strlen($line) == 0){ // head end
$this->recv_buf = substr($this->recv_buf, $spos);
$ret = $this->resp;
$this->resp = array();
return $ret;
}
$this->block_size = intval($line);
$this->step = self::STEP_DATA;
}
if($this->step === self::STEP_DATA){
$epos = $spos + $this->block_size;
if($epos <= $buf_size){
$n = strpos($this->recv_buf, "\n", $epos);
if($n !== false){
$data = substr($this->recv_buf, $spos, $epos - $spos);
$this->resp[] = $data;
$epos = $n + 1;
$this->step = self::STEP_SIZE;
continue;
}
}
break;
}
}
// packet not ready
if($spos > 0){
$this->recv_buf = substr($this->recv_buf, $spos);
}
return null;
}
}

16
app/Listener/ValidatorFactoryResolvedListener.php

@ -110,5 +110,21 @@ class ValidatorFactoryResolvedListener implements ListenerInterface
});
// 注册了 file_different 验证器规则
// file_different:field 两文件字段不能是同一个文件
$validatorFactory->extend('file_different', function ($attribute, $value, $parameters, $validator) {
// 获取比较字段参数值
$anotherFile = $validator->getData()[$parameters[0]];
return md5_file($value->getRealPath()) !== md5_file($anotherFile->getRealPath());
});
// 注册了 tel 验证器规则
// 手机号码验证器
$validatorFactory->extend('tel', function ($attribute, $value, $parameters, $validator) {
return boolval(preg_match('/^1[3-9]\d{9}$/', $value));
});
}
}

31
app/Model/Store.php

@ -18,11 +18,40 @@ class Store extends Model
*
* @var array
*/
protected $fillable = [];
protected $fillable = [
'name',
'market_id',
'md_type',
'address',
'coordinates',
'details',
'link_name',
'link_tel',
'logo',
'fm_img',
'zm_img',
'yyzz',
'user_id',
'sq_id',
'admin_id',
'rz_time',
'mm_user_id',
'sq_time',
'rzdq_time',
'state',
'is_open',
'money',
'code',
'uniacid',
'zf_state',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [];
public $timestamps=false;
}

61
app/Request/StoreApplyEntryRequest.php

@ -23,20 +23,61 @@ class StoreApplyEntryRequest extends FormRequest
{
return [
'name' => 'required|nonempty',
'market_id' => 'required|nonempty',
'md_type' => 'required|nonempty',
'market_id' => 'required|nonempty|integer',
'md_type' => 'required|nonempty|integer',
'address' => 'required|nonempty',
'coordinates' => 'required|nonempty',
'details' => 'required|nonempty',
'link_name' => 'required|nonempty',
'link_tel' => 'required|nonempty',
'tel' => 'required|nonempty',
'logo' => 'required|nonempty',
'fm_img' => 'required|nonempty',
'zm_img' => 'required|nonempty',
'yyzz' => 'required|nonempty',
'user_id' => 'required|nonempty',
'mm_user_id' => 'required|nonempty',
'link_tel' => 'required|nonempty|tel',
'logo' => 'required|nonempty|file|image',
'fm_img' => 'required|nonempty|file|image|file_different:zm_img',
'zm_img' => 'required|nonempty|file|image|file_different:fm_img',
'yyzz' => 'required|nonempty|file|image',
'user_id' => 'required|nonempty|integer',
'rz_time' => 'required|nonempty|integer',
'mm_user_id' => 'nonempty|integer',
'id' => 'nonempty|integer',
];
}
public function messages(): array
{
return [
'*.nonempty' => ':attribute参数异常',
'logo.image' => ':attribute不是正常的图片',
'logo.*' => ':attribute未选择',
'fm_img.image' => ':attribute不是正常的图片',
'fm_img.file_different' => '身份证正反面不能相同',
'fm_img.*' => ':attribute未选择',
'zm_img.image' => ':attribute不是正常的图片',
'zm_img.file_different' => '身份证正反面不能相同',
'zm_img.*' => ':attribute未选择',
'yyzz.image' => ':attribute不是正常的图片',
'yyzz.*' => ':attribute未选择',
'link_tel.tel' => ':attribute格式不正确',
];
}
public function attributes(): array
{
return [
'name' => '商户名',
'market_id' => '市场ID',
'md_type' => '门店类型',
'address' => '门店地址',
'coordinates' => '门店经纬度',
'details' => '门店简介',
'link_name' => '联系人姓名',
'link_tel' => '联系人电话',
'logo' => '商户LOGO',
'fm_img' => '商户身份证反面',
'zm_img' => '商户身份证正面',
'yyzz' => '商户营业执照',
'user_id' => '申请用户ID',
'rz_time' => '入驻天数',
'mm_user_id' => '市场经理用户ID',
'id' => '门店ID',
];
}
}

8
app/Service/AttachmentService.php

@ -21,6 +21,10 @@ class AttachmentService implements AttachmentServiceInterface
$path = $this->getBasePath($path, $attachmenttype);
$fileName = $path . '/' . $fileHash . '.' . $file->getExtension();
if ($filesystem->has($fileName)) {
return $fileName;
}
$stream = fopen($fileRealPath, 'r+');
$filesystem->writeStream($fileName, $stream);
fclose($stream);
@ -45,6 +49,10 @@ class AttachmentService implements AttachmentServiceInterface
$path = $this->getBasePath($path);
$fileName = $path . '/' . $fileHash . '.' . $result[2];
if ($filesystem->has($fileName)) {
return $fileName;
}
$filesystem->write($fileName, $contents);
return $fileName;

92
app/Service/StoreService.php

@ -0,0 +1,92 @@
<?php
namespace App\Service;
use App\Constants\LogLabel;
use App\Constants\SsdbKeysPrefix;
use App\Model\Store;
use App\TaskWorker\SSDBTask;
use Hyperf\DbConnection\Db;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Utils\ApplicationContext;
use League\Flysystem\Filesystem;
class StoreService implements StoreServiceInterface
{
/**
* @Inject
* @var AttachmentServiceInterface
*/
protected $attachmentService;
/**
* @Inject
* @var Filesystem
*/
protected $filesystem;
public function entry($data)
{
Db::beginTransaction();
try {
// 文件上传
$logo = $this->attachmentService->formUpload($data['logo'], 'storelogo', $this->filesystem);
$fm_img = $this->attachmentService->formUpload($data['fm_img'], 'idcard', $this->filesystem);
$zm_img = $this->attachmentService->formUpload($data['zm_img'], 'idcard', $this->filesystem);
$yyzz = $this->attachmentService->formUpload($data['yyzz'], 'storelicense', $this->filesystem);
// 商户信息入库(需审核)
$store = Store::query()->updateOrCreate(
['id' => $data['id']],
[
'name' => $data['name'],
'market_id' => $data['market_id'],
'md_type' => $data['md_type'],
'address' => $data['address'],
'coordinates' => $data['coordinates'],
'details' => $data['details'],
'link_name' => $data['link_name'],
'link_tel' => $data['link_tel'],
'tel' => $data['link_tel'],
'logo' => $logo,
'fm_img' => $fm_img,
'zm_img' => $zm_img,
'yyzz' => $yyzz,
'user_id' => $data['user_id'],
'sq_id' => $data['user_id'],
'admin_id' => $data['user_id'],
'rz_time' => $data['rz_time'],
'mm_user_id' => $data['mm_user_id'],
'sq_time' => date('Y-m-d H:i:s'),
'rzdq_time' => date('Y-m-d H:i:s', time() + 1000 * 24 * 3600),
'state' => 1,
'is_open' => 1,
'money' => 0,
'code' => time() . rand(1000, 9999) . $data['user_id'],
'uniacid' => 2,
'zf_state' => 2,
]
);
Db::commit();
// 商户新用户等统计信息入SSDB
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
if (!$ssdb->exec('hexists', SsdbKeysPrefix::STORE_NEW_USER.$store->id, 'count')) {
if(false === $ssdb->exec('hset', SsdbKeysPrefix::STORE_NEW_USER.$store->id, ['count', 0])) {
$this->log->event(
LogLabel::SSDB_LOG,
['method' => 'hset-'.SsdbKeysPrefix::STORE_NEW_USER.$store->id, 'key' => SsdbKeysPrefix::STORE_NEW_USER.$store->id]
);
}
}
return true;
} catch (\Exception $e) {
Db::rollBack();
return $e->getMessage();
}
}
}

11
app/Service/StoreServiceInterface.php

@ -0,0 +1,11 @@
<?php
namespace App\Service;
interface StoreServiceInterface
{
/**
* 入驻
*/
public function entry($data);
}

39
app/TaskWorker/SSDBTask.php

@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
namespace App\TaskWorker;
use Hyperf\Utils\ApplicationContext;
use App\Libs\SimpleSSDB;
use Hyperf\Task\Annotation\Task;
class SSDBTask
{
/**
* @var SimpleSSDB
*/
public $ss = null;
/**
* @Task
*/
public function exec($method,...$args)
{
$result = $this->client()->__call($method,$args);
return $result;
}
protected function client(){
if ($this->ss instanceof SimpleSSDB) {
return $this->ss;
}
$this->ss = new SimpleSSDB(env('SSDB_HOST'), env('SSDB_PORT'));
$this->ss->auth(env('SSDB_AUTH'));
return $this->ss;
}
}

3
composer.json

@ -30,7 +30,8 @@
"hyperf/filesystem": "^2.0",
"xxtime/flysystem-aliyun-oss": "^1.5",
"hyperf/validation": "^2.0",
"hyperf/paginator": "^2.0"
"hyperf/paginator": "^2.0",
"hyperf/task": "^2.0"
},
"require-dev": {
"swoole/ide-helper": "^4.5",

1
config/autoload/dependencies.php

@ -14,4 +14,5 @@ return [
\App\Service\AttachmentServiceInterface::class => \App\Service\AttachmentService::class,
\App\Service\ParamsTokenServiceInterface::class => \App\Service\ParamsTokenSsdbService::class,
\App\Commons\Log::class => \App\Commons\Log::class,
\App\Service\StoreServiceInterface::class => \App\Service\StoreService::class,
];

1
config/routes.php

@ -27,4 +27,5 @@ Router::addGroup('/v1/',function (){
Router::post('Attachment/uploadImage', 'App\Controller\AttachmentController@uploadImage');
Router::post('Attachment/uploadImageByBase64', 'App\Controller\AttachmentController@uploadImageByBase64');
Router::post('Attachment/upload', 'App\Controller\AttachmentController@upload');
});
Loading…
Cancel
Save