203 lines
8.1 KiB
PHP
203 lines
8.1 KiB
PHP
|
<?php
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Author: CRMEB Team <admin@crmeb.com>
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
namespace app\adminapi\controller\v1\application\routine;
|
|||
|
|
|||
|
use app\jobs\notice\SyncMessageJob;
|
|||
|
use app\services\message\SystemNotificationServices;
|
|||
|
use app\services\other\QrcodeServices;
|
|||
|
use app\services\system\attachment\SystemAttachmentServices;
|
|||
|
use crmeb\exceptions\AdminException;
|
|||
|
use think\exception\ValidateException;
|
|||
|
use think\facade\App;
|
|||
|
use app\adminapi\controller\AuthController;
|
|||
|
use crmeb\services\FileService;
|
|||
|
use app\services\other\UploadService;
|
|||
|
use crmeb\services\app\MiniProgramService;
|
|||
|
|
|||
|
/**
|
|||
|
* Class RoutineTemplate
|
|||
|
* @package app\adminapi\controller\v1\application\routine
|
|||
|
*/
|
|||
|
class RoutineTemplate extends AuthController
|
|||
|
{
|
|||
|
protected $cacheTag = '_system_wechat';
|
|||
|
|
|||
|
/**
|
|||
|
* 构造方法
|
|||
|
* WechatTemplate constructor.
|
|||
|
* @param App $app
|
|||
|
* @param SystemNotificationServices $services
|
|||
|
*/
|
|||
|
public function __construct(App $app, SystemNotificationServices $services)
|
|||
|
{
|
|||
|
parent::__construct($app);
|
|||
|
$this->services = $services;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 同步订阅消息
|
|||
|
* @return mixed
|
|||
|
* @throws \think\db\exception\DataNotFoundException
|
|||
|
* @throws \think\db\exception\DbException
|
|||
|
* @throws \think\db\exception\ModelNotFoundException
|
|||
|
*/
|
|||
|
public function syncSubscribe()
|
|||
|
{
|
|||
|
if (!sys_config('routine_appId') || !sys_config('routine_appsecret')) {
|
|||
|
throw new AdminException(400236);
|
|||
|
}
|
|||
|
|
|||
|
$list = MiniProgramService::getSubscribeTemplateList();
|
|||
|
foreach ($list->data as $v) {
|
|||
|
MiniProgramService::delSubscribeTemplate($v['priTmplId']);
|
|||
|
}
|
|||
|
|
|||
|
$tempKeys = $this->services->getTempKey('routine');
|
|||
|
foreach ($tempKeys as $key => $content) {
|
|||
|
SyncMessageJob::dispatch('SyncSubscribe', [$key, $content]);
|
|||
|
}
|
|||
|
|
|||
|
return app('json')->success(100038);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 下载小程序
|
|||
|
* @return mixed
|
|||
|
*/
|
|||
|
public function downloadTemp()
|
|||
|
{
|
|||
|
[$name, $is_live] = $this->request->postMore([
|
|||
|
['name', ''],
|
|||
|
['is_live', 0]
|
|||
|
], true);
|
|||
|
if (sys_config('routine_appId', '') == '') throw new AdminException(400236);
|
|||
|
try {
|
|||
|
@unlink(public_path() . 'statics/download/routine.zip');
|
|||
|
//拷贝源文件
|
|||
|
/** @var FileService $fileService */
|
|||
|
$fileService = app(FileService::class);
|
|||
|
$fileService->copyDir(public_path() . 'statics/mp_view', public_path() . 'statics/download');
|
|||
|
//替换appid和名称
|
|||
|
$this->updateConfigJson(sys_config('routine_appId'), $name != '' ? $name : sys_config('routine_name'));
|
|||
|
//是否开启直播
|
|||
|
if ($is_live == 0) $this->updateAppJson();
|
|||
|
//替换url
|
|||
|
$this->updateUrl('https://' . $_SERVER['HTTP_HOST']);
|
|||
|
//压缩文件
|
|||
|
$fileService->addZip(public_path() . 'statics/download', public_path() . 'statics/download/routine.zip', public_path() . 'statics/download');
|
|||
|
$data['url'] = sys_config('site_url') . '/statics/download/routine.zip';
|
|||
|
return app('json')->success($data);
|
|||
|
} catch (\Throwable $e) {
|
|||
|
throw new AdminException($e->getMessage());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 替换url
|
|||
|
* @param $url
|
|||
|
*/
|
|||
|
public function updateUrl($url)
|
|||
|
{
|
|||
|
$fileUrl = app()->getRootPath() . "public/statics/download/common/vendor.js";
|
|||
|
$string = file_get_contents($fileUrl); //加载配置文件
|
|||
|
$string = str_replace('https://demo.crmeb.com', $url, $string); // 正则查找然后替换
|
|||
|
$newFileUrl = app()->getRootPath() . "public/statics/download/common/vendor.js";
|
|||
|
@file_put_contents($newFileUrl, $string); // 写入配置文件
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 判断是否开启直播(弃用)
|
|||
|
* @param int $iszhibo
|
|||
|
*/
|
|||
|
public function updateAppJson()
|
|||
|
{
|
|||
|
$fileUrl = app()->getRootPath() . "public/statics/download/app.json";
|
|||
|
$string = file_get_contents($fileUrl); //加载配置文件
|
|||
|
$pats = '/,
|
|||
|
"plugins": \{
|
|||
|
"live-player-plugin": \{
|
|||
|
"version": "(.*?)",
|
|||
|
"provider": "(.*?)"
|
|||
|
}
|
|||
|
}/';
|
|||
|
$string = preg_replace($pats, '', $string); // 正则查找然后替换
|
|||
|
$newFileUrl = app()->getRootPath() . "public/statics/download/app.json";
|
|||
|
@file_put_contents($newFileUrl, $string); // 写入配置文件
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 替换appid
|
|||
|
* @param string $appid
|
|||
|
* @param string $projectanme
|
|||
|
*/
|
|||
|
public function updateConfigJson($appId = '', $projectName = '')
|
|||
|
{
|
|||
|
$fileUrl = app()->getRootPath() . "public/statics/download/project.config.json";
|
|||
|
$string = file_get_contents($fileUrl); //加载配置文件
|
|||
|
// 替换appid
|
|||
|
$appIdOld = '/"appid"(.*?),/';
|
|||
|
$appIdNew = '"appid"' . ': ' . '"' . $appId . '",';
|
|||
|
$string = preg_replace($appIdOld, $appIdNew, $string); // 正则查找然后替换
|
|||
|
// 替换小程序名称
|
|||
|
$projectNameOld = '/"projectname"(.*?),/';
|
|||
|
$projectNameNew = '"projectname"' . ': ' . '"' . $projectName . '",';
|
|||
|
$string = preg_replace($projectNameOld, $projectNameNew, $string); // 正则查找然后替换
|
|||
|
$newFileUrl = app()->getRootPath() . "public/statics/download/project.config.json";
|
|||
|
@file_put_contents($newFileUrl, $string); // 写入配置文件
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取小程序码
|
|||
|
* @return string
|
|||
|
* @throws \think\Exception
|
|||
|
* @throws \think\db\exception\DataNotFoundException
|
|||
|
* @throws \think\db\exception\DbException
|
|||
|
* @throws \think\db\exception\ModelNotFoundException
|
|||
|
*/
|
|||
|
public function getDownloadInfo()
|
|||
|
{
|
|||
|
$data['routine_name'] = sys_config('routine_name', '');
|
|||
|
if (sys_config('routine_appId') == '') {
|
|||
|
$data['code'] = '';
|
|||
|
} else {
|
|||
|
$name = $data['routine_name'] . '.jpg';
|
|||
|
/** @var SystemAttachmentServices $systemAttachmentModel */
|
|||
|
$systemAttachmentModel = app()->make(SystemAttachmentServices::class);
|
|||
|
$imageInfo = $systemAttachmentModel->getInfo(['name' => $name]);
|
|||
|
if (!$imageInfo) {
|
|||
|
/** @var QrcodeServices $qrcode */
|
|||
|
$qrcode = app()->make(QrcodeServices::class);
|
|||
|
$resForever = $qrcode->qrCodeForever(0, 'code');
|
|||
|
if ($resForever) {
|
|||
|
$resCode = MiniProgramService::appCodeUnlimitService($resForever->id, '', 280);
|
|||
|
$res = ['res' => $resCode, 'id' => $resForever->id];
|
|||
|
} else {
|
|||
|
$res = false;
|
|||
|
}
|
|||
|
if (!$res) throw new ValidateException(400237);
|
|||
|
$upload = UploadService::init(1);
|
|||
|
if ($upload->to('routine/code')->setAuthThumb(false)->stream((string)$res['res'], $name) === false) {
|
|||
|
return $upload->getError();
|
|||
|
}
|
|||
|
$imageInfo = $upload->getUploadInfo();
|
|||
|
$imageInfo['image_type'] = 1;
|
|||
|
$systemAttachmentModel->attachmentAdd($imageInfo['name'], $imageInfo['size'], $imageInfo['type'], $imageInfo['dir'], $imageInfo['thumb_path'], 1, $imageInfo['image_type'], $imageInfo['time'], 2);
|
|||
|
$qrcode->update($res['id'], ['status' => 1, 'time' => time(), 'qrcode_url' => $imageInfo['dir']]);
|
|||
|
$data['code'] = sys_config('site_url') . $imageInfo['dir'];
|
|||
|
} else $data['code'] = sys_config('site_url') . $imageInfo['att_dir'];
|
|||
|
}
|
|||
|
$data['appId'] = sys_config('routine_appId');
|
|||
|
$data['help'] = 'https://doc.crmeb.com/web/single/crmeb_v4/978';
|
|||
|
return app('json')->success($data);
|
|||
|
}
|
|||
|
}
|