Browse Source

Merge branch 'develop' of ssh://8.134.10.79:222/Leadfyy.co/hainan into develop

develop
lemon 4 years ago
parent
commit
1b845575af
  1. 34
      MySQL_change.sql
  2. 6
      app/Admin/Controllers/AgentController.php
  3. 3
      app/Admin/Controllers/MiniProgramDraftController.php
  4. 11
      app/Admin/Controllers/MiniProgramTemplateController.php
  5. 2
      app/Admin/Extensions/Grid/AuditAgent.php
  6. 2
      app/Admin/Extensions/Grid/AuditAgentProduct.php
  7. 2
      app/Admin/Extensions/Grid/AuditDemandProduct.php
  8. 2
      app/Admin/Extensions/Grid/AuditGuide.php
  9. 2
      app/Admin/Extensions/Grid/AuditProduct.php
  10. 56
      app/Admin/Extensions/Grid/PullTemplateList.php
  11. 89
      app/Admin/Extensions/Grid/UploadMiniProgram.php
  12. 2
      app/Admin/Repositories/MiniProgramDraft.php
  13. 2
      app/Admin/Repositories/MiniProgramList.php
  14. 60
      app/Admin/Repositories/MiniProgramTemplate.php
  15. 21
      app/Admin/Repositories/MiniProgramTemplateList.php
  16. 18
      app/AdminSettled/Controllers/AgentController.php
  17. 2
      app/AdminSupplier/Controllers/ProductController.php
  18. 11
      app/Models/MiniProgramTemplateList.php
  19. 11
      app/Models/MiniProgramUploadLog.php
  20. 3
      resources/lang/zh_CN/mini-program.php

34
MySQL_change.sql

@ -282,3 +282,37 @@ ALTER TABLE `suppliers`
ALTER TABLE `orders` ALTER TABLE `orders`
ADD COLUMN `pay_user_id` INT NOT NULL DEFAULT 0 COMMENT '支付用户的user_id(跳转到外部小程序支付时用到)' AFTER `agent_cloud_price`; ADD COLUMN `pay_user_id` INT NOT NULL DEFAULT 0 COMMENT '支付用户的user_id(跳转到外部小程序支付时用到)' AFTER `agent_cloud_price`;
# 18:47 2021/9/11
ALTER TABLE `agents`
CHANGE COLUMN `appid` `appid` VARCHAR(30) NULL COMMENT '微信AppID' COLLATE 'utf8_general_ci' AFTER `remember_token`,
CHANGE COLUMN `appsecret` `appsecret` CHAR(32) NULL COMMENT '微信AppSecret' COLLATE 'utf8_general_ci' AFTER `appid`,
CHANGE COLUMN `mchid` `mchid` VARCHAR(32) NULL COMMENT '微信支付mch_id' COLLATE 'utf8_general_ci' AFTER `appsecret`,
CHANGE COLUMN `mchkey` `mchkey` CHAR(32) NULL COMMENT '微信支付key' COLLATE 'utf8_general_ci' AFTER `mchid`;
CREATE TABLE `mini_program_template_lists` (
`template_id` INT(10) NOT NULL,
`user_version` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '版本号' COLLATE 'utf8_general_ci',
`user_desc` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '描述' COLLATE 'utf8_general_ci',
`source_miniprogram_appid` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '来源小程序' COLLATE 'utf8_general_ci',
`source_miniprogram` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模板小程序APPID' COLLATE 'utf8_general_ci',
`developer` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '上传者微信昵称' COLLATE 'utf8_general_ci',
`template_type` INT(10) NOT NULL DEFAULT '0' COMMENT '模板ID',
`create_time` INT(10) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`template_id`) USING BTREE
)
COMMENT='小程序模板列表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
CREATE TABLE `mini_program_upload_logs` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`agent_id` INT(10) NOT NULL COMMENT '代理商ID',
`appid` VARCHAR(50) NOT NULL COMMENT '代理商APPID' COLLATE 'utf8_general_ci',
`template_id` INT(10) NOT NULL COMMENT '小程序template_id',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE,
INDEX `agent_id` (`agent_id`) USING BTREE
)
COMMENT='注册小程序日志'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

6
app/Admin/Controllers/AgentController.php

@ -3,6 +3,7 @@
namespace App\Admin\Controllers; namespace App\Admin\Controllers;
use App\Admin\Extensions\Grid\AuditAgent; use App\Admin\Extensions\Grid\AuditAgent;
use App\Admin\Extensions\Grid\UploadMiniProgram;
use App\Admin\Repositories\Agent; use App\Admin\Repositories\Agent;
use App\Common\AgentType; use App\Common\AgentType;
use App\Common\UserStatus; use App\Common\UserStatus;
@ -51,6 +52,11 @@ class AgentController extends AdminController
$column->append((new AuditAgent(null, 1))->setKey($this->id))->append(' '); $column->append((new AuditAgent(null, 1))->setKey($this->id))->append(' ');
$column->append((new AuditAgent(null, 2))->setKey($this->id)); $column->append((new AuditAgent(null, 2))->setKey($this->id));
}) })
->if(fn() => $this->status == UserStatus::NORMAL)
->display('')
->then(function ($column) {
$column->append((new UploadMiniProgram())->setKey($this->id));
})
->else() ->else()
->using(UserStatus::array()) ->using(UserStatus::array())
->dot([ ->dot([

3
app/Admin/Controllers/MiniProgramDraftController.php

@ -19,6 +19,7 @@ class MiniProgramDraftController extends AdminController
return Grid::make(new MiniProgramDraft, function (Grid $grid) { return Grid::make(new MiniProgramDraft, function (Grid $grid) {
$grid->disableCreateButton(); $grid->disableCreateButton();
$grid->disableRowSelector(); $grid->disableRowSelector();
$grid->disableActions();
$grid->column('draft_id'); $grid->column('draft_id');
$grid->column('user_version'); $grid->column('user_version');
@ -27,6 +28,8 @@ class MiniProgramDraftController extends AdminController
$grid->column('source_miniprogram_appid'); $grid->column('source_miniprogram_appid');
$grid->column('developer'); $grid->column('developer');
$grid->column('create_time')->display(fn($v) => date('Y-m-d H:i:s', $v)); $grid->column('create_time')->display(fn($v) => date('Y-m-d H:i:s', $v));
$grid->column('op');
}); });
} }
} }

11
app/Admin/Controllers/MiniProgramTemplateController.php

@ -1,7 +1,8 @@
<?php <?php
namespace App\Admin\Controllers; namespace App\Admin\Controllers;
use App\Admin\Repositories\MiniProgramTemplate;
use App\Admin\Extensions\Grid\PullTemplateList;
use App\Admin\Repositories\MiniProgramTemplateList;
use Dcat\Admin\Grid; use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\AdminController; use Dcat\Admin\Http\Controllers\AdminController;
@ -16,9 +17,15 @@ class MiniProgramTemplateController extends AdminController
protected function grid(): Grid protected function grid(): Grid
{ {
return Grid::make(new MiniProgramTemplate, function (Grid $grid) {
return Grid::make(new MiniProgramTemplateList, function (Grid $grid) {
$grid->disableCreateButton(); $grid->disableCreateButton();
$grid->disableRowSelector(); $grid->disableRowSelector();
$grid->disableViewButton();
$grid->disableEditButton();
$grid->disableDeleteButton();
$grid->tools(new PullTemplateList);
$grid->column('template_id'); $grid->column('template_id');
$grid->column('template_type')->using([0 => '普通模板', 1 => '标准模板']); $grid->column('template_type')->using([0 => '普通模板', 1 => '标准模板']);

2
app/Admin/Extensions/Grid/AuditAgent.php

@ -13,7 +13,7 @@ use Illuminate\Support\Facades\DB;
/** /**
* 供应商审核 * 供应商审核
* Class AuditSupplier
* Class AuditAgent
* @package App\Admin\Extensions\Grid * @package App\Admin\Extensions\Grid
*/ */
class AuditAgent extends RowAction class AuditAgent extends RowAction

2
app/Admin/Extensions/Grid/AuditAgentProduct.php

@ -8,7 +8,7 @@ use Illuminate\Http\Request;
/** /**
* 供应商审核 * 供应商审核
* Class AuditSupplier
* Class AuditAgentProduct
* @package App\Admin\Extensions\Grid * @package App\Admin\Extensions\Grid
*/ */
class AuditAgentProduct extends RowAction class AuditAgentProduct extends RowAction

2
app/Admin/Extensions/Grid/AuditDemandProduct.php

@ -9,7 +9,7 @@ use Illuminate\Http\Request;
/** /**
* 供应商审核 * 供应商审核
* Class AuditSupplier
* Class AuditDemandProduct
* @package App\Admin\Extensions\Grid * @package App\Admin\Extensions\Grid
*/ */
class AuditDemandProduct extends RowAction class AuditDemandProduct extends RowAction

2
app/Admin/Extensions/Grid/AuditGuide.php

@ -10,7 +10,7 @@ use Illuminate\Support\Facades\DB;
/** /**
* 供应商审核 * 供应商审核
* Class AuditSupplier
* Class AuditGuide
* @package App\Admin\Extensions\Grid * @package App\Admin\Extensions\Grid
*/ */
class AuditGuide extends RowAction class AuditGuide extends RowAction

2
app/Admin/Extensions/Grid/AuditProduct.php

@ -8,7 +8,7 @@ use Illuminate\Http\Request;
/** /**
* 供应商审核 * 供应商审核
* Class AuditSupplier
* Class AuditProduct
* @package App\Admin\Extensions\Grid * @package App\Admin\Extensions\Grid
*/ */
class AuditProduct extends RowAction class AuditProduct extends RowAction

56
app/Admin/Extensions/Grid/PullTemplateList.php

@ -0,0 +1,56 @@
<?php
namespace App\Admin\Extensions\Grid;
use App\Models\AdminSetting;
use App\Models\MiniProgramTemplateList;
use Dcat\Admin\Grid\RowAction;
use EasyWeChat\Factory;
use Illuminate\Http\Request;
/**
* 上传(注册)小程序
* Class UploadMiniProgram
* @package App\Admin\Extensions\Grid
*/
class PullTemplateList extends RowAction
{
protected $title = '更新列表';
protected function html()
{
$this->appendHtmlAttribute('class', 'btn btn-primary');
$this->defaultHtmlAttribute('href', 'javascript:;');
return "<a {$this->formatHtmlAttributes()}>{$this->title}</a>";
}
public function handle(Request $request)
{
try {
$setting = AdminSetting::val(['service_appid', 'service_appsecret', 'service_token', 'service_aeskey']);
$config = [
'app_id' => $setting['service_appid'],
'secret' => $setting['service_appsecret'],
'token' => $setting['service_token'],
'aes_key' => $setting['service_aeskey'],
];
$openPlatform = Factory::openPlatform($config);
$codeTemplate = $openPlatform['code_template'];
$list = $codeTemplate->list();
MiniProgramTemplateList::insertOrIgnore($list['template_list']);
//删除不存在的数据
MiniProgramTemplateList::whereNotIn('template_id', array_column($list['template_list'], 'template_id'))->delete();
return $this->response()->success("操作成功")->refresh();
} catch (\Exception $e) {
return $this->response()->error($e->getMessage());
}
}
public function confirm()
{
return ['此操作将数据与腾讯服务器数据同步,是否继续?', ''];
}
}

89
app/Admin/Extensions/Grid/UploadMiniProgram.php

@ -0,0 +1,89 @@
<?php
namespace App\Admin\Extensions\Grid;
use App\Common\UserStatus;
use App\Models\AdminSetting;
use App\Models\Agent;
use App\Models\Category;
use App\Models\Channel;
use App\Models\Advertising;
use App\Models\MiniProgramTemplateList;
use App\Models\MiniProgramUploadLog;
use Dcat\Admin\Admin;
use Dcat\Admin\Grid\RowAction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
/**
* 上传(注册)小程序
* Class UploadMiniProgram
* @package App\Admin\Extensions\Grid
*/
class UploadMiniProgram extends RowAction
{
protected $title = '上传小程序';
protected function html()
{
$this->appendHtmlAttribute('class', 'btn btn-sm btn-primary');
$this->defaultHtmlAttribute('href', 'javascript:;');
return "<a {$this->formatHtmlAttributes()}>{$this->title}</a>";
}
public function handle(Request $request)
{
$template = MiniProgramTemplateList::orderBy('template_id', 'desc')->first();
if (MiniProgramUploadLog::query()->where(['agent_id' => $this->getKey(), 'template_id' => $template->template_id])->exists()) {
return $this->response()->error('该代理商已经上传过小程序,无需重复上传');
}
$agent = Agent::find($this->getKey());
if (empty($agent->appid)) {
return $this->response()->error('该代理商未注册过小程序,请先注册');
}
try {
$setting = AdminSetting::val(['service_appid', 'service_appsecret', 'service_token', 'service_aeskey']);
$config = [
'app_id' => $setting['service_appid'],
'secret' => $setting['service_appsecret'],
'token' => $setting['service_token'],
'aes_key' => $setting['service_aeskey'],
];
$openPlatform = \EasyWeChat\Factory::openPlatform($config);
$refreshToken = $openPlatform->getAuthorizer($agent->appid)['authorization_info']['authorizer_refresh_token'] ?? null;
if (!$refreshToken) {
return $this->response()->error('获取refresh_token失败');
}
$code = $openPlatform->miniProgram($agent->appid, $refreshToken)['code'];
$templateId = $template->template_id;
$extJson = json_encode(['extAppid' => $agent->appid]);
$version = $template->user_version;
$description = $agent->company_name;
$commit = $code->commit($templateId, $extJson, $version, $description);
// $qrcode = $code->getQrCode();
if (isset($commit['errcode'], $commit['errmsg']) && $commit['errcode'] == 0 && $commit['errmsg'] == 'ok') {
MiniProgramUploadLog::insert([
'agent_id' => $agent->id,
'appid' => $agent->appid,
'template_id' => $templateId,
]);
return $this->response()->success("上传成功")->refresh();
} else {
throw new \Exception(join(',', $commit));
}
} catch (\Exception $e) {
return $this->response()->error($e->getMessage());
}
}
public function confirm()
{
return ['确定要上传小程序吗?', ''];
}
}

2
app/Admin/Repositories/MiniProgramDraft.php

@ -48,7 +48,7 @@ class MiniProgramDraft extends Repository
} else { } else {
$data['total'] = count($list['draft_list']); $data['total'] = count($list['draft_list']);
$data['subjects'] = $list['draft_list'] ?? []; $data['subjects'] = $list['draft_list'] ?? [];
Cache::put($cache_key, $list['draft_list'], 120);
Cache::put($cache_key, $list['draft_list'], 180);
} }
} }

2
app/Admin/Repositories/MiniProgramList.php

@ -48,7 +48,7 @@ class MiniProgramList extends Repository
} else { } else {
$data['total'] = count($list['list']); $data['total'] = count($list['list']);
$data['subjects'] = $list['list'] ?? []; $data['subjects'] = $list['list'] ?? [];
Cache::put($cache_key, $list['list'], 120);
Cache::put($cache_key, $list['list'], 180);
} }
} }

60
app/Admin/Repositories/MiniProgramTemplate.php

@ -1,60 +0,0 @@
<?php
namespace App\Admin\Repositories;
use App\Models\AdminSetting;
use Dcat\Admin\Grid;
use Dcat\Admin\Repositories\Repository;
use EasyWeChat\Factory;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\Cache;
/**
* 小程序模板
* Class MiniProgramDraft
* @package App\Admin\Repositories
*/
class MiniProgramTemplate extends Repository
{
protected $keyName = 'template_id';
/**
* 查询表格数据
*
* @param Grid\Model $model
* @return LengthAwarePaginator
* @throws GuzzleException
*/
public function get(Grid\Model $model): LengthAwarePaginator
{
$setting = AdminSetting::val(['service_appid', 'service_appsecret', 'service_token', 'service_aeskey']);
$config = [
'app_id' => $setting['service_appid'],
'secret' => $setting['service_appsecret'],
'token' => $setting['service_token'],
'aes_key' => $setting['service_aeskey'],
];
$cache_key = 'mini_program:template_list';
if ($data['subjects'] = Cache::get($cache_key)) {
$data['total'] = count($data['subjects']);
} else {
$openPlatform = Factory::openPlatform($config);
$codeTemplate = $openPlatform['code_template'];
if (empty($codeTemplate) || (!$list = $codeTemplate->list())) {
$data['total'] = 0;
$data['subjects'] = [];
} else {
$data['total'] = count($list['template_list']);
$data['subjects'] = $list['template_list'] ?? [];
Cache::put($cache_key, $list['template_list'], 120);
}
}
return $model->makePaginator(
$data['total'] ?? 0, // 传入总记录数
$data['subjects'] ?? [] // 传入数据二维数组
);
}
}

21
app/Admin/Repositories/MiniProgramTemplateList.php

@ -0,0 +1,21 @@
<?php
namespace App\Admin\Repositories;
use App\Models\MiniProgramTemplateList as Model;
use Dcat\Admin\Repositories\EloquentRepository;
/**
* 小程序模板
* Class MiniProgramDraft
* @package App\Admin\Repositories
*/
class MiniProgramTemplateList extends EloquentRepository
{
protected $eloquentClass = Model::class;
public function __construct()
{
parent::__construct();
$this->setKeyName('template_id');
}
}

18
app/AdminSettled/Controllers/AgentController.php

@ -59,12 +59,12 @@ class AgentController extends AdminController
$form->disableDeleteButton(); $form->disableDeleteButton();
$form->text('username')->required(); $form->text('username')->required();
$form->password('password')->required();
$form->password('password')->minLength(6, '密码最少6个字符')->required();
$form->text('name')->required(); $form->text('name')->required();
$form->text('appid')->placeholder('可以先不填,审核通过之后再设置');
$form->text('appsecret')->placeholder('可以先不填,审核通过之后再设置');
$form->text('mchid')->placeholder('可以先不填,审核通过之后再设置');
$form->text('mchkey')->placeholder('可以先不填,审核通过之后再设置');
// $form->text('appid')->placeholder('可以先不填,审核通过之后再设置');
// $form->text('appsecret')->placeholder('可以先不填,审核通过之后再设置');
// $form->text('mchid')->placeholder('可以先不填,审核通过之后再设置');
// $form->text('mchkey')->placeholder('可以先不填,审核通过之后再设置');
$form->radio('type') $form->radio('type')
->options(AgentType::array()) ->options(AgentType::array())
->default(AgentType::OPERATOR) ->default(AgentType::OPERATOR)
@ -106,10 +106,10 @@ class AgentController extends AdminController
//处理特殊字段 //处理特殊字段
$form->status = UserStatus::UNAUDITED; $form->status = UserStatus::UNAUDITED;
$form->rate = 0.05; $form->rate = 0.05;
$form->appid = $form->appid ?: '暂未填写';
$form->appsecret = $form->appsecret ?: '暂未填写';
$form->mchid = $form->appid ?: '暂未填写';
$form->mchkey = $form->appid ?: '暂未填写';
// $form->appid = $form->appid ?: '暂未填写';
// $form->appsecret = $form->appsecret ?: '暂未填写';
// $form->mchid = $form->appid ?: '暂未填写';
// $form->mchkey = $form->appid ?: '暂未填写';
$form->type = in_array($form->type, UserStatus::array()) ? $form->type : AgentType::OPERATOR; $form->type = in_array($form->type, UserStatus::array()) ? $form->type : AgentType::OPERATOR;
})->saved(function (Form $form) { })->saved(function (Form $form) {
return $form->response()->success('操作成功,请等待管理员审核'); return $form->response()->success('操作成功,请等待管理员审核');

2
app/AdminSupplier/Controllers/ProductController.php

@ -241,7 +241,7 @@ class ProductController extends AdminController
} }
DB::commit(); DB::commit();
return $form->response()->success('更新成功!')->script('history.go(-1)');
return $form->response()->success('更新成功!')->redirect('product/list');
} catch (\Exception $exception) { } catch (\Exception $exception) {
DB::rollBack(); DB::rollBack();
return $form->response()->error($exception->getMessage()); return $form->response()->error($exception->getMessage());

11
app/Models/MiniProgramTemplateList.php

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class MiniProgramTemplateList extends Model
{
use HasFactory;
}

11
app/Models/MiniProgramUploadLog.php

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class MiniProgramUploadLog extends Model
{
use HasFactory;
}

3
resources/lang/zh_CN/mini-program.php

@ -15,11 +15,12 @@ return [
'user_version' => '版本号', 'user_version' => '版本号',
'user_desc' => '描述', 'user_desc' => '描述',
'source_miniprogram' => '来源小程序', 'source_miniprogram' => '来源小程序',
'source_miniprogram_appid' => '上传者微信号',
'source_miniprogram_appid' => '模板小程序APPID',
'developer' => '上传者微信昵称', 'developer' => '上传者微信昵称',
'create_time' => '创建时间', 'create_time' => '创建时间',
'template_type' => '模板类型', 'template_type' => '模板类型',
'authorizer_appid' => 'APPID', 'authorizer_appid' => 'APPID',
'op' => '操作',
], ],
'options' => [ 'options' => [
], ],

Loading…
Cancel
Save