mirror of
https://gitee.com/niucloud-team/niucloud-admin.git
synced 2026-03-17 11:13:43 +00:00
up
This commit is contained in:
parent
eef89d9ef1
commit
3b398f9cfc
@ -45,7 +45,7 @@ class ExceptionHandle extends Handle
|
|||||||
{
|
{
|
||||||
// 使用内置的方式记录异常日志
|
// 使用内置的方式记录异常日志
|
||||||
// parent::report($exception);
|
// parent::report($exception);
|
||||||
if (!$this->isIgnoreReport($e)) {
|
if (!$this->isIgnoreReport($e) && env('app_debug', false)) {
|
||||||
$data = [
|
$data = [
|
||||||
'file' => $e->getFile(),
|
'file' => $e->getFile(),
|
||||||
'line' => $e->getLine(),
|
'line' => $e->getLine(),
|
||||||
|
|||||||
@ -20,6 +20,11 @@ use think\Response;
|
|||||||
|
|
||||||
class Addon extends BaseAdminController
|
class Addon extends BaseAdminController
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
return success((new CoreAddonService())->getInitList());
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 获取已下载插架
|
* 获取已下载插架
|
||||||
*/
|
*/
|
||||||
@ -158,17 +163,15 @@ class Addon extends BaseAdminController
|
|||||||
public function getInstallList(){
|
public function getInstallList(){
|
||||||
return success(data:(new AddonService())->getInstallList());
|
return success(data:(new AddonService())->getInstallList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询已安装有效应用
|
* 查询已安装有效应用
|
||||||
*/
|
*/
|
||||||
public function getAddonList()
|
public function getAddonList()
|
||||||
{
|
{
|
||||||
return success((new CoreAddonService())->getAddonMemuList());
|
return success((new CoreAddonService())->getInstallAddonList());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAddonByKey($key){
|
|
||||||
return success((new AddonService())->getInfoByKey($key));
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* 插件类型
|
* 插件类型
|
||||||
* @return Response
|
* @return Response
|
||||||
@ -190,4 +193,25 @@ class Addon extends BaseAdminController
|
|||||||
{
|
{
|
||||||
return success(data:(new AddonService())->getShowAppTools());
|
return success(data:(new AddonService())->getShowAppTools());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取首页应用标签
|
||||||
|
*/
|
||||||
|
public function getIndexAddonLabelList()
|
||||||
|
{
|
||||||
|
return success((new CoreAddonService())->getIndexAddonLabelList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取首页应用
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getIndexAddonList()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
['label_id', ''],
|
||||||
|
]);
|
||||||
|
return success((new CoreAddonService())->getIndexAddonList($data['label_id']));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,8 @@ class Upgrade extends BaseAdminController
|
|||||||
public function upgrade($addon = '')
|
public function upgrade($addon = '')
|
||||||
{
|
{
|
||||||
$data = $this->request->params([
|
$data = $this->request->params([
|
||||||
['is_need_backup', true]
|
['is_need_backup', true],
|
||||||
|
['is_need_cloudbuild', true],
|
||||||
]);
|
]);
|
||||||
return success(data: ( new UpgradeService() )->upgrade($addon, $data));
|
return success(data: ( new UpgradeService() )->upgrade($addon, $data));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,6 +66,8 @@ class Member extends BaseAdminController
|
|||||||
['member_label', []],
|
['member_label', []],
|
||||||
['sex', 0],
|
['sex', 0],
|
||||||
['birthday', ''],
|
['birthday', ''],
|
||||||
|
['remark', ''],
|
||||||
|
['id_card', ''],
|
||||||
]);
|
]);
|
||||||
$this->validate($data, 'app\validate\member\Member.add');
|
$this->validate($data, 'app\validate\member\Member.add');
|
||||||
$res = (new MemberService())->add($data);
|
$res = (new MemberService())->add($data);
|
||||||
@ -85,6 +87,7 @@ class Member extends BaseAdminController
|
|||||||
['field', $field],
|
['field', $field],
|
||||||
]);
|
]);
|
||||||
$data[$field] = $data['value'];
|
$data[$field] = $data['value'];
|
||||||
|
$data['member_id'] = $member_id;
|
||||||
$this->validate($data, 'app\validate\member\Member.modify');
|
$this->validate($data, 'app\validate\member\Member.modify');
|
||||||
(new MemberService())->modify($member_id, $field, $data['value']);
|
(new MemberService())->modify($member_id, $field, $data['value']);
|
||||||
return success('MODIFY_SUCCESS');
|
return success('MODIFY_SUCCESS');
|
||||||
|
|||||||
430
niucloud/app/adminapi/controller/notice/NiuSms.php
Normal file
430
niucloud/app/adminapi/controller/notice/NiuSms.php
Normal file
@ -0,0 +1,430 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\adminapi\controller\notice;
|
||||||
|
|
||||||
|
use app\service\admin\notice\NiuSmsService;
|
||||||
|
use core\base\BaseAdminController;
|
||||||
|
use think\Response;
|
||||||
|
|
||||||
|
class NiuSms extends BaseAdminController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 启用牛云短信
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function enable()
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['is_enable', 0],
|
||||||
|
]);
|
||||||
|
(new NiuSmsService())->enableNiuSms($params['is_enable']);
|
||||||
|
return success("SUCCESS");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取基础信息
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getConfig()
|
||||||
|
{
|
||||||
|
return success((new NiuSmsService())->getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSmsPackageList()
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['package_name', ''],
|
||||||
|
['sms_num', ''],
|
||||||
|
['price_start', ""],
|
||||||
|
['price_end', ""],
|
||||||
|
['original_price_start', ""],
|
||||||
|
['original_price_end', ""],
|
||||||
|
['time_start', ""],
|
||||||
|
['time_end', ""],
|
||||||
|
]);
|
||||||
|
$list = (new NiuSmsService())->packageList($params);
|
||||||
|
return success($list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******牛云*******/
|
||||||
|
public function sendMobileCode()
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['mobile', ''],
|
||||||
|
['captcha_key', ''],
|
||||||
|
['captcha_code', ''],
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->sendMobileCode($params);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取图形验证码
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function captcha()
|
||||||
|
{
|
||||||
|
$data = (new NiuSmsService())->captcha();
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册牛云短信子账号
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function registerAccount()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
['username', ""],
|
||||||
|
['company', ""],
|
||||||
|
['mobile', ""],
|
||||||
|
['password', ""],
|
||||||
|
['remark', ""],
|
||||||
|
['key', ""],
|
||||||
|
['code', ""],
|
||||||
|
['signature', ""],
|
||||||
|
|
||||||
|
/*以下为实名信息*/
|
||||||
|
['contentExample', ""],
|
||||||
|
['companyName', ""],
|
||||||
|
['creditCode', ""],
|
||||||
|
['legalPerson', ""],
|
||||||
|
['principalName', ""],
|
||||||
|
['principalIdCard', ""],
|
||||||
|
['principalMobile', ""],
|
||||||
|
['signSource', ""],
|
||||||
|
['signType', ""],
|
||||||
|
['imgUrl', ""],
|
||||||
|
]);
|
||||||
|
$res = (new NiuSmsService())->registerAccount($data);
|
||||||
|
return success($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录牛云短信子账号
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function loginAccount()
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['username', ""],
|
||||||
|
['password', ""],
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->loginAccount($params);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取短信发送列表
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function accountSendList($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['content', ''],
|
||||||
|
['mobile', ''],
|
||||||
|
['smsStatus', '']
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->accountSendList($username, $params);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取子账户信息
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function accountInfo($username)
|
||||||
|
{
|
||||||
|
$data = (new NiuSmsService())->accountInfo($username);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改子账户信息
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function editAccount($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['new_mobile', ""],
|
||||||
|
['mobile', ""],
|
||||||
|
['code', ""],
|
||||||
|
['key', ""],
|
||||||
|
['signature', ""],
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->editAccount($username, $params);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置密码
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function resetPassword($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['mobile', ''],
|
||||||
|
['code', ''],
|
||||||
|
['key', ''],
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->resetPassword($username, $params);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 忘记密码
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function forgetPassword($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['mobile', ''],
|
||||||
|
['code', ''],
|
||||||
|
['key', ''],
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->forgetPassword($username, $params);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名列表
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function signList($username)
|
||||||
|
{
|
||||||
|
$data = (new NiuSmsService())->getSignList($username);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名信息
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function signInfo($username)
|
||||||
|
{
|
||||||
|
$signature = $this->request->param('signature');
|
||||||
|
$data = (new NiuSmsService())->signInfo($username, $signature);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function signCreateConfig()
|
||||||
|
{
|
||||||
|
return success((new NiuSmsService())->signCreateConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名创建、报备
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function signCreate($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['signature', ""],
|
||||||
|
['contentExample', ""],
|
||||||
|
['companyName', ""],
|
||||||
|
['creditCode', ""],
|
||||||
|
['legalPerson', ""],
|
||||||
|
['principalName', ""],
|
||||||
|
['principalIdCard', ""],
|
||||||
|
['principalMobile', ""],
|
||||||
|
['signSource', ""],
|
||||||
|
['signType', ""],
|
||||||
|
['imgUrl', ""],
|
||||||
|
['defaultSign', 0],
|
||||||
|
]);
|
||||||
|
(new NiuSmsService())->signCreate($username, $params);
|
||||||
|
return success("SUCCESS");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function signDelete($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['signatures', []]
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->signDelete($username, $params);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步模版状态
|
||||||
|
* @param $sms_type
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function templateSync($sms_type, $username)
|
||||||
|
{
|
||||||
|
$data = (new NiuSmsService())->syncTemplateList($sms_type, $username);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模版列表
|
||||||
|
* @param $sms_type
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function templateList($sms_type, $username)
|
||||||
|
{
|
||||||
|
$data = (new NiuSmsService())->getTemplateList($sms_type, $username);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模版信息
|
||||||
|
* @param $sms_type
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function templateInfo($sms_type, $username)
|
||||||
|
{
|
||||||
|
$template_key = $this->request->param('template_key');
|
||||||
|
$data = (new NiuSmsService())->templateInfo($sms_type, $username, $template_key);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建模版需要的配置
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function templateCreateConfig()
|
||||||
|
{
|
||||||
|
return success((new NiuSmsService())->templateCreateConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建模版
|
||||||
|
* @param $sms_type
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function templateCreate($sms_type, $username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['template_key', ""],
|
||||||
|
['template_type', ""],
|
||||||
|
['params_json', ""],
|
||||||
|
['template_id', ""],
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->templateUpsert($sms_type, $username, $params);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清除模版
|
||||||
|
* @param $username
|
||||||
|
* @param $template_id
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function templateDelete($username, $template_id)
|
||||||
|
{
|
||||||
|
(new NiuSmsService())->templateDelete($username, $template_id);
|
||||||
|
return success('DELETE_SUCCESS');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建订单
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function createOrder($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['package_id', 0]
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->createOrder($username, $params['package_id']);
|
||||||
|
return success($data);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单计算
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function calculate($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['package_id', 0]
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->calculate($username, $params['package_id']);
|
||||||
|
return success($data);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取支付信息
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getPayInfo($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['out_trade_no', '']
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->getPayInfo($username, $params);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 充值、订单列表
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function orderList($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['out_trade_no', ''],
|
||||||
|
['order_status', ''],
|
||||||
|
['create_time_start', ''],
|
||||||
|
['create_time_end', ''],
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->orderList($username, $params);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单详情
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function orderInfo($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['out_trade_no', '']
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->orderInfo($username, $params['out_trade_no']);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单状态
|
||||||
|
* @param $username
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function orderStatus($username)
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
['out_trade_no', '']
|
||||||
|
]);
|
||||||
|
$data = (new NiuSmsService())->orderStatus($username, $params['out_trade_no']);
|
||||||
|
return success($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -111,5 +111,4 @@ class Notice extends BaseAdminController
|
|||||||
(new NoticeService())->edit($data['key'], $data['type'], $data);
|
(new NoticeService())->edit($data['key'], $data['type'], $data);
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,6 +26,7 @@ class Account extends BaseAdminController
|
|||||||
{
|
{
|
||||||
$data = $this->request->params([
|
$data = $this->request->params([
|
||||||
['type', ''],
|
['type', ''],
|
||||||
|
['trade_no', ''],
|
||||||
['create_time', []],
|
['create_time', []],
|
||||||
]);
|
]);
|
||||||
return success((new AccountLogService())->getPage($data));
|
return success((new AccountLogService())->getPage($data));
|
||||||
|
|||||||
@ -136,29 +136,4 @@ class Attachment extends BaseAdminController
|
|||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取图标库分类列表
|
|
||||||
*/
|
|
||||||
public function getIconCategoryList()
|
|
||||||
{
|
|
||||||
$data = $this->request->params([
|
|
||||||
['name', ''],
|
|
||||||
]);
|
|
||||||
return success((new AttachmentService())->getIconCategoryList($data));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取图标库列表
|
|
||||||
*/
|
|
||||||
public function getIconList()
|
|
||||||
{
|
|
||||||
$data = $this->request->params([
|
|
||||||
['page', 0],
|
|
||||||
['limit', 0],
|
|
||||||
['cate_id', 0],
|
|
||||||
['real_name', ''],
|
|
||||||
]);
|
|
||||||
return success((new AttachmentService())->getIconList($data));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,5 +47,15 @@ class UserLog extends BaseAdminController
|
|||||||
return success((new UserLogService())->getInfo($id));
|
return success((new UserLogService())->getInfo($id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空日志
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function destroy()
|
||||||
|
{
|
||||||
|
(new UserLogService())->destroy();
|
||||||
|
return success("SUCCESS");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ use think\facade\Route;
|
|||||||
*/
|
*/
|
||||||
Route::group(function () {
|
Route::group(function () {
|
||||||
//获取本地插件
|
//获取本地插件
|
||||||
|
Route::get('addon/init', 'addon.Addon/init');
|
||||||
Route::get('addon/local', 'addon.Addon/getLocalAddonList');
|
Route::get('addon/local', 'addon.Addon/getLocalAddonList');
|
||||||
//获取插件列表
|
//获取插件列表
|
||||||
Route::get('addon', 'addon.Addon/lists');
|
Route::get('addon', 'addon.Addon/lists');
|
||||||
@ -53,6 +54,10 @@ Route::group(function () {
|
|||||||
// 取消安装任务
|
// 取消安装任务
|
||||||
Route::put('addon/install/cancel/:addon', 'addon.Addon/cancleInstall');
|
Route::put('addon/install/cancel/:addon', 'addon.Addon/cancleInstall');
|
||||||
|
|
||||||
|
//首页展示应用标签列表
|
||||||
|
Route::get('app/label/index', 'addon.Addon/getIndexAddonLabelList');
|
||||||
|
//首页展示应用列表
|
||||||
|
Route::get('app/index', 'addon.Addon/getIndexAddonList');
|
||||||
/******************************************************************开发插件 *******************************************************/
|
/******************************************************************开发插件 *******************************************************/
|
||||||
//开发插件列表
|
//开发插件列表
|
||||||
Route::get('addon_develop', 'addon.AddonDevelop/lists');
|
Route::get('addon_develop', 'addon.AddonDevelop/lists');
|
||||||
|
|||||||
@ -45,6 +45,50 @@ Route::group('notice', function () {
|
|||||||
//短信发送记录详情
|
//短信发送记录详情
|
||||||
Route::get('sms/log/:id', 'notice.SmsLog/info');
|
Route::get('sms/log/:id', 'notice.SmsLog/info');
|
||||||
|
|
||||||
|
Route::group('niusms', function () {
|
||||||
|
Route::get('packages', 'notice.NiuSms/getSmsPackageList');
|
||||||
|
//发送验证短信
|
||||||
|
Route::post('send', 'notice.NiuSms/sendMobileCode');
|
||||||
|
Route::get('captcha', 'notice.NiuSms/captcha');
|
||||||
|
|
||||||
|
Route::get('config', 'notice.NiuSms/getConfig');
|
||||||
|
Route::put('enable', 'notice.NiuSms/enable');
|
||||||
|
Route::group('account', function () {
|
||||||
|
Route::post('register', 'notice.NiuSms/registerAccount');
|
||||||
|
Route::post('login', 'notice.NiuSms/loginAccount');
|
||||||
|
Route::post('edit/:username', 'notice.NiuSms/editAccount');
|
||||||
|
Route::post('reset/password/:username', 'notice.NiuSms/resetPassword');
|
||||||
|
Route::post('forget/password/:username', 'notice.NiuSms/forgetPassword');
|
||||||
|
Route::get('send_list/:username', 'notice.NiuSms/accountSendList');
|
||||||
|
Route::get('info/:username', 'notice.NiuSms/accountInfo');
|
||||||
|
});
|
||||||
|
|
||||||
|
Route::group('order', function () {
|
||||||
|
Route::get('list/:username', 'notice.NiuSms/orderList');
|
||||||
|
Route::post('calculate/:username', 'notice.NiuSms/calculate');
|
||||||
|
Route::post('create/:username', 'notice.NiuSms/createOrder');
|
||||||
|
Route::get('info/:username', 'notice.NiuSms/orderInfo');
|
||||||
|
Route::get('status/:username', 'notice.NiuSms/orderStatus');
|
||||||
|
Route::get('pay/:username', 'notice.NiuSms/getPayInfo');
|
||||||
|
});
|
||||||
|
Route::group('sign', function () {
|
||||||
|
Route::get('list/:username', 'notice.NiuSms/signList');
|
||||||
|
Route::get('info/:username', 'notice.NiuSms/signInfo');
|
||||||
|
Route::get('report/config', 'notice.NiuSms/signCreateConfig');
|
||||||
|
Route::post('report/:username', 'notice.NiuSms/signCreate');
|
||||||
|
Route::post('delete/:username', 'notice.NiuSms/signDelete');
|
||||||
|
});
|
||||||
|
|
||||||
|
Route::group('template', function () {
|
||||||
|
Route::get('sync/:sms_type/:username', 'notice.NiuSms/templateSync');
|
||||||
|
Route::get('list/:sms_type/:username', 'notice.NiuSms/templateList');
|
||||||
|
Route::get('info/:sms_type/:username', 'notice.NiuSms/templateInfo');
|
||||||
|
Route::get('report/config', 'notice.NiuSms/templateCreateConfig');
|
||||||
|
Route::post('report/:sms_type/:username', 'notice.NiuSms/templateCreate');
|
||||||
|
Route::delete(':username/:template_id', 'notice.NiuSms/templateDelete');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
})->middleware([
|
})->middleware([
|
||||||
AdminCheckToken::class,
|
AdminCheckToken::class,
|
||||||
AdminCheckRole::class,
|
AdminCheckRole::class,
|
||||||
|
|||||||
@ -133,10 +133,6 @@ Route::group('sys', function() {
|
|||||||
Route::put('upload/config', 'upload.Upload/setUploadConfig');
|
Route::put('upload/config', 'upload.Upload/setUploadConfig');
|
||||||
//获取上传设置
|
//获取上传设置
|
||||||
Route::get('upload/config', 'upload.Upload/getUploadConfig');
|
Route::get('upload/config', 'upload.Upload/getUploadConfig');
|
||||||
// 获取图标库列表
|
|
||||||
Route::get('attachment/icon_category', 'sys.Attachment/getIconCategoryList');
|
|
||||||
// 获取图标库列表
|
|
||||||
Route::get('attachment/icon', 'sys.Attachment/getIconList');
|
|
||||||
/***************************************************** 协议管理 ****************************************************/
|
/***************************************************** 协议管理 ****************************************************/
|
||||||
//消息列表
|
//消息列表
|
||||||
Route::get('agreement', 'sys.Agreement/lists');
|
Route::get('agreement', 'sys.Agreement/lists');
|
||||||
|
|||||||
@ -33,12 +33,15 @@ Route::group('user', function () {
|
|||||||
Route::put(':uid', 'user.User/edit');
|
Route::put(':uid', 'user.User/edit');
|
||||||
//修改用户属性
|
//修改用户属性
|
||||||
Route::put(':uid/:field', 'user.User/modify');
|
Route::put(':uid/:field', 'user.User/modify');
|
||||||
|
//删除用户
|
||||||
|
Route::delete(':uid', 'user.User/del');
|
||||||
|
|
||||||
/***************************************************** 操作日志 **************************************************/
|
/***************************************************** 操作日志 **************************************************/
|
||||||
//操作日志列表
|
//操作日志列表
|
||||||
Route::get('userlog', 'user.UserLog/lists');
|
Route::get('userlog', 'user.UserLog/lists');
|
||||||
//操作日志详情
|
//操作日志详情
|
||||||
Route::get('userlog/:id', 'user.UserLog/info');
|
Route::get('userlog/:id', 'user.UserLog/info');
|
||||||
|
Route::delete('userlog/destroy', 'user.UserLog/destroy');
|
||||||
|
|
||||||
})->middleware([
|
})->middleware([
|
||||||
AdminCheckToken::class,
|
AdminCheckToken::class,
|
||||||
|
|||||||
@ -50,6 +50,7 @@ class Member extends BaseApiController
|
|||||||
[ 'field', $field ],
|
[ 'field', $field ],
|
||||||
]);
|
]);
|
||||||
$data[ $field ] = $data[ 'value' ];
|
$data[ $field ] = $data[ 'value' ];
|
||||||
|
$data['member_id'] = $this->request->memberId();
|
||||||
$this->validate($data, 'app\validate\member\Member.modify');
|
$this->validate($data, 'app\validate\member\Member.modify');
|
||||||
( new MemberService() )->modify($field, $data[ 'value' ]);
|
( new MemberService() )->modify($field, $data[ 'value' ]);
|
||||||
return success('MODIFY_SUCCESS');
|
return success('MODIFY_SUCCESS');
|
||||||
|
|||||||
@ -182,7 +182,7 @@ class Workerman extends Command
|
|||||||
$addon_path = $addon_dir . $v[ 'key' ] . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'job';
|
$addon_path = $addon_dir . $v[ 'key' ] . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'job';
|
||||||
if (is_dir($addon_path)) {
|
if (is_dir($addon_path)) {
|
||||||
search_dir($addon_path, $addon_data, root_path());
|
search_dir($addon_path, $addon_data, root_path());
|
||||||
$class_list = array_merge($class_list, $addon_data);
|
$class_list = array_merge($class_list, array_filter($addon_data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
60
niucloud/app/dict/common/CommonActiveDict.php
Normal file
60
niucloud/app/dict/common/CommonActiveDict.php
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\dict\common;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渠道枚举类
|
||||||
|
* Class ChannelDict
|
||||||
|
* @package app\dict\common
|
||||||
|
*/
|
||||||
|
class CommonActiveDict
|
||||||
|
{
|
||||||
|
const IMPULSE_BUY = 'impulse_buy';
|
||||||
|
const GIFTCARD = 'gift_card';
|
||||||
|
|
||||||
|
const DISCOUNT = 'discount';// 限时折扣
|
||||||
|
const EXCHANGE = 'exchange';// 积分商城
|
||||||
|
const MANJIANSONG = 'manjiansong'; // 满减送
|
||||||
|
const NEWCOMER_DISCOUNT = 'newcomer_discount'; // 新人专享
|
||||||
|
|
||||||
|
public static function getActiveShort($active)
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
self::IMPULSE_BUY => [
|
||||||
|
'name' => get_lang('common_active_short.impulse_buy'),
|
||||||
|
'bg_color' => "#FFAE42"
|
||||||
|
],
|
||||||
|
self::GIFTCARD => [
|
||||||
|
'name' => get_lang('common_active_short.gift_card'),
|
||||||
|
'bg_color' => '#FF0000'
|
||||||
|
],
|
||||||
|
self::DISCOUNT => [
|
||||||
|
'name' => get_lang('common_active_short.discount'),
|
||||||
|
'bg_color' => '#38B0DE'
|
||||||
|
],
|
||||||
|
self::EXCHANGE => [
|
||||||
|
'name' => get_lang('common_active_short.exchange'),
|
||||||
|
'bg_color' => '#00FFFF'
|
||||||
|
],
|
||||||
|
self::MANJIANSONG => [
|
||||||
|
'name' => get_lang('common_active_short.manjiansong'),
|
||||||
|
'bg_color' => '#00FF00'
|
||||||
|
],
|
||||||
|
self::NEWCOMER_DISCOUNT => [
|
||||||
|
'name' => get_lang('common_active_short.newcomer_discount'),
|
||||||
|
'bg_color' => '#70DB93'
|
||||||
|
],
|
||||||
|
];
|
||||||
|
return !empty($active) ? $data[$active] : $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2419,6 +2419,35 @@ return [
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '牛云短信配置',
|
||||||
|
'menu_key' => 'niu_sms_setting',
|
||||||
|
'menu_short_name' => '牛云设置',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => '',
|
||||||
|
'router_path' => 'setting/niusms/setting',
|
||||||
|
'view_path' => 'setting/sms_niu',
|
||||||
|
'methods' => 'get',
|
||||||
|
'sort' => '12',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '0',
|
||||||
|
'children' => []
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '订单结果页',
|
||||||
|
'menu_key' => 'sms_niu_pay_result',
|
||||||
|
'menu_short_name' => '订单结果页',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => '',
|
||||||
|
'router_path' => 'setting/sms/pay',
|
||||||
|
'view_path' => 'setting/sms_niu_pay_result',
|
||||||
|
'methods' => 'get',
|
||||||
|
'sort' => '12',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '0',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'menu_name' => '发送记录',
|
'menu_name' => '发送记录',
|
||||||
'menu_key' => 'sms_notice_records',
|
'menu_key' => 'sms_notice_records',
|
||||||
|
|||||||
@ -11,6 +11,8 @@
|
|||||||
|
|
||||||
namespace app\dict\notice;
|
namespace app\dict\notice;
|
||||||
|
|
||||||
|
use app\dict\sys\ConfigKeyDict;
|
||||||
|
use app\service\core\sys\CoreConfigService;
|
||||||
use core\dict\DictLoader;
|
use core\dict\DictLoader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,14 +26,22 @@ class NoticeDict
|
|||||||
* 获取消息
|
* 获取消息
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getNotice(string $key = '')
|
public static function getNotice(string $key = '',$sms_type = '')
|
||||||
{
|
{
|
||||||
|
if (empty($sms_type)){
|
||||||
|
$sms_type = (new CoreConfigService())->getConfigValue(ConfigKeyDict::SMS)['default'] ?? "";
|
||||||
|
}
|
||||||
$addon_load = new DictLoader('Notice');
|
$addon_load = new DictLoader('Notice');
|
||||||
$notice = $addon_load->load(['type' => 'notice']);
|
$notice = $addon_load->load(['type' => 'notice']);
|
||||||
$notice_type = NoticeTypeDict::getType();
|
$notice_type = NoticeTypeDict::getType();
|
||||||
foreach ($notice_type as $k => $v) {
|
foreach ($notice_type as $k => $v) {
|
||||||
$var_name = $k . '_notice';
|
$var_name = $k . '_notice';
|
||||||
$$var_name = $addon_load->load(['type' => $k]);
|
$$var_name = $addon_load->load(['type' => $k]);
|
||||||
|
foreach ($$var_name as &$vv) {
|
||||||
|
if (isset($vv['is_need_closure_content']) && $vv['is_need_closure_content'] == 1 && isset($vv['content'])) {
|
||||||
|
$vv['content'] = $vv['content'](['sms_type' => $sms_type]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($notice as $k => $v) {
|
foreach ($notice as $k => $v) {
|
||||||
@ -51,4 +61,62 @@ class NoticeDict
|
|||||||
return $notice;
|
return $notice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取消息模版包含插件名称
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getNoticeWithAddon(string $key = '',$sms_type = '')
|
||||||
|
{
|
||||||
|
if (empty($sms_type)) {
|
||||||
|
$sms_type = (new CoreConfigService())->getConfigValue(ConfigKeyDict::SMS)['default'] ?? "";
|
||||||
|
}
|
||||||
|
//获取模版列表
|
||||||
|
$addon_load = new DictLoader('Notice');
|
||||||
|
$notice_template_list = $addon_load->load(['type' => 'notice', 'with_addon' => 1]);
|
||||||
|
|
||||||
|
//获取针对性的详细内容 例如 注册的 短信通知的信息 / 微信通知的信息
|
||||||
|
$notice_type_list = NoticeTypeDict::getType();
|
||||||
|
$template_type_desc_list = [];
|
||||||
|
foreach ($notice_type_list as $notice_type => $v) {
|
||||||
|
$temp = $addon_load->load(['type' => $notice_type, 'with_addon' => 1]);
|
||||||
|
if (!isset($template_type_desc_list[$notice_type . '_notice'])) {
|
||||||
|
$template_type_desc_list[$notice_type . '_notice'] = [];
|
||||||
|
}
|
||||||
|
foreach ($temp as &$tmv) {
|
||||||
|
foreach ($tmv as &$tmcv) {
|
||||||
|
if (isset($tmcv['is_need_closure_content']) && $tmcv['is_need_closure_content'] == 1 && isset($tmcv['content'])) {
|
||||||
|
$tmcv['content'] = $tmcv['content'](['sms_type' => $sms_type]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$template_type_desc_list[$notice_type . '_notice'] = empty($template_type_desc_list[$notice_type . '_notice']) ? $temp : array_merge($template_type_desc_list[$notice_type . '_notice'], $temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
//组合数据
|
||||||
|
foreach ($notice_template_list as $addon => $item) {
|
||||||
|
$keys = array_keys($item);
|
||||||
|
if ($key && !in_array($key, $keys)) {
|
||||||
|
unset($notice_template_list[$addon]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
foreach ($item as $template_key => $value) {
|
||||||
|
if ($key && $template_key != $key) {
|
||||||
|
unset($notice_template_list[$addon][$template_key]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$support_type = [];
|
||||||
|
foreach ($notice_type_list as $notice_type => $notice_type_name) {
|
||||||
|
$temp_arr = $template_type_desc_list[$notice_type . "_notice"][$addon] ?? [];
|
||||||
|
$template_keys = array_keys($temp_arr);
|
||||||
|
if (in_array($template_key, $template_keys)) {
|
||||||
|
$notice_template_list[$addon][$template_key][$notice_type] = $template_type_desc_list[$notice_type . "_notice"][$addon][$template_key];
|
||||||
|
$support_type[] = $notice_type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$notice_template_list[$addon][$template_key]['support_type'] = $support_type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $notice_template_list;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -20,6 +20,24 @@ class NoticeTypeDict
|
|||||||
//微信小程序
|
//微信小程序
|
||||||
public const WEAPP = 'weapp';
|
public const WEAPP = 'weapp';
|
||||||
|
|
||||||
|
public const TEMPLATE_AUDIT_STATUS_NEED_AGAIN_REPORT = -3;
|
||||||
|
public const TEMPLATE_AUDIT_STATUS_NEED_EDIT = -2;
|
||||||
|
public const TEMPLATE_AUDIT_STATUS_NOT_REPORT = -1;
|
||||||
|
public const TEMPLATE_AUDIT_STATUS_WAIT = 1;
|
||||||
|
public const TEMPLATE_AUDIT_STATUS_PASS = 2;
|
||||||
|
public const TEMPLATE_AUDIT_STATUS_REFUSE = 3;
|
||||||
|
|
||||||
|
public const TEMPLATE_TYPE_VERIFY = 1;
|
||||||
|
public const TEMPLATE_TYPE_INDUSTRY_NOTICE = 2;
|
||||||
|
public const TEMPLATE_TYPE_SEM = 3;
|
||||||
|
|
||||||
|
|
||||||
|
//助通签名审核状态 1- 待审核 2- 通过 3-拒绝
|
||||||
|
public const API_AUDIT_RESULT_WAIT = 1;
|
||||||
|
public const API_AUDIT_RESULT_PASS = 2;
|
||||||
|
public const API_AUDIT_RESULT_REFUSE = 3;
|
||||||
|
public const BALANCE_RECHARGE_ADD = 1;//充值余额
|
||||||
|
public const BALANCE_RECHARGE_REDUCE = 2;//扣减余额
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取消息类型
|
* 获取消息类型
|
||||||
@ -34,4 +52,156 @@ class NoticeTypeDict
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取模版类型
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getTemplateType($type = '')
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
self::TEMPLATE_TYPE_VERIFY => get_lang('dict_sms_api.template_type_verify_code'),
|
||||||
|
self::TEMPLATE_TYPE_INDUSTRY_NOTICE => get_lang('dict_sms_api.template_type_industry_notice'),
|
||||||
|
self::TEMPLATE_TYPE_SEM => get_lang('dict_sms_api.template_type_sem'),
|
||||||
|
];
|
||||||
|
return $type ? $data[$type] : $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取消息类型
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getTemplateAuditStatus($type = '')
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
self::TEMPLATE_AUDIT_STATUS_NEED_AGAIN_REPORT => get_lang('dict_sms_api.template_status_again_report'),
|
||||||
|
self::TEMPLATE_AUDIT_STATUS_NEED_EDIT => get_lang('dict_sms_api.template_status_need_edit'),
|
||||||
|
self::TEMPLATE_AUDIT_STATUS_NOT_REPORT => get_lang('dict_sms_api.template_status_not_report'),
|
||||||
|
self::TEMPLATE_AUDIT_STATUS_WAIT => get_lang('dict_sms_api.template_status_wait'),
|
||||||
|
self::TEMPLATE_AUDIT_STATUS_PASS => get_lang('dict_sms_api.template_status_pass'),
|
||||||
|
self::TEMPLATE_AUDIT_STATUS_REFUSE => get_lang('dict_sms_api.template_status_refuse'),
|
||||||
|
];
|
||||||
|
return $type ? $data[$type] : $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取消息类型
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getSignAuditType($type = '')
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
self::API_AUDIT_RESULT_WAIT => get_lang('dict_sms_api.sign_audit_status_wait'),
|
||||||
|
self::API_AUDIT_RESULT_PASS => get_lang('dict_sms_api.sign_audit_status_pass'),
|
||||||
|
self::API_AUDIT_RESULT_REFUSE => get_lang('dict_sms_api.sign_audit_status_refuse'),
|
||||||
|
];
|
||||||
|
return $type ? $data[$type] : $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取消息类型
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getBalanceAllocateType($type = '')
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
self::BALANCE_RECHARGE_ADD => get_lang('dict_sms_api.balance_add'),
|
||||||
|
self::BALANCE_RECHARGE_REDUCE => get_lang('dict_sms_api.balance_reduce'),
|
||||||
|
];
|
||||||
|
return $type ? $data[$type] : $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static function getSignSource($source = '')
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['type' => 1, 'name' => '企业名称'],
|
||||||
|
['type' => 2, 'name' => '事业单位'],
|
||||||
|
['type' => 3, 'name' => '商标'],
|
||||||
|
['type' => 4, 'name' => 'APP'],
|
||||||
|
['type' => 5, 'name' => '小程序'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getSignType($type = '')
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['type' => 0, 'name' => '全称'],
|
||||||
|
['type' => 1, 'name' => '简称'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getSignDefault($type = '')
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['type' => 0, 'name' => '否'],
|
||||||
|
['type' => 1, 'name' => '是'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
const PARAMS_TYPE_VALID_CODE = 'valid_code';
|
||||||
|
const PARAMS_TYPE_MOBILE_NUMBER = 'mobile_number';
|
||||||
|
const PARAMS_TYPE_OTHER_NUMBER = 'other_number';
|
||||||
|
const PARAMS_TYPE_AMOUNT = 'amount';
|
||||||
|
const PARAMS_TYPE_DATE = 'date';
|
||||||
|
const PARAMS_TYPE_CHINESE = 'chinese';
|
||||||
|
const PARAMS_TYPE_OTHERS = 'others';
|
||||||
|
public static function getApiParamsType()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
'name' => '验证码',
|
||||||
|
'type' => self::PARAMS_TYPE_VALID_CODE,
|
||||||
|
'desc' => '4-6位纯数字',
|
||||||
|
'rule' => '/^\d$/',
|
||||||
|
'min'=>4,
|
||||||
|
'max'=>6
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => '手机号',
|
||||||
|
'type' => self::PARAMS_TYPE_MOBILE_NUMBER,
|
||||||
|
'desc' => '1-15位纯数字',
|
||||||
|
'rule' => '/^\d$/',
|
||||||
|
'min'=>1,
|
||||||
|
'max'=>15
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => '其他号码',
|
||||||
|
'type' => self::PARAMS_TYPE_OTHER_NUMBER,
|
||||||
|
'desc' => '1-32位字母+数字组合',
|
||||||
|
'rule'=>'/^[a-zA-Z0-9]$/',
|
||||||
|
'min'=>1,
|
||||||
|
'max'=>32
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => '金额',
|
||||||
|
'type' => self::PARAMS_TYPE_AMOUNT,
|
||||||
|
'desc' => '支持数字或数字的中文 (壹贰叁肆伍陆柒捌玖拾佰仟万亿 圆元整角分厘毫)',
|
||||||
|
'rule' => "/^(?:\d+|(?:[零壹贰叁肆伍陆柒捌玖拾佰仟万亿圆角分厘毫]+|圆|元|整)+)$/u"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => '日期',
|
||||||
|
'type' => self::PARAMS_TYPE_DATE,
|
||||||
|
'desc' => '符合时间的表达方式 也支持中文:2019年9月3日16时24分35秒',
|
||||||
|
'rule' => ''
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => '中文',
|
||||||
|
'type' => self::PARAMS_TYPE_CHINESE,
|
||||||
|
'desc' => '1-32中文,支持中文园括号()',
|
||||||
|
'rule' => '/^[\p{Han}()()]$/u',
|
||||||
|
'min'=>1,
|
||||||
|
'max'=>32
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => '其他',
|
||||||
|
'type' => self::PARAMS_TYPE_OTHERS,
|
||||||
|
'desc' => ' 1-35个中文数字字母组合,支持中文符号和空格',
|
||||||
|
'rule' => '/^[\p{Han}\p{N}\p{L}\p{P}\p{S}\s]$/u',
|
||||||
|
'min'=>1,
|
||||||
|
'max'=>35
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -3,7 +3,7 @@ return [
|
|||||||
'verify_code' => [
|
'verify_code' => [
|
||||||
'key' => 'verify_code',
|
'key' => 'verify_code',
|
||||||
'receiver_type' => 0,
|
'receiver_type' => 0,
|
||||||
'name' => '手机验证码',
|
'name' => '管理端手机验证码',
|
||||||
'title' => '管理端验证码登录',
|
'title' => '管理端验证码登录',
|
||||||
'async' => false,
|
'async' => false,
|
||||||
'variable' => [
|
'variable' => [
|
||||||
@ -14,7 +14,7 @@ return [
|
|||||||
'member_verify_code' => [
|
'member_verify_code' => [
|
||||||
'key' => 'member_verify_code',
|
'key' => 'member_verify_code',
|
||||||
'receiver_type' => 1,
|
'receiver_type' => 1,
|
||||||
'name' => '手机验证码',
|
'name' => '客户端手机验证码',
|
||||||
'title' => '前端验证码登录,注册,手机验证',
|
'title' => '前端验证码登录,注册,手机验证',
|
||||||
'async' => false,
|
'async' => false,
|
||||||
'variable' => [
|
'variable' => [
|
||||||
|
|||||||
@ -2,16 +2,20 @@
|
|||||||
return [
|
return [
|
||||||
//手机验证码
|
//手机验证码
|
||||||
'verify_code' => [
|
'verify_code' => [
|
||||||
|
'is_need_closure_content' => 0,
|
||||||
'content' => '您的手机验证码{code},请不要轻易告诉其他人'
|
'content' => '您的手机验证码{code},请不要轻易告诉其他人'
|
||||||
],
|
],
|
||||||
'member_verify_code' => [
|
'member_verify_code' => [
|
||||||
|
'is_need_closure_content' => 0,
|
||||||
'content' => '您的手机验证码{code},请不要轻易告诉其他人',
|
'content' => '您的手机验证码{code},请不要轻易告诉其他人',
|
||||||
],
|
],
|
||||||
'recharge_success' => [
|
'recharge_success' => [
|
||||||
|
'is_need_closure_content' => 0,
|
||||||
'content' => '您充值金额¥{price}, 充值后金额¥{balance}',
|
'content' => '您充值金额¥{price}, 充值后金额¥{balance}',
|
||||||
],
|
],
|
||||||
|
|
||||||
// 'member_transfer' => [
|
// 'member_transfer' => [
|
||||||
|
// 'is_need_closure_content' => 0,
|
||||||
// 'content' => '你的编号为{transfer_no}的提现申请已通过,您现在可以在提现中点击提现收款了',
|
// 'content' => '你的编号为{transfer_no}的提现申请已通过,您现在可以在提现中点击提现收款了',
|
||||||
// ]
|
// ]
|
||||||
|
|
||||||
|
|||||||
@ -48,5 +48,17 @@ return [
|
|||||||
],
|
],
|
||||||
'class' => 'app\job\upgrade\AutoClearUpgradeRecords',
|
'class' => 'app\job\upgrade\AutoClearUpgradeRecords',
|
||||||
'function' => ''
|
'function' => ''
|
||||||
|
],[
|
||||||
|
'key' => 'auto_clear_user_log',
|
||||||
|
'name' => '定时清理用户操作日志',
|
||||||
|
'desc' => '',
|
||||||
|
'time' => [
|
||||||
|
'type' => 'day',
|
||||||
|
'day' => 1,
|
||||||
|
'hour' => 1,
|
||||||
|
'min' => 1
|
||||||
|
],
|
||||||
|
'class' => 'app\job\sys\ClearUserLog',
|
||||||
|
'function' => ''
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@ -37,4 +37,6 @@ class ConfigKeyDict
|
|||||||
public const WECHAT_AUTHORIZATION_INFO = 'wechat_authorization_info';
|
public const WECHAT_AUTHORIZATION_INFO = 'wechat_authorization_info';
|
||||||
|
|
||||||
public const WECHAT_TRANSFER_SCENE_CONFIG = 'WECHAT_TRANSFER_SCENE_CONFIG';//微信转账场景配置
|
public const WECHAT_TRANSFER_SCENE_CONFIG = 'WECHAT_TRANSFER_SCENE_CONFIG';//微信转账场景配置
|
||||||
|
|
||||||
|
public const SMS = 'SMS';//短信配置
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,6 +20,7 @@ class SmsDict
|
|||||||
{
|
{
|
||||||
//阿里云短信
|
//阿里云短信
|
||||||
public const ALISMS = 'aliyun';
|
public const ALISMS = 'aliyun';
|
||||||
|
public const NIUSMS = 'niuyun';
|
||||||
//腾讯云短信
|
//腾讯云短信
|
||||||
public const TENCENTSMS = 'tencent';
|
public const TENCENTSMS = 'tencent';
|
||||||
public const SENDING = 'sending';
|
public const SENDING = 'sending';
|
||||||
@ -39,6 +40,15 @@ class SmsDict
|
|||||||
public static function getType()
|
public static function getType()
|
||||||
{
|
{
|
||||||
$system = [
|
$system = [
|
||||||
|
self::NIUSMS => [
|
||||||
|
'name' => '牛云短信',
|
||||||
|
//配置参数
|
||||||
|
'params' => [],
|
||||||
|
'encrypt_params' => [],
|
||||||
|
'show_type'=>'view',
|
||||||
|
'view' => '/src/app/views/setting/sms_niu.vue',
|
||||||
|
'component' => '',
|
||||||
|
],
|
||||||
self::ALISMS => [
|
self::ALISMS => [
|
||||||
'name' => '阿里云短信',
|
'name' => '阿里云短信',
|
||||||
//配置参数
|
//配置参数
|
||||||
@ -48,6 +58,7 @@ class SmsDict
|
|||||||
'secret_key' => 'SECRET_KEY'
|
'secret_key' => 'SECRET_KEY'
|
||||||
],
|
],
|
||||||
'encrypt_params' => ['secret_key'],
|
'encrypt_params' => ['secret_key'],
|
||||||
|
'show_type'=>'component',
|
||||||
'component' => '/src/app/views/setting/components/sms-ali.vue',
|
'component' => '/src/app/views/setting/components/sms-ali.vue',
|
||||||
],
|
],
|
||||||
self::TENCENTSMS => [
|
self::TENCENTSMS => [
|
||||||
@ -60,6 +71,7 @@ class SmsDict
|
|||||||
'secret_key' => 'SECRET_KEY'
|
'secret_key' => 'SECRET_KEY'
|
||||||
],
|
],
|
||||||
'encrypt_params' => ['secret_key'],
|
'encrypt_params' => ['secret_key'],
|
||||||
|
'show_type'=>'component',
|
||||||
'component' => '/src/app/views/setting/components/sms-tencent.vue',
|
'component' => '/src/app/views/setting/components/sms-tencent.vue',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@ -39,6 +39,7 @@ class StorageDict
|
|||||||
$system = [
|
$system = [
|
||||||
self::LOCAL => [
|
self::LOCAL => [
|
||||||
'name' => '本地存储',
|
'name' => '本地存储',
|
||||||
|
'site_name' => '默认存储',
|
||||||
//配置参数
|
//配置参数
|
||||||
'params' => [
|
'params' => [
|
||||||
],
|
],
|
||||||
|
|||||||
@ -16,7 +16,7 @@ CREATE TABLE `addon` (
|
|||||||
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||||
`title` varchar(40) NOT NULL DEFAULT '' COMMENT '插件名称',
|
`title` varchar(40) NOT NULL DEFAULT '' COMMENT '插件名称',
|
||||||
`icon` varchar(255) NOT NULL DEFAULT '' COMMENT '插件图标',
|
`icon` varchar(255) NOT NULL DEFAULT '' COMMENT '插件图标',
|
||||||
`key` varchar(20) NOT NULL DEFAULT '' COMMENT '插件标识',
|
`key` varchar(255) NOT NULL DEFAULT '' COMMENT '插件标识',
|
||||||
`desc` text NULL COMMENT '插件描述',
|
`desc` text NULL COMMENT '插件描述',
|
||||||
`status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '状态',
|
`status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '状态',
|
||||||
`author` varchar(40) NOT NULL DEFAULT '' COMMENT '作者',
|
`author` varchar(40) NOT NULL DEFAULT '' COMMENT '作者',
|
||||||
@ -341,6 +341,7 @@ CREATE TABLE `member` (
|
|||||||
`sex` tinyint(4) NOT NULL DEFAULT 0 COMMENT '性别 0保密 1男 2女',
|
`sex` tinyint(4) NOT NULL DEFAULT 0 COMMENT '性别 0保密 1男 2女',
|
||||||
`status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '用户状态 用户状态默认为1',
|
`status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '用户状态 用户状态默认为1',
|
||||||
`birthday` varchar(20) NOT NULL DEFAULT '' COMMENT '出生日期',
|
`birthday` varchar(20) NOT NULL DEFAULT '' COMMENT '出生日期',
|
||||||
|
`id_card` varchar(50) NOT NULL DEFAULT '' COMMENT '身份证号',
|
||||||
`point` int(11) NOT NULL DEFAULT 0 COMMENT '可用积分',
|
`point` int(11) NOT NULL DEFAULT 0 COMMENT '可用积分',
|
||||||
`point_get` int(11) NOT NULL DEFAULT 0 COMMENT '累计获取积分',
|
`point_get` int(11) NOT NULL DEFAULT 0 COMMENT '累计获取积分',
|
||||||
`balance` decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '可用余额',
|
`balance` decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '可用余额',
|
||||||
@ -361,6 +362,7 @@ CREATE TABLE `member` (
|
|||||||
`district_id` int(11) NOT NULL DEFAULT 0 COMMENT '区县id',
|
`district_id` int(11) NOT NULL DEFAULT 0 COMMENT '区县id',
|
||||||
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '详细地址',
|
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '详细地址',
|
||||||
`location` varchar(255) NOT NULL DEFAULT '' COMMENT '定位地址',
|
`location` varchar(255) NOT NULL DEFAULT '' COMMENT '定位地址',
|
||||||
|
`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
|
||||||
`delete_time` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
|
`delete_time` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||||
`update_time` int(11) NOT NULL DEFAULT 0 COMMENT '修改时间',
|
`update_time` int(11) NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||||
PRIMARY KEY (`member_id`) USING BTREE
|
PRIMARY KEY (`member_id`) USING BTREE
|
||||||
@ -494,6 +496,26 @@ CREATE TABLE `member_sign` (
|
|||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员签到表' ROW_FORMAT = Dynamic;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员签到表' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `niu_sms_template`;
|
||||||
|
CREATE TABLE `niu_sms_template` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`sms_type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '短信服务商类型 niuyun-牛云 aliyun-阿里云 tencent-腾讯',
|
||||||
|
`username` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '子账号名称',
|
||||||
|
`template_key` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模版key',
|
||||||
|
`template_id` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模版id',
|
||||||
|
`template_type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模版类型',
|
||||||
|
`template_content` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模版内容',
|
||||||
|
`param_json` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '参数变量',
|
||||||
|
`status` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '上下架状态',
|
||||||
|
`audit_status` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '报备、审核状态',
|
||||||
|
`audit_msg` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '审核结果/拒绝原因',
|
||||||
|
`report_info` TEXT DEFAULT NULL COMMENT '报备、审核信息',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='牛云短信模板表';
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pay`;
|
DROP TABLE IF EXISTS `pay`;
|
||||||
CREATE TABLE `pay` (
|
CREATE TABLE `pay` (
|
||||||
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
|
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||||
|
|||||||
@ -11,6 +11,8 @@
|
|||||||
|
|
||||||
namespace app\job\notice;
|
namespace app\job\notice;
|
||||||
|
|
||||||
|
use app\dict\sys\ConfigKeyDict;
|
||||||
|
use app\service\core\sys\CoreConfigService;
|
||||||
use core\base\BaseJob;
|
use core\base\BaseJob;
|
||||||
use core\exception\NoticeException;
|
use core\exception\NoticeException;
|
||||||
|
|
||||||
@ -20,7 +22,6 @@ use core\exception\NoticeException;
|
|||||||
class Notice extends BaseJob
|
class Notice extends BaseJob
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消费
|
* 消费
|
||||||
* @param $key
|
* @param $key
|
||||||
@ -30,11 +31,15 @@ class Notice extends BaseJob
|
|||||||
*/
|
*/
|
||||||
protected function doJob($key, $data, $template)
|
protected function doJob($key, $data, $template)
|
||||||
{
|
{
|
||||||
//通过业务获取模板变量属于以及发送对象
|
try {
|
||||||
$result = event('NoticeData', [ 'key' => $key, 'data' => $data, 'template' => $template ]);
|
//通过业务获取模板变量属于以及发送对象
|
||||||
$notice_data = array_values(array_filter($result))[ 0 ] ?? [];
|
$result = event('NoticeData', ['key' => $key, 'data' => $data, 'template' => $template]);
|
||||||
if (empty($notice_data)) throw new NoticeException('NOTICE_TEMPLATE_IS_NOT_EXIST');
|
$notice_data = array_values(array_filter($result))[0] ?? [];
|
||||||
event('Notice', [ 'key' => $key, 'to' => $notice_data[ 'to' ], 'vars' => $notice_data[ 'vars' ], 'template' => $template ]);
|
if (empty($notice_data)) throw new NoticeException('NOTICE_TEMPLATE_IS_NOT_EXIST');
|
||||||
return true;
|
event('Notice', ['key' => $key, 'to' => $notice_data['to'], 'vars' => $notice_data['vars'], 'template' => $template]);
|
||||||
|
return true;
|
||||||
|
}catch (\Exception $e){
|
||||||
|
throw new \Exception($e->getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
25
niucloud/app/job/sys/ClearUserLog.php
Normal file
25
niucloud/app/job/sys/ClearUserLog.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\job\sys;
|
||||||
|
|
||||||
|
use app\model\sys\SysUserLog;
|
||||||
|
use core\base\BaseJob;
|
||||||
|
|
||||||
|
|
||||||
|
class ClearUserLog extends BaseJob
|
||||||
|
{
|
||||||
|
public function doJob()
|
||||||
|
{
|
||||||
|
(new SysUserLog())->where('create_time','<',time()-7*24*60*60)->delete();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -61,6 +61,8 @@ return [
|
|||||||
'UPGRADE_BACKUP_CODE_NOT_FOUND' => '未找到备份的源码文件',
|
'UPGRADE_BACKUP_CODE_NOT_FOUND' => '未找到备份的源码文件',
|
||||||
'UPGRADE_BACKUP_SQL_NOT_FOUND' => '未找到备份的数据库文件',
|
'UPGRADE_BACKUP_SQL_NOT_FOUND' => '未找到备份的数据库文件',
|
||||||
'NOT_EXIST_UPGRADE_CONTENT' => '没有获取到可以升级的内容',
|
'NOT_EXIST_UPGRADE_CONTENT' => '没有获取到可以升级的内容',
|
||||||
|
'CLOUD_BUILD_AUTH_CODE_NOT_FOUND' => '请先填写授权码',
|
||||||
|
'TASK_CYCLE_ERROR' => '任务周期填写错误',
|
||||||
//登录注册重置账号....
|
//登录注册重置账号....
|
||||||
|
|
||||||
'LOGIN_SUCCESS' => '登录成功',
|
'LOGIN_SUCCESS' => '登录成功',
|
||||||
@ -73,6 +75,7 @@ return [
|
|||||||
'OLD_PASSWORD_ERROR' => '原始密码不正确',
|
'OLD_PASSWORD_ERROR' => '原始密码不正确',
|
||||||
'MOBILE_LOGIN_UNOPENED' => '手机号登录注册未开启',
|
'MOBILE_LOGIN_UNOPENED' => '手机号登录注册未开启',
|
||||||
'APP_TYPE_NOT_EXIST' => '无效的登录端口',
|
'APP_TYPE_NOT_EXIST' => '无效的登录端口',
|
||||||
|
"SUPER_ADMIN_NOT_ALLOW_DEL" => "超级管理员不允许删除",
|
||||||
|
|
||||||
//用户组权限
|
//用户组权限
|
||||||
|
|
||||||
@ -211,9 +214,6 @@ return [
|
|||||||
'CURR_SITE_IS_NOT_OPEN_SSL' => '微信小程序请求地址只支持https请先配置ssl',
|
'CURR_SITE_IS_NOT_OPEN_SSL' => '微信小程序请求地址只支持https请先配置ssl',
|
||||||
'WECHAT_MINI_PROGRAM_CODE_GENERATION_FAILED' => '微信小程序码生成失败',
|
'WECHAT_MINI_PROGRAM_CODE_GENERATION_FAILED' => '微信小程序码生成失败',
|
||||||
|
|
||||||
//站点相关
|
|
||||||
'SITE_CLOSE_NOT_ALLOW' => '站点已停止',
|
|
||||||
|
|
||||||
//支付相关(todo 注意:7段不共享)
|
//支付相关(todo 注意:7段不共享)
|
||||||
'ALIPAY_TRANSACTION_NO_NOT_EXIST' => '无效的支付交易号',
|
'ALIPAY_TRANSACTION_NO_NOT_EXIST' => '无效的支付交易号',
|
||||||
'PAYMENT_METHOD_NOT_SUPPORT' => '您选择到支付方式不受业务支持',
|
'PAYMENT_METHOD_NOT_SUPPORT' => '您选择到支付方式不受业务支持',
|
||||||
@ -279,8 +279,6 @@ return [
|
|||||||
// 授权相关
|
// 授权相关
|
||||||
'AUTH_NOT_EXISTS' => '未获取到授权信息',
|
'AUTH_NOT_EXISTS' => '未获取到授权信息',
|
||||||
|
|
||||||
/********************************************************* home端专用 **************************************/
|
|
||||||
|
|
||||||
// 云服务
|
// 云服务
|
||||||
'CLOUD_WEAPP_COMPILE_NOT_EXIST' => '未找到微信小程序编译包',
|
'CLOUD_WEAPP_COMPILE_NOT_EXIST' => '未找到微信小程序编译包',
|
||||||
'WEAPP_APPID_EMPTY' => '还没有配置微信小程序',
|
'WEAPP_APPID_EMPTY' => '还没有配置微信小程序',
|
||||||
@ -294,7 +292,7 @@ return [
|
|||||||
'VERIFY_TYPE_ERROR' => '核销类型错误',
|
'VERIFY_TYPE_ERROR' => '核销类型错误',
|
||||||
'VERIFY_CODE_EXPIRED' => '当前核销码已核销或已失效',
|
'VERIFY_CODE_EXPIRED' => '当前核销码已核销或已失效',
|
||||||
'VERIFIER_NOT_EXIST' => '核销员不存在',
|
'VERIFIER_NOT_EXIST' => '核销员不存在',
|
||||||
'VERIFIER_EXIST'=>'核销员已存在',
|
'VERIFIER_EXIST' => '核销员已存在',
|
||||||
'VERIFIER_NOT_AUTH' => '该核销员没有权限',
|
'VERIFIER_NOT_AUTH' => '该核销员没有权限',
|
||||||
|
|
||||||
//签到相关
|
//签到相关
|
||||||
@ -319,5 +317,18 @@ return [
|
|||||||
'DIRECTORY' => '目录',
|
'DIRECTORY' => '目录',
|
||||||
'WAS_NOT_CREATED' => '创建失败',
|
'WAS_NOT_CREATED' => '创建失败',
|
||||||
|
|
||||||
'PRINTER_NOT_EXIST' => '打印机不存在'
|
'PRINTER_NOT_EXIST' => '打印机不存在',
|
||||||
|
/*******************************************牛云短信 start ********************************************************/
|
||||||
|
'NIU_SMS_ENABLE_FAILED' => '需登录账号并配置签名后才能启用牛云短信',
|
||||||
|
'ACCOUNT_ERROR_RELOGIN' => '牛云短信账号异常,请重新登录账号',
|
||||||
|
'ACCOUNT_BIND_MOBILE_ERROR' => '手机号错误',
|
||||||
|
'TEMPLATE_NOT_SMS_CONTENT' => '当前模版未配置短信内容',
|
||||||
|
'TEMPLATE_IS_PASS' => '审核通过的模版不允许修改',
|
||||||
|
'TEMPLATE_NOT_REPORT' => '短信模版暂未报备',
|
||||||
|
'URL_NOT_FOUND' => '未配置远程服务地址,请在ENV中配置{NIU_SHOP_PREFIX}',
|
||||||
|
'SYSTEM_IS_ERROR' => '远程服务器异常,请联系售后人员',
|
||||||
|
|
||||||
|
'TEMPLATE_ERROR' => '短信模版ID错误或审核未通过',
|
||||||
|
'TEMPLATE_USE_ERROR' => '短信模版参数不一致需修改/重新报备',
|
||||||
|
/*******************************************牛云短信 end ********************************************************/
|
||||||
];
|
];
|
||||||
|
|||||||
@ -76,6 +76,27 @@ return [
|
|||||||
'var_balance' => '会员余额',
|
'var_balance' => '会员余额',
|
||||||
'var_point' => '会员积分',
|
'var_point' => '会员积分',
|
||||||
],
|
],
|
||||||
|
'dict_sms_api'=>[
|
||||||
|
'template_status_again_report'=>'需重新报备',
|
||||||
|
'template_status_need_edit'=>'需修改报备参数',
|
||||||
|
'template_status_not_report'=>'未报备',
|
||||||
|
'template_status_wait'=>'待审核',
|
||||||
|
'template_status_pass'=>'审核通过',
|
||||||
|
'template_status_refuse'=>'审核不通过',
|
||||||
|
|
||||||
|
//验证码-1 行业通知-2 营销推广-3
|
||||||
|
'template_type_verify_code'=>'验证码',
|
||||||
|
'template_type_industry_notice'=>'行业通知',
|
||||||
|
'template_type_sem'=>'营销推广',
|
||||||
|
|
||||||
|
'sign_audit_status_wait'=>'待审核',
|
||||||
|
'sign_audit_status_pass'=>'审核通过',
|
||||||
|
'sign_audit_status_refuse'=>'审核不通过',
|
||||||
|
|
||||||
|
'balance_add'=>'充值',
|
||||||
|
'balance_reduce'=>'扣减'
|
||||||
|
],
|
||||||
|
|
||||||
//上传附件相关
|
//上传附件相关
|
||||||
'dict_file' => [
|
'dict_file' => [
|
||||||
//上传附件类型
|
//上传附件类型
|
||||||
@ -376,6 +397,7 @@ return [
|
|||||||
'oct' => '10月',
|
'oct' => '10月',
|
||||||
'nov' => '11月',
|
'nov' => '11月',
|
||||||
'dec' => '12月',
|
'dec' => '12月',
|
||||||
|
|
||||||
],
|
],
|
||||||
'dict_site_layout' => [
|
'dict_site_layout' => [
|
||||||
'default' => '默认'
|
'default' => '默认'
|
||||||
@ -387,7 +409,8 @@ return [
|
|||||||
'auditing' => '审核中',
|
'auditing' => '审核中',
|
||||||
'audit_success' => '审核通过',
|
'audit_success' => '审核通过',
|
||||||
'audit_fail' => '审核失败',
|
'audit_fail' => '审核失败',
|
||||||
'published' => '已发布'
|
'published' => '已发布',
|
||||||
|
'undo' => '已撤回'
|
||||||
],
|
],
|
||||||
'dict_wechat_media' => [
|
'dict_wechat_media' => [
|
||||||
'type_image' => '图片',
|
'type_image' => '图片',
|
||||||
@ -425,5 +448,13 @@ return [
|
|||||||
'ready' => '准备执行',
|
'ready' => '准备执行',
|
||||||
'complete' => '完成',
|
'complete' => '完成',
|
||||||
'fail' => '失败'
|
'fail' => '失败'
|
||||||
|
],
|
||||||
|
'common_active_short'=>[
|
||||||
|
'impulse_buy'=>'顺',
|
||||||
|
'gift_card'=>'礼',
|
||||||
|
'discount'=>'折',
|
||||||
|
'exchange'=>'积',
|
||||||
|
'manjiansong'=>'满减',
|
||||||
|
'newcomer_discount'=>'新',
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|||||||
@ -50,6 +50,7 @@ return [
|
|||||||
'username_max' => '用户名不能超过30个字符',
|
'username_max' => '用户名不能超过30个字符',
|
||||||
'mobile_require' => '手机号必须填写',
|
'mobile_require' => '手机号必须填写',
|
||||||
'mobile_mobile' => '手机号格式错误',
|
'mobile_mobile' => '手机号格式错误',
|
||||||
|
'mobile_unique' => '手机号已存在',
|
||||||
'sex_bot_exist' => '不存在的性别',
|
'sex_bot_exist' => '不存在的性别',
|
||||||
'label_name_require' => '会员标签必须填写',
|
'label_name_require' => '会员标签必须填写',
|
||||||
'birthday_format' => '生日日期格式有误',
|
'birthday_format' => '生日日期格式有误',
|
||||||
|
|||||||
@ -22,6 +22,7 @@ class Sms
|
|||||||
if ($template[ 'is_sms' ]) {
|
if ($template[ 'is_sms' ]) {
|
||||||
$sms_id = $template[ 'sms_id' ];//发送模板id
|
$sms_id = $template[ 'sms_id' ];//发送模板id
|
||||||
$content = $template[ 'sms' ][ 'content' ];
|
$content = $template[ 'sms' ][ 'content' ];
|
||||||
|
$url_params = $template[ 'sms' ][ 'url_params' ] ?? [];
|
||||||
$member_id = $to[ 'member_id' ] ?? 0;
|
$member_id = $to[ 'member_id' ] ?? 0;
|
||||||
$uid = $to[ 'uid' ] ?? 0;
|
$uid = $to[ 'uid' ] ?? 0;
|
||||||
if (!$mobile) {
|
if (!$mobile) {
|
||||||
@ -48,7 +49,8 @@ class Sms
|
|||||||
'content' => $content,
|
'content' => $content,
|
||||||
'result' => ''
|
'result' => ''
|
||||||
);
|
);
|
||||||
$core_sms_service->send($mobile, $vars, $key, $sms_id, $content);
|
|
||||||
|
$core_sms_service->send($mobile, $vars, $key, $sms_id, $content, $url_params);
|
||||||
( new CoreNoticeLogService() )->add($log_data);
|
( new CoreNoticeLogService() )->add($log_data);
|
||||||
} catch (NoticeException $e) {
|
} catch (NoticeException $e) {
|
||||||
$log_data[ 'result' ] = $e->getMessage();
|
$log_data[ 'result' ] = $e->getMessage();
|
||||||
|
|||||||
@ -5,8 +5,8 @@ namespace app\listener\notice_template;
|
|||||||
class BaseNoticeTemplate
|
class BaseNoticeTemplate
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param $vars 模板变量
|
* @param $vars `模板变量`
|
||||||
* @param $to 发送对象
|
* @param $to `发送对象`
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function toReturn($vars, $to)
|
public function toReturn($vars, $to)
|
||||||
|
|||||||
@ -44,7 +44,7 @@ class AccountLog extends BaseModel
|
|||||||
*/
|
*/
|
||||||
public function getTypeNameAttr($value, $data)
|
public function getTypeNameAttr($value, $data)
|
||||||
{
|
{
|
||||||
return AccountLogDict::getType()[$data['type']] ?? '';
|
return AccountLogDict::getType()[ $data[ 'type' ] ] ?? '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,10 +55,10 @@ class AccountLog extends BaseModel
|
|||||||
*/
|
*/
|
||||||
public function getPayInfoAttr($value, $data)
|
public function getPayInfoAttr($value, $data)
|
||||||
{
|
{
|
||||||
return match ($data['type']) {
|
return match ( $data[ 'type' ] ) {
|
||||||
'pay' => (new Pay())->where([['out_trade_no', '=', $data['trade_no']]])->append(['type_name'])->findOrEmpty()->toArray(),
|
'pay' => ( new Pay() )->where([ [ 'out_trade_no', '=', $data[ 'trade_no' ] ] ])->append([ 'type_name' ])->findOrEmpty()->toArray(),
|
||||||
'refund' => (new Refund())->where([['refund_no', '=', $data['trade_no']]])->append(['type_name'])->findOrEmpty()->toArray(),
|
'refund' => ( new Refund() )->where([ [ 'refund_no', '=', $data[ 'trade_no' ] ] ])->append([ 'type_name' ])->findOrEmpty()->toArray(),
|
||||||
'transfer' => (new Transfer())->where([['transfer_no', '=', $data['trade_no']]])->append(['transfer_type_name'])->findOrEmpty()->toArray(),
|
'transfer' => ( new Transfer() )->where([ [ 'transfer_no', '=', $data[ 'trade_no' ] ] ])->append([ 'transfer_type_name' ])->findOrEmpty()->toArray(),
|
||||||
default => [],
|
default => [],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -77,6 +77,20 @@ class AccountLog extends BaseModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态字段转化
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function searchTradeNoAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value != '') {
|
||||||
|
$query->where('trade_no', 'like', "%$value%");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 金额转化
|
* 金额转化
|
||||||
* @param $value
|
* @param $value
|
||||||
@ -85,10 +99,10 @@ class AccountLog extends BaseModel
|
|||||||
*/
|
*/
|
||||||
public function getMoneyAttr($value, $data)
|
public function getMoneyAttr($value, $data)
|
||||||
{
|
{
|
||||||
if (str_contains($data['money'], "-")) {
|
if (str_contains($data[ 'money' ], "-")) {
|
||||||
return $data['money'];
|
return $data[ 'money' ];
|
||||||
} else {
|
} else {
|
||||||
return "+" . $data['money'];
|
return "+" . $data[ 'money' ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,14 +114,14 @@ class AccountLog extends BaseModel
|
|||||||
*/
|
*/
|
||||||
public function searchCreateTimeAttr(Query $query, $value, $data)
|
public function searchCreateTimeAttr(Query $query, $value, $data)
|
||||||
{
|
{
|
||||||
$start_time = empty($value[0]) ? 0 : strtotime($value[0]);
|
$start_time = empty($value[ 0 ]) ? 0 : strtotime($value[ 0 ]);
|
||||||
$end_time = empty($value[1]) ? 0 : strtotime($value[1]);
|
$end_time = empty($value[ 1 ]) ? 0 : strtotime($value[ 1 ]);
|
||||||
if ($start_time > 0 && $end_time > 0) {
|
if ($start_time > 0 && $end_time > 0) {
|
||||||
$query->whereBetweenTime('create_time', $start_time, $end_time);
|
$query->whereBetweenTime('create_time', $start_time, $end_time);
|
||||||
} else if ($start_time > 0 && $end_time == 0) {
|
} else if ($start_time > 0 && $end_time == 0) {
|
||||||
$query->where([['create_time', '>=', $start_time]]);
|
$query->where([ [ 'create_time', '>=', $start_time ] ]);
|
||||||
} else if ($start_time == 0 && $end_time > 0) {
|
} else if ($start_time == 0 && $end_time > 0) {
|
||||||
$query->where([['create_time', '<=', $end_time]]);
|
$query->where([ [ 'create_time', '<=', $end_time ] ]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
49
niucloud/app/model/sys/NiuSmsTemplate.php
Normal file
49
niucloud/app/model/sys/NiuSmsTemplate.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\model\sys;
|
||||||
|
|
||||||
|
|
||||||
|
use app\dict\notice\NoticeTypeDict;
|
||||||
|
use core\base\BaseModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 牛云短信消息模型审核表
|
||||||
|
* Class SysMessage
|
||||||
|
* @package app\model\sys
|
||||||
|
*/
|
||||||
|
class NiuSmsTemplate extends BaseModel
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据表主键
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $pk = 'id';
|
||||||
|
|
||||||
|
public $json = ['report_info','param_json'];
|
||||||
|
public $jsonAssoc = true;
|
||||||
|
/**
|
||||||
|
* 模型名称
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $name = 'niu_sms_template';
|
||||||
|
|
||||||
|
public function getTemplateTypeNameAttr($value, $data)
|
||||||
|
{
|
||||||
|
return NoticeTypeDict::getTemplateType($data['template_type']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAuditStatusNameAttr($value, $data)
|
||||||
|
{
|
||||||
|
return NoticeTypeDict::getTemplateAuditStatus($data['audit_status']);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -190,6 +190,9 @@ class GenerateService extends BaseAdminService
|
|||||||
$table_name = preg_replace("/^{$tablePrefix}/", '', $table_info['Name'], 1);
|
$table_name = preg_replace("/^{$tablePrefix}/", '', $table_info['Name'], 1);
|
||||||
$fields = Db::name($table_name)->getFields();
|
$fields = Db::name($table_name)->getFields();
|
||||||
|
|
||||||
|
$generate_table = (new GenerateTable())->where([ [ 'table_name', '=', $table_name] ])->findOrEmpty();
|
||||||
|
if (!$generate_table->isEmpty()) return $generate_table['id'];
|
||||||
|
|
||||||
$add_table_data = [
|
$add_table_data = [
|
||||||
'table_name' => $table_name,
|
'table_name' => $table_name,
|
||||||
'table_content' => $table_info['Comment'],
|
'table_content' => $table_info['Comment'],
|
||||||
|
|||||||
@ -37,7 +37,7 @@ class MemberCashOutService extends BaseAdminService
|
|||||||
public function getPage(array $where = [])
|
public function getPage(array $where = [])
|
||||||
{
|
{
|
||||||
|
|
||||||
$field = 'id,cash_out_no,member_cash_out.member_id,account_type,transfer_type,transfer_realname,transfer_mobile,transfer_bank,transfer_account,transfer_fail_reason,transfer_status,transfer_time,apply_money,rate,service_money,member_cash_out.money,audit_time,member_cash_out.status,remark,member_cash_out.create_time,refuse_reason,transfer_no, transfer_payment_code';
|
$field = 'id,cash_out_no,member_cash_out.member_id,account_type,transfer_type,transfer_realname,transfer_mobile,transfer_bank,transfer_account,transfer_fail_reason,transfer_status,transfer_time,apply_money,rate,service_money,member_cash_out.money,audit_time,member_cash_out.status,member_cash_out.remark,member_cash_out.create_time,refuse_reason,transfer_no, transfer_payment_code';
|
||||||
$member_where = [];
|
$member_where = [];
|
||||||
if(!empty($where['keywords']))
|
if(!empty($where['keywords']))
|
||||||
{
|
{
|
||||||
|
|||||||
676
niucloud/app/service/admin/notice/NiuSmsService.php
Normal file
676
niucloud/app/service/admin/notice/NiuSmsService.php
Normal file
@ -0,0 +1,676 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\service\admin\notice;
|
||||||
|
|
||||||
|
use app\dict\notice\NoticeDict;
|
||||||
|
use app\dict\notice\NoticeTypeDict;
|
||||||
|
use app\dict\sys\SmsDict;
|
||||||
|
use app\model\addon\Addon;
|
||||||
|
use app\model\sys\NiuSmsTemplate;
|
||||||
|
use app\service\core\notice\CoreNiuSmsService;
|
||||||
|
use core\base\BaseAdminService;
|
||||||
|
use core\exception\AdminException;
|
||||||
|
use core\exception\ApiException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息管理服务层
|
||||||
|
*/
|
||||||
|
class NiuSmsService extends BaseAdminService
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->template_model = new NiuSmsTemplate();
|
||||||
|
$this->niu_service = new CoreNiuSmsService();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function enableNiuSms($enable)
|
||||||
|
{
|
||||||
|
if ($enable == 1) {
|
||||||
|
$config = $this->niu_service->getNiuLoginConfig(true);
|
||||||
|
if (empty($config) || !isset($config[SmsDict::NIUSMS]) || empty($config[SmsDict::NIUSMS]['username']) || empty($config[SmsDict::NIUSMS]['password']) || empty($config[SmsDict::NIUSMS]['signature'])) {
|
||||||
|
throw new AdminException("NIU_SMS_ENABLE_FAILED");
|
||||||
|
}
|
||||||
|
$this->niu_service->setNiuLoginConfig(['default' => SmsDict::NIUSMS]);
|
||||||
|
} else {
|
||||||
|
$this->niu_service->setNiuLoginConfig(['default' => '']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前登录的牛云短信账号
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getConfig()
|
||||||
|
{
|
||||||
|
$login_config = $this->niu_service->getNiuLoginConfig(true);
|
||||||
|
return [
|
||||||
|
'is_login' => empty($login_config[SmsDict::NIUSMS]) ? 0 : 1,
|
||||||
|
'username' => $login_config[SmsDict::NIUSMS]['username'] ?? '',
|
||||||
|
'is_enable' => (($login_config['default'] ?? '') == SmsDict::NIUSMS) ? 1 : 0,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取套餐列表
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function packageList($params)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->packageList($params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送动态码
|
||||||
|
* @param $mobile
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function sendMobileCode($params)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->sendMobileCode($params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送动态码
|
||||||
|
* @param $mobile
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function captcha()
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->captcha();
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册牛云短信账号
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function registerAccount($data)
|
||||||
|
{
|
||||||
|
$data['imgUrl'] = !empty($data['imgUrl']) ? request()->domain() . $data['imgUrl'] : "";
|
||||||
|
$res = $this->niu_service->registerAccount($data);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录牛云短信账号
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function loginAccount($params)
|
||||||
|
{
|
||||||
|
$account_info = $this->niu_service->loginAccount($params);
|
||||||
|
if ($account_info) {
|
||||||
|
(new CoreNiuSmsService())->setNiuLoginConfig($params);
|
||||||
|
}
|
||||||
|
return $account_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑牛云短信账号信息(暂时只有 手机号和默认签名)
|
||||||
|
* @param $username
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function editAccount($username, $params)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->editAccount($username, $params);
|
||||||
|
$this->niu_service->setNiuLoginConfig($params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取牛云短信账号信息
|
||||||
|
* @param $username
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function accountInfo($username)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->accountInfo($username);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置转牛云短信账号密码
|
||||||
|
* @param $username
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function resetPassword($username, $params)
|
||||||
|
{
|
||||||
|
$account_info = $this->accountInfo($username);
|
||||||
|
$mobile_arr = explode(",", $account_info['mobiles']);
|
||||||
|
if (!in_array($params['mobile'], $mobile_arr)) {
|
||||||
|
throw new ApiException('ACCOUNT_BIND_MOBILE_ERROR');
|
||||||
|
}
|
||||||
|
$res = $this->niu_service->resetPassword($username, $params);
|
||||||
|
$this->niu_service->setNiuLoginConfig(['username' => $username, 'password' => $res['newPassword']]);
|
||||||
|
return [
|
||||||
|
'password' => $res['newPassword'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置转牛云短信账号密码
|
||||||
|
* @param $username
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function forgetPassword($username, $params)
|
||||||
|
{
|
||||||
|
$account_info = $this->accountInfo($username);
|
||||||
|
$mobile_arr = explode(",", $account_info['mobiles']);
|
||||||
|
if (!in_array($params['mobile'], $mobile_arr)) {
|
||||||
|
throw new ApiException('ACCOUNT_BIND_MOBILE_ERROR');
|
||||||
|
}
|
||||||
|
$res = $this->niu_service->resetPassword($username, $params);
|
||||||
|
$this->niu_service->setNiuLoginConfig(['username' => $username, 'password' => $res['newPassword']]);
|
||||||
|
return [
|
||||||
|
'password' => $res['newPassword'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取牛云短信账号发送短信列表
|
||||||
|
* @param $username
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function accountSendList($username, $params)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->accountSendList($username, $params);
|
||||||
|
$return = $this->formatListPaginate($res['page']);
|
||||||
|
$return['data'] = $res['records'];
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取签名列表
|
||||||
|
* @param $username
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getSignList($username)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->signList($username);
|
||||||
|
$return = $this->formatListPaginate($res['page']);
|
||||||
|
$return['data'] = $res['signatures'];
|
||||||
|
$config = $this->niu_service->getNiuLoginConfig();
|
||||||
|
foreach ($return['data'] as &$item) {
|
||||||
|
$item['auditResultName'] = NoticeTypeDict::getSignAuditType($item['auditResult']);
|
||||||
|
$item['createTime'] = date('Y-m-d H:i:s', ($item['createTime'] / 1000));
|
||||||
|
$item['is_default'] = ($config['signature'] == $item['sign']) ? 1 : 0;
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取签名信息
|
||||||
|
* @param $username
|
||||||
|
* @param $signature
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function signInfo($username, $signature)
|
||||||
|
{
|
||||||
|
return $this->niu_service->signInfo($username, $signature);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取创建签名初始化的配置信息
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function signCreateConfig()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'sign_source_list' => NoticeTypeDict::getSignSource(),
|
||||||
|
'sign_type_list' => NoticeTypeDict::getSignType(),
|
||||||
|
'sign_default_list' => NoticeTypeDict::getSignDefault()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名创建
|
||||||
|
* @param $username
|
||||||
|
* @param $params
|
||||||
|
*/
|
||||||
|
public function signCreate($username, $params)
|
||||||
|
{
|
||||||
|
$params['imgUrl'] = !empty($params['imgUrl']) ? request()->domain() . $params['imgUrl'] : "";
|
||||||
|
$res = $this->niu_service->signCreate($username, $params);
|
||||||
|
if (!empty($res['failList'])) {
|
||||||
|
throw new AdminException($res['failList'][0]['msg']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名创建
|
||||||
|
* @param $username
|
||||||
|
* @param $params
|
||||||
|
*/
|
||||||
|
public function signDelete($username, $params)
|
||||||
|
{
|
||||||
|
$config = $this->niu_service->getNiuLoginConfig();
|
||||||
|
$params['password'] = $config['password'];
|
||||||
|
$fail_list = $this->niu_service->signDelete($username, $params);
|
||||||
|
if (in_array($config['signature'], $params['signatures']) && !in_array($config['signature'], $fail_list)) {
|
||||||
|
$this->editAccount($username, ['signature' => '']);
|
||||||
|
}
|
||||||
|
return $fail_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拉取模版状态
|
||||||
|
* @param $sms_type
|
||||||
|
* @param $username
|
||||||
|
* @param $page
|
||||||
|
* @return void|array
|
||||||
|
*/
|
||||||
|
public function syncTemplateList($sms_type, $username)
|
||||||
|
{
|
||||||
|
$template_list = $this->getTemplateList($sms_type, $username);
|
||||||
|
$repeat_name_arr = [];
|
||||||
|
$is_repeat = 0;
|
||||||
|
foreach ($template_list as $item) {
|
||||||
|
$repeat_name_arr[$item['name']][] = $item['addon'];
|
||||||
|
if (count($repeat_name_arr[$item['name']]) > 1) {
|
||||||
|
$is_repeat = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($is_repeat == 1) {
|
||||||
|
foreach ($repeat_name_arr as $name => $values) {
|
||||||
|
if (count($values) == 1) {
|
||||||
|
unset($repeat_name_arr[$name]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ['repeat_list' => $repeat_name_arr];
|
||||||
|
} else {
|
||||||
|
$repeat_name_arr = [];
|
||||||
|
}
|
||||||
|
$this->execsync($sms_type, $username, $template_list);
|
||||||
|
return ['repeat_list' => $repeat_name_arr];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function execsync($sms_type, $username, $template_list, $page = 1)
|
||||||
|
{
|
||||||
|
$name_template_list = array_column($template_list, null, 'name');
|
||||||
|
$limit = 100;
|
||||||
|
$api_template_data = $this->niu_service->templateList($username, ['size' => $limit]);
|
||||||
|
|
||||||
|
$total = $api_template_data['page']['total'];
|
||||||
|
$templates = $api_template_data['templates'];
|
||||||
|
$insert = [];
|
||||||
|
foreach ($templates as $template) {
|
||||||
|
$tem_id = $template['temId'];
|
||||||
|
|
||||||
|
//拉取回来的模版在项目中未配置
|
||||||
|
if (!isset($name_template_list[$template['temName']])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!empty($template['extend'])) {
|
||||||
|
$template_key = $template['extend']['template_key'] ?? "";
|
||||||
|
} else {
|
||||||
|
$template_key = $name_template_list[$template['temName']]['key'];
|
||||||
|
}
|
||||||
|
$model_info = $this->template_model->where([
|
||||||
|
['sms_type', '=', $sms_type],
|
||||||
|
['username', '=', $username],
|
||||||
|
['template_key', '=', $template_key]
|
||||||
|
])->findOrEmpty();
|
||||||
|
$data = [
|
||||||
|
'sms_type' => $sms_type,
|
||||||
|
'username' => $username,
|
||||||
|
'template_key' => $template_key,
|
||||||
|
'template_content' => $template['temContent'],
|
||||||
|
'param_json' => $template['paramJson'],
|
||||||
|
'template_type' => $template['temType'],
|
||||||
|
'audit_status' => $template['auditResult'],
|
||||||
|
'audit_msg' => $template['auditMsg'],
|
||||||
|
'template_id' => $tem_id,
|
||||||
|
'report_info' => $template,
|
||||||
|
'create_time' => $template['createTime'] / 1000,
|
||||||
|
'update_time' => time(),
|
||||||
|
];
|
||||||
|
if ($model_info->isEmpty()) {
|
||||||
|
$insert[] = $data;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$this->template_model->where('id', $model_info->id)->update($data);
|
||||||
|
}
|
||||||
|
if (!empty($insert)) {
|
||||||
|
$this->template_model->insertAll($insert);
|
||||||
|
}
|
||||||
|
if ($total > $limit * $page) {
|
||||||
|
$this->execsync($sms_type, $username, $page + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取模版列表
|
||||||
|
* @param $sms_type
|
||||||
|
* @param $username
|
||||||
|
* @param $template_key
|
||||||
|
* @return array
|
||||||
|
* @throws \think\db\exception\DataNotFoundException
|
||||||
|
* @throws \think\db\exception\DbException
|
||||||
|
* @throws \think\db\exception\ModelNotFoundException
|
||||||
|
*/
|
||||||
|
public function getTemplateList($sms_type, $username, $template_key = '')
|
||||||
|
{
|
||||||
|
$config = $this->niu_service->getNiuLoginConfig();
|
||||||
|
if (empty($config) || $config['username'] != $username) {
|
||||||
|
throw new AdminException('ACCOUNT_ERROR_RELOGIN');
|
||||||
|
}
|
||||||
|
$list = NoticeDict::getNoticeWithAddon($template_key, SmsDict::NIUSMS);
|
||||||
|
$list = $this->formatTemplateList($list);
|
||||||
|
|
||||||
|
|
||||||
|
$searchKeys = array_column($list, 'key');
|
||||||
|
|
||||||
|
$report_list = $this->template_model->whereIn('template_key', $searchKeys)->where([
|
||||||
|
['sms_type', '=', $sms_type],
|
||||||
|
['username', '=', $username],
|
||||||
|
])->select()->toArray();
|
||||||
|
$report_list = array_column($report_list, null, 'template_key');
|
||||||
|
|
||||||
|
foreach ($list as &$item) {
|
||||||
|
$template_key = $item['key'];
|
||||||
|
$report_info = $report_list[$template_key] ?? [];
|
||||||
|
|
||||||
|
$item['template_id'] = $report_info['template_id'] ?? 0;
|
||||||
|
$item['template_type_name'] = !empty($report_info['template_type']) ? NoticeTypeDict::getTemplateType($report_info['template_type']) : "";
|
||||||
|
$item['sms_type'] = $report_info['sms_type'] ?? $sms_type;
|
||||||
|
$item['username'] = $report_info['username'] ?? $username;
|
||||||
|
|
||||||
|
$params_json = array_keys($report_info['param_json'] ?? []);
|
||||||
|
sort($params_json);
|
||||||
|
$variable = array_keys($item['variable'] ?? []);
|
||||||
|
sort($variable);
|
||||||
|
|
||||||
|
$audit_status = $report_info['audit_status'] ?? NoticeTypeDict::TEMPLATE_AUDIT_STATUS_NOT_REPORT;
|
||||||
|
if (!empty($report_info) && $variable != $params_json) {
|
||||||
|
$error_status = $audit_status == NoticeTypeDict::TEMPLATE_AUDIT_STATUS_PASS
|
||||||
|
? NoticeTypeDict::TEMPLATE_AUDIT_STATUS_NEED_AGAIN_REPORT
|
||||||
|
: NoticeTypeDict::TEMPLATE_AUDIT_STATUS_NEED_EDIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
$item['audit_info'] = [
|
||||||
|
'audit_msg' => $report_info['audit_msg'] ?? '',
|
||||||
|
'audit_status' => $audit_status,
|
||||||
|
'audit_status_name' => NoticeTypeDict::getTemplateAuditStatus($audit_status),
|
||||||
|
'error_status' => $error_status ?? '',
|
||||||
|
'error_status_name' => !empty($error_status) ? NoticeTypeDict::getTemplateAuditStatus($error_status) : ""
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkTemplateAudit($template_key, $template_id)
|
||||||
|
{
|
||||||
|
$config = $this->niu_service->getNiuLoginConfig(true);
|
||||||
|
//当前使用短信功能提供商非牛云短信无需校验模版ID是否正常
|
||||||
|
if ($config['default'] != SmsDict::NIUSMS) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
$config = $config[SmsDict::NIUSMS];
|
||||||
|
if (empty($config)) {
|
||||||
|
throw new AdminException('TEMPLATE_ERROR');
|
||||||
|
}
|
||||||
|
$template_info = $this->template_model->where([
|
||||||
|
['sms_type', '=', SmsDict::NIUSMS],
|
||||||
|
['template_id', '=', $template_id],
|
||||||
|
['username', '=', $config['username']],
|
||||||
|
['template_key', '=', $template_key],
|
||||||
|
])->findOrEmpty()->toArray();
|
||||||
|
$params_json = array_keys($template_info['param_json'] ?? []);
|
||||||
|
sort($params_json);
|
||||||
|
|
||||||
|
$template_config = $this->getTemplateList(SmsDict::NIUSMS, $config['username'], $template_key)[0];
|
||||||
|
|
||||||
|
$variable = array_keys($template_config['variable'] ?? []);
|
||||||
|
sort($variable);
|
||||||
|
|
||||||
|
if (!empty($template_info) && $variable != $params_json) {
|
||||||
|
throw new AdminException('TEMPLATE_USE_ERROR');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($template_info) || $template_info['audit_status'] != NoticeTypeDict::TEMPLATE_AUDIT_STATUS_PASS) {
|
||||||
|
throw new AdminException('TEMPLATE_ERROR');
|
||||||
|
}
|
||||||
|
return $template_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化模版列表返回数据
|
||||||
|
* @param $list
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function formatTemplateList($list)
|
||||||
|
{
|
||||||
|
$return = [];
|
||||||
|
$addon_arr = array_keys($list);
|
||||||
|
$addon_list = (new Addon())->whereIn('key', $addon_arr)->field('key,title')->select()->toArray();
|
||||||
|
$addon_list = array_column($addon_list, 'title', 'key');
|
||||||
|
foreach ($list as $addon => $item) {
|
||||||
|
foreach ($item as $value) {
|
||||||
|
$temp = $value;
|
||||||
|
// $temp['addon'] = $addon;
|
||||||
|
$temp['addon'] = $addon_list[$addon] ?? '系统';
|
||||||
|
$str = $temp['sms']['content'] ?? "";
|
||||||
|
if (empty($str)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
preg_match_all('/\{(.*?)\}/', $str, $matches);
|
||||||
|
$result = $matches[1];
|
||||||
|
foreach ($temp['variable'] as $k => $v) {
|
||||||
|
if (!in_array($k, $result)) {
|
||||||
|
unset($temp['variable'][$k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$return[] = $temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取模版信息
|
||||||
|
* @param $sms_type
|
||||||
|
* @param $username
|
||||||
|
* @param $template_key
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function templateInfo($sms_type, $username, $template_key)
|
||||||
|
{
|
||||||
|
$template_info = $this->template_model->where([
|
||||||
|
['username', '=', $username],
|
||||||
|
['sms_type', '=', $sms_type],
|
||||||
|
['template_key', '=', $template_key],
|
||||||
|
])->findOrEmpty();
|
||||||
|
if ($template_info->isEmpty()) {
|
||||||
|
throw new AdminException('TEMPLATE_NOT_REPORT');
|
||||||
|
}
|
||||||
|
$res = $this->niu_service->templateInfo($username, $template_info->template_id);
|
||||||
|
$template_info->audit_status = $res['auditResult'] ?? $template_info->audit_status;
|
||||||
|
$template_info->save();
|
||||||
|
return $template_info->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取模版创建使用的初始化配置信息
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function templateCreateConfig()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'template_params_type_list' => NoticeTypeDict::getApiParamsType(),
|
||||||
|
'template_type_list' => NoticeTypeDict::getTemplateType(),
|
||||||
|
'template_status_list' => NoticeTypeDict::getTemplateAuditStatus()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 报备/编辑模版
|
||||||
|
* @param $sms_type
|
||||||
|
* @param $username
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function templateUpsert($sms_type, $username, $params)
|
||||||
|
{
|
||||||
|
//niusms
|
||||||
|
$template_key = $params['template_key'];
|
||||||
|
$template_info = $this->getTemplateList($sms_type, $username, $template_key)[0];
|
||||||
|
if (empty($template_info['sms']['content'])) {
|
||||||
|
throw new AdminException('TEMPLATE_NOT_SMS_CONTENT');
|
||||||
|
}
|
||||||
|
$model_info = $this->template_model->where('template_key', $template_key)->findOrEmpty();
|
||||||
|
if (!$model_info->isEmpty() && $model_info->audit_status == NoticeTypeDict::TEMPLATE_AUDIT_STATUS_PASS) {
|
||||||
|
throw new AdminException('TEMPLATE_IS_PASS');
|
||||||
|
}
|
||||||
|
$config = $this->niu_service->getNiuLoginConfig();
|
||||||
|
$data = [
|
||||||
|
'temName' => $template_info['name'],
|
||||||
|
'temType' => $params['template_type'],
|
||||||
|
'temContent' => $template_info['sms']['content'],
|
||||||
|
'paramJson' => $params['params_json'],
|
||||||
|
'extend' => ['template_key' => $template_key],
|
||||||
|
'signature' => $config['signature'],
|
||||||
|
'temId' => $params['template_id'],
|
||||||
|
];
|
||||||
|
$res = $this->niu_service->templateCreate($username, $data);
|
||||||
|
$tem_id = $res['temId'] ?? 0;
|
||||||
|
if ($model_info->isEmpty()) {
|
||||||
|
$this->template_model->create([
|
||||||
|
'sms_type' => $sms_type,
|
||||||
|
'username' => $username,
|
||||||
|
'template_key' => $template_key,
|
||||||
|
'audit_status' => NoticeTypeDict::TEMPLATE_AUDIT_STATUS_WAIT,
|
||||||
|
'template_id' => $tem_id,
|
||||||
|
'report_info' => $res ?? [],
|
||||||
|
'create_time' => time(),
|
||||||
|
'update_time' => time(),
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
$model_info->audit_status = NoticeTypeDict::TEMPLATE_AUDIT_STATUS_WAIT;
|
||||||
|
$model_info->template_id = $tem_id;
|
||||||
|
$model_info->report_info = $res ?? [];
|
||||||
|
$model_info->update_time = time();
|
||||||
|
$model_info->save();
|
||||||
|
}
|
||||||
|
return $res ?? [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清除模版报备信息
|
||||||
|
* @param $username
|
||||||
|
* @param $template_id
|
||||||
|
* @return void
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public function templateDelete($username, $template_id)
|
||||||
|
{
|
||||||
|
$config = $this->niu_service->getNiuLoginConfig();
|
||||||
|
$params['password'] = $config['password'];
|
||||||
|
$params['template_id'] = $template_id;
|
||||||
|
$this->niu_service->templateDelete($username, $params);
|
||||||
|
$this->template_model->where('template_id', $template_id)->delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化列表接口分页器
|
||||||
|
* @param $data
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function formatListPaginate($data)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'total' => $data['total'],
|
||||||
|
'per_page' => $data['size'],
|
||||||
|
'current_page' => $data['currentPage'],
|
||||||
|
'last_page' => $data['totalPage'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单列表
|
||||||
|
* @param $username
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function orderList($username, $params)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->orderList($username, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建订单
|
||||||
|
* @param $username
|
||||||
|
* @param $package_id
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function createOrder($username, $package_id)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->orderCreate($username, ['package_id' => $package_id]);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算订单
|
||||||
|
* @param $username
|
||||||
|
* @param $package_id
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function calculate($username, $package_id)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->calculate($username, ['package_id' => $package_id]);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取支付使用信息
|
||||||
|
* @param $username
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getPayInfo($username, $params)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->orderPayInfo($username, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单信息
|
||||||
|
* @param $username
|
||||||
|
* @param $out_trade_no
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function orderInfo($username, $out_trade_no)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->orderInfo($username, $out_trade_no);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单状态
|
||||||
|
* @param $username
|
||||||
|
* @param $out_trade_no
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function orderStatus($username, $out_trade_no)
|
||||||
|
{
|
||||||
|
$res = $this->niu_service->orderStatus($username, $out_trade_no);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -13,11 +13,13 @@ namespace app\service\admin\notice;
|
|||||||
|
|
||||||
use app\dict\notice\NoticeDict;
|
use app\dict\notice\NoticeDict;
|
||||||
use app\dict\notice\NoticeTypeDict;
|
use app\dict\notice\NoticeTypeDict;
|
||||||
|
use app\dict\sys\ConfigKeyDict;
|
||||||
|
use app\dict\sys\SmsDict;
|
||||||
use app\model\sys\SysNotice;
|
use app\model\sys\SysNotice;
|
||||||
use app\service\core\notice\CoreNoticeService;
|
use app\service\core\notice\CoreNoticeService;
|
||||||
|
use app\service\core\sys\CoreConfigService;
|
||||||
use core\base\BaseAdminService;
|
use core\base\BaseAdminService;
|
||||||
use core\exception\AdminException;
|
use core\exception\AdminException;
|
||||||
use think\Response;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息管理服务层
|
* 消息管理服务层
|
||||||
@ -56,7 +58,8 @@ class NoticeService extends BaseAdminService
|
|||||||
* @param $value
|
* @param $value
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function modify(string $key, string $field_type, $value){
|
public function modify(string $key, string $field_type, $value)
|
||||||
|
{
|
||||||
$data = array(
|
$data = array(
|
||||||
$field_type => $value
|
$field_type => $value
|
||||||
);
|
);
|
||||||
@ -71,9 +74,9 @@ class NoticeService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function editMessageStatus(string $key, string $type, int $status)
|
public function editMessageStatus(string $key, string $type, int $status)
|
||||||
{
|
{
|
||||||
if(!array_key_exists($type, NoticeTypeDict::getType())) throw new AdminException('NOTICE_TYPE_NOT_EXIST');
|
if (!array_key_exists($type, NoticeTypeDict::getType())) throw new AdminException('NOTICE_TYPE_NOT_EXIST');
|
||||||
if(!array_key_exists($key, NoticeDict::getNotice())) return fail('NOTICE_TYPE_NOT_EXIST');
|
if (!array_key_exists($key, NoticeDict::getNotice())) return fail('NOTICE_TYPE_NOT_EXIST');
|
||||||
return (new CoreNoticeService())->edit($key, ['is_'.$type => $status]);
|
return (new CoreNoticeService())->edit($key, ['is_' . $type => $status]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -84,11 +87,10 @@ class NoticeService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function edit(string $key, string $type, array $data)
|
public function edit(string $key, string $type, array $data)
|
||||||
{
|
{
|
||||||
if(!array_key_exists($type, NoticeTypeDict::getType())) throw new AdminException('NOTICE_TYPE_NOT_EXIST');
|
if (!array_key_exists($type, NoticeTypeDict::getType())) throw new AdminException('NOTICE_TYPE_NOT_EXIST');
|
||||||
if(!array_key_exists($key, NoticeDict::getNotice())) return fail('NOTICE_TYPE_NOT_EXIST');
|
if (!array_key_exists($key, NoticeDict::getNotice())) return fail('NOTICE_TYPE_NOT_EXIST');
|
||||||
$save_data = ['is_'.$type => $data['status']];
|
$save_data = ['is_' . $type => $data['status']];
|
||||||
switch ($type)
|
switch ($type) {
|
||||||
{
|
|
||||||
case NoticeTypeDict::SMS:
|
case NoticeTypeDict::SMS:
|
||||||
$save_data['sms_id'] = $data['sms_id'] ?? '';
|
$save_data['sms_id'] = $data['sms_id'] ?? '';
|
||||||
break;
|
break;
|
||||||
@ -99,9 +101,10 @@ class NoticeService extends BaseAdminService
|
|||||||
case NoticeTypeDict::WEAPP:
|
case NoticeTypeDict::WEAPP:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if ($type == NoticeTypeDict::SMS && $data['status'] == 1) {
|
||||||
|
(new NiuSmsService())->checkTemplateAudit($data['key'], $data['sms_id']);
|
||||||
|
}
|
||||||
return (new CoreNoticeService())->edit($key, $save_data);
|
return (new CoreNoticeService())->edit($key, $save_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,10 +12,12 @@
|
|||||||
namespace app\service\admin\notice;
|
namespace app\service\admin\notice;
|
||||||
|
|
||||||
use app\dict\common\CommonDict;
|
use app\dict\common\CommonDict;
|
||||||
|
use app\dict\sys\ConfigKeyDict;
|
||||||
use app\dict\sys\SmsDict;
|
use app\dict\sys\SmsDict;
|
||||||
use app\service\core\sys\CoreConfigService;
|
use app\service\core\sys\CoreConfigService;
|
||||||
use core\base\BaseAdminService;
|
use core\base\BaseAdminService;
|
||||||
use core\exception\AdminException;
|
use core\exception\AdminException;
|
||||||
|
use think\Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 短信配置服务层
|
* 短信配置服务层
|
||||||
@ -33,8 +35,8 @@ class SmsService extends BaseAdminService
|
|||||||
public function getList()
|
public function getList()
|
||||||
{
|
{
|
||||||
$sms_type_list = SmsDict::getType();
|
$sms_type_list = SmsDict::getType();
|
||||||
$info = (new CoreConfigService())->getConfig('SMS');
|
$info = (new CoreConfigService())->getConfig(ConfigKeyDict::SMS);
|
||||||
if(empty($info))
|
if(empty($info) || !isset($info['value']['default']))
|
||||||
{
|
{
|
||||||
$config_type = ['default' => ''];//初始化
|
$config_type = ['default' => ''];//初始化
|
||||||
}else
|
}else
|
||||||
@ -73,8 +75,8 @@ class SmsService extends BaseAdminService
|
|||||||
{
|
{
|
||||||
$sms_type_list = SmsDict::getType();
|
$sms_type_list = SmsDict::getType();
|
||||||
if(!array_key_exists($sms_type, $sms_type_list)) throw new AdminException('SMS_TYPE_NOT_EXIST');
|
if(!array_key_exists($sms_type, $sms_type_list)) throw new AdminException('SMS_TYPE_NOT_EXIST');
|
||||||
$info = (new CoreConfigService())->getConfig('SMS');
|
$info = (new CoreConfigService())->getConfig(ConfigKeyDict::SMS);
|
||||||
if(empty($info))
|
if(empty($info) || !isset($info['value']['default']))
|
||||||
{
|
{
|
||||||
$config_type = ['default' => ''];//初始化
|
$config_type = ['default' => ''];//初始化
|
||||||
}else
|
}else
|
||||||
@ -110,8 +112,8 @@ class SmsService extends BaseAdminService
|
|||||||
{
|
{
|
||||||
$sms_type_list = SmsDict::getType();
|
$sms_type_list = SmsDict::getType();
|
||||||
if(!array_key_exists($sms_type, $sms_type_list)) throw new AdminException('SMS_TYPE_NOT_EXIST');
|
if(!array_key_exists($sms_type, $sms_type_list)) throw new AdminException('SMS_TYPE_NOT_EXIST');
|
||||||
$info = (new CoreConfigService())->getConfig('SMS');
|
$info = (new CoreConfigService())->getConfig(ConfigKeyDict::SMS);
|
||||||
if(empty($info))
|
if(empty($info) || !isset($info['value']['default']))
|
||||||
{
|
{
|
||||||
$config['default'] = '';
|
$config['default'] = '';
|
||||||
|
|
||||||
@ -132,7 +134,7 @@ class SmsService extends BaseAdminService
|
|||||||
$config[$sms_type][$k_param] = $value;
|
$config[$sms_type][$k_param] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (new CoreConfigService())->setConfig('SMS', $config);
|
return (new CoreConfigService())->setConfig(ConfigKeyDict::SMS, $config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -37,9 +37,8 @@ class AccountLogService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function getPage(array $where = [])
|
public function getPage(array $where = [])
|
||||||
{
|
{
|
||||||
|
|
||||||
$field = 'id, type, money, trade_no, create_time';
|
$field = 'id, type, money, trade_no, create_time';
|
||||||
$search_model = $this->model->withSearch([ 'create_time', 'type' ], $where)->field($field)->append([ 'type_name', 'money', 'pay_info' ])->order('create_time desc');
|
$search_model = $this->model->withSearch([ 'create_time', 'type', 'trade_no' ], $where)->field($field)->append([ 'type_name', 'money', 'pay_info' ])->order('create_time desc');
|
||||||
return $this->pageQuery($search_model);
|
return $this->pageQuery($search_model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -12,8 +12,10 @@
|
|||||||
namespace app\service\admin\schedule;
|
namespace app\service\admin\schedule;
|
||||||
|
|
||||||
|
|
||||||
|
use app\dict\schedule\ScheduleDict;
|
||||||
use app\service\core\schedule\CoreScheduleService;
|
use app\service\core\schedule\CoreScheduleService;
|
||||||
use core\base\BaseAdminService;
|
use core\base\BaseAdminService;
|
||||||
|
use core\exception\AdminException;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,7 +69,11 @@ class ScheduleService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function add(array $data)
|
public function add(array $data)
|
||||||
{
|
{
|
||||||
$res = (new CoreScheduleService())->add($data);
|
if (!empty($data['time'])) {
|
||||||
|
$this->checkTimeCycle($data['time']);
|
||||||
|
}
|
||||||
|
|
||||||
|
(new CoreScheduleService())->add($data);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -80,10 +86,42 @@ class ScheduleService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function edit(int $id, array $data)
|
public function edit(int $id, array $data)
|
||||||
{
|
{
|
||||||
|
if (!empty($data['time'])) {
|
||||||
|
$this->checkTimeCycle($data['time']);
|
||||||
|
}
|
||||||
(new CoreScheduleService())->edit($id, $data);
|
(new CoreScheduleService())->edit($id, $data);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验任务时间配置
|
||||||
|
* @param array $time
|
||||||
|
* @throws AdminException
|
||||||
|
*/
|
||||||
|
protected function checkTimeCycle(array $time)
|
||||||
|
{
|
||||||
|
$type = $time['type'] ?? null;
|
||||||
|
|
||||||
|
// 配置要求字段
|
||||||
|
$rules = [
|
||||||
|
ScheduleDict::MIN => ['min'],
|
||||||
|
ScheduleDict::HOUR => ['hour', 'min'],
|
||||||
|
ScheduleDict::DAY => ['day', 'hour', 'min'],
|
||||||
|
ScheduleDict::WEEK => ['hour', 'min'],
|
||||||
|
ScheduleDict::MONTH => ['day', 'hour', 'min'],
|
||||||
|
];
|
||||||
|
|
||||||
|
if (!isset($rules[$type])) {
|
||||||
|
throw new AdminException('TASK_CYCLE_ERROR');
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($rules[$type] as $field) {
|
||||||
|
if (empty($time[$field])) {
|
||||||
|
throw new AdminException('TASK_CYCLE_ERROR');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除
|
* 删除
|
||||||
* @param int $id
|
* @param int $id
|
||||||
|
|||||||
@ -236,77 +236,4 @@ class AttachmentService extends BaseAdminService
|
|||||||
return SysAttachmentCategory::where($where)->field('id,name,type')->order('id desc')->select()->toArray();
|
return SysAttachmentCategory::where($where)->field('id,name,type')->order('id desc')->select()->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取图标库分类列表
|
|
||||||
* @param array $data
|
|
||||||
* @return array|null
|
|
||||||
*/
|
|
||||||
public function getIconCategoryList(array $data)
|
|
||||||
{
|
|
||||||
$icon_list = IconDict::getIcon();
|
|
||||||
foreach ($icon_list as $k => $v) {
|
|
||||||
unset($icon_list[ $k ][ 'glyphs' ]);
|
|
||||||
if (isset($data[ 'name' ]) && $data[ 'name' ] != '' && !str_contains($v[ 'name' ], $data[ 'name' ])) {
|
|
||||||
unset($icon_list[ $k ]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return array_values($icon_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取图标库列表
|
|
||||||
* @param array $data
|
|
||||||
* @return array|null
|
|
||||||
*/
|
|
||||||
public function getIconList(array $data)
|
|
||||||
{
|
|
||||||
$icon_list = IconDict::getIcon();
|
|
||||||
|
|
||||||
$res = [
|
|
||||||
'current_page' => intval($data[ 'page' ]),
|
|
||||||
'per_page' => intval($data[ 'limit' ]),
|
|
||||||
'data' => [],
|
|
||||||
'total' => 0
|
|
||||||
];
|
|
||||||
|
|
||||||
$temp_data = [];
|
|
||||||
|
|
||||||
foreach ($icon_list as $v) {
|
|
||||||
|
|
||||||
$icon = $v[ 'glyphs' ]; // 图标列表
|
|
||||||
|
|
||||||
foreach ($icon as $ck => $cv) {
|
|
||||||
// 素材表中数据保持要一致
|
|
||||||
$icon[ $ck ][ 'att_id' ] = $cv[ 'icon_id' ];
|
|
||||||
$icon[ $ck ][ 'url' ] = $v[ 'font_family' ] . ' ' . $v[ 'css_prefix_text' ] . $cv[ 'font_class' ];
|
|
||||||
$icon[ $ck ][ 'real_name' ] = $cv[ 'name' ];
|
|
||||||
|
|
||||||
// 查询名称
|
|
||||||
if (!empty($data[ 'real_name' ]) && !str_contains($cv[ 'name' ], $data[ 'real_name' ])) {
|
|
||||||
unset($icon[ $ck ]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$icon = array_values($icon);
|
|
||||||
|
|
||||||
if (!empty($data[ 'cate_id' ]) && $data[ 'cate_id' ] == $v[ 'id' ]) {
|
|
||||||
// 查询指定分类下的图标
|
|
||||||
$temp_data = $icon;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
// 查询全部图标
|
|
||||||
$temp_data = array_merge($temp_data, $icon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 手动分页
|
|
||||||
$res[ 'total' ] = count($temp_data); // 总数量
|
|
||||||
$start = ( $res[ 'current_page' ] - 1 ) * $res[ 'per_page' ]; // 数组下标从0 开始
|
|
||||||
$icon_list = array_slice($temp_data, $start, $res[ 'per_page' ]);
|
|
||||||
|
|
||||||
$res[ 'data' ] = $icon_list;
|
|
||||||
|
|
||||||
return $res;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -370,7 +370,7 @@ class BackupRecordsService extends BaseAdminService
|
|||||||
|
|
||||||
if ($restore_result === true) {
|
if ($restore_result === true) {
|
||||||
$res[ 'data' ] = [
|
$res[ 'data' ] = [
|
||||||
'content' => '恢复数据库备份',
|
'content' => '数据库恢复完成',
|
||||||
'task' => 'restoreData'
|
'task' => 'restoreData'
|
||||||
];
|
];
|
||||||
} else {
|
} else {
|
||||||
@ -378,6 +378,10 @@ class BackupRecordsService extends BaseAdminService
|
|||||||
'content' => '',
|
'content' => '',
|
||||||
'task' => 'restoreSql'
|
'task' => 'restoreSql'
|
||||||
];
|
];
|
||||||
|
$restore_progress = $db->getRestoreProgress();
|
||||||
|
if ($restore_progress % 5 == 0) {
|
||||||
|
$res[ 'data' ][ 'content' ] = $restore_progress == 0 ? '数据库开始恢复' : '数据库恢复中已恢复' . $restore_progress . '%';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$temp = Cache::get($this->cache_restore_key);
|
$temp = Cache::get($this->cache_restore_key);
|
||||||
@ -393,6 +397,7 @@ class BackupRecordsService extends BaseAdminService
|
|||||||
$temp = Cache::get($this->cache_restore_key);
|
$temp = Cache::get($this->cache_restore_key);
|
||||||
$temp[ 'data' ][] = $res[ 'data' ];
|
$temp[ 'data' ][] = $res[ 'data' ];
|
||||||
Cache::set($this->cache_restore_key, $temp);
|
Cache::set($this->cache_restore_key, $temp);
|
||||||
|
|
||||||
// todo 恢复数据
|
// todo 恢复数据
|
||||||
|
|
||||||
} elseif ($data[ 'task' ] == 'restoreComplete') {
|
} elseif ($data[ 'task' ] == 'restoreComplete') {
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
namespace app\service\admin\upgrade;
|
namespace app\service\admin\upgrade;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* todo 废弃,后续删除
|
||||||
* 框架及插件升级恢复备份
|
* 框架及插件升级恢复备份
|
||||||
* @package app\service\core\upgrade
|
* @package app\service\core\upgrade
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -91,6 +91,7 @@ class UpgradeService extends BaseAdminService
|
|||||||
public function upgradePreCheck(string $addon = '')
|
public function upgradePreCheck(string $addon = '')
|
||||||
{
|
{
|
||||||
$niucloud_dir = $this->root_path . 'niucloud' . DIRECTORY_SEPARATOR;
|
$niucloud_dir = $this->root_path . 'niucloud' . DIRECTORY_SEPARATOR;
|
||||||
|
$upgrade_dir = $this->root_path . 'upgrade' . DIRECTORY_SEPARATOR;
|
||||||
$admin_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR;
|
$admin_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR;
|
||||||
$web_dir = $this->root_path . 'web' . DIRECTORY_SEPARATOR;
|
$web_dir = $this->root_path . 'web' . DIRECTORY_SEPARATOR;
|
||||||
$wap_dir = $this->root_path . 'uni-app' . DIRECTORY_SEPARATOR;
|
$wap_dir = $this->root_path . 'uni-app' . DIRECTORY_SEPARATOR;
|
||||||
@ -110,11 +111,14 @@ class UpgradeService extends BaseAdminService
|
|||||||
];
|
];
|
||||||
|
|
||||||
$data[ 'dir' ][ 'is_readable' ][] = [ 'dir' => str_replace(project_path(), '', $niucloud_dir), 'status' => is_readable($niucloud_dir) ];
|
$data[ 'dir' ][ 'is_readable' ][] = [ 'dir' => str_replace(project_path(), '', $niucloud_dir), 'status' => is_readable($niucloud_dir) ];
|
||||||
|
$data[ 'dir' ][ 'is_readable' ][] = [ 'dir' => str_replace(project_path(), '', $upgrade_dir), 'status' => is_readable($upgrade_dir) ];
|
||||||
|
|
||||||
$data[ 'dir' ][ 'is_readable' ][] = [ 'dir' => str_replace(project_path(), '', $admin_dir), 'status' => is_readable($admin_dir) ];
|
$data[ 'dir' ][ 'is_readable' ][] = [ 'dir' => str_replace(project_path(), '', $admin_dir), 'status' => is_readable($admin_dir) ];
|
||||||
$data[ 'dir' ][ 'is_readable' ][] = [ 'dir' => str_replace(project_path(), '', $web_dir), 'status' => is_readable($web_dir) ];
|
$data[ 'dir' ][ 'is_readable' ][] = [ 'dir' => str_replace(project_path(), '', $web_dir), 'status' => is_readable($web_dir) ];
|
||||||
$data[ 'dir' ][ 'is_readable' ][] = [ 'dir' => str_replace(project_path(), '', $wap_dir), 'status' => is_readable($wap_dir) ];
|
$data[ 'dir' ][ 'is_readable' ][] = [ 'dir' => str_replace(project_path(), '', $wap_dir), 'status' => is_readable($wap_dir) ];
|
||||||
|
|
||||||
$data[ 'dir' ][ 'is_write' ][] = [ 'dir' => str_replace(project_path(), '', $niucloud_dir), 'status' => is_write($niucloud_dir) ];
|
$data[ 'dir' ][ 'is_write' ][] = [ 'dir' => str_replace(project_path(), '', $niucloud_dir), 'status' => is_write($niucloud_dir) ];
|
||||||
|
$data[ 'dir' ][ 'is_write' ][] = [ 'dir' => str_replace(project_path(), '', $upgrade_dir), 'status' => is_write($upgrade_dir) ];
|
||||||
$data[ 'dir' ][ 'is_write' ][] = [ 'dir' => str_replace(project_path(), '', $admin_dir), 'status' => is_write($admin_dir) ];
|
$data[ 'dir' ][ 'is_write' ][] = [ 'dir' => str_replace(project_path(), '', $admin_dir), 'status' => is_write($admin_dir) ];
|
||||||
$data[ 'dir' ][ 'is_write' ][] = [ 'dir' => str_replace(project_path(), '', $web_dir), 'status' => is_write($web_dir) ];
|
$data[ 'dir' ][ 'is_write' ][] = [ 'dir' => str_replace(project_path(), '', $web_dir), 'status' => is_write($web_dir) ];
|
||||||
$data[ 'dir' ][ 'is_write' ][] = [ 'dir' => str_replace(project_path(), '', $wap_dir), 'status' => is_write($wap_dir) ];
|
$data[ 'dir' ][ 'is_write' ][] = [ 'dir' => str_replace(project_path(), '', $wap_dir), 'status' => is_write($wap_dir) ];
|
||||||
@ -178,32 +182,43 @@ class UpgradeService extends BaseAdminService
|
|||||||
if ($this->upgrade_task) throw new CommonException('UPGRADE_TASK_EXIST');
|
if ($this->upgrade_task) throw new CommonException('UPGRADE_TASK_EXIST');
|
||||||
|
|
||||||
$upgrade_content = $this->getUpgradeContent($addon);
|
$upgrade_content = $this->getUpgradeContent($addon);
|
||||||
if (empty($upgrade_content[ 'content' ])) throw new CommonException("NOT_EXIST_UPGRADE_CONTENT");
|
if (empty($upgrade_content['content'])) throw new CommonException("NOT_EXIST_UPGRADE_CONTENT");
|
||||||
|
|
||||||
|
// 过滤掉没有更新版本的插件
|
||||||
|
$upgrade_content['content'] = array_values(array_filter(array_map(function ($item){
|
||||||
|
if (!empty($item['version_list'])) return $item;
|
||||||
|
}, $upgrade_content['content'])));
|
||||||
|
if (empty($upgrade_content['content'])) throw new CommonException("NOT_EXIST_UPGRADE_CONTENT");
|
||||||
|
|
||||||
|
$upgrade_content['upgrade_apps'] = [];
|
||||||
|
foreach ($upgrade_content['content'] as $item) {
|
||||||
|
$upgrade_content['upgrade_apps'][] = $item['app']['app_key'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$upgrade_title = '框架';
|
||||||
|
|
||||||
$upgrade = [
|
$upgrade = [
|
||||||
'product_key' => BaseNiucloudClient::PRODUCT,
|
'product_key' => BaseNiucloudClient::PRODUCT,
|
||||||
'framework_version' => config('version.version')
|
'framework_version' => config('version.version')
|
||||||
];
|
];
|
||||||
|
|
||||||
$upgrade[ 'app_key' ] = $upgrade_content[ 'content' ][ 0 ][ 'app' ][ 'app_key' ];
|
$upgrade[ 'app_key' ] = $upgrade_content['content'][0]['app']['app_key'];
|
||||||
$upgrade[ 'version' ] = $upgrade_content[ 'content' ][ 0 ][ 'version' ];
|
$upgrade[ 'version' ] = $upgrade_content['content'][0]['version'];
|
||||||
|
|
||||||
if (!$addon) {
|
// if (!$addon) {
|
||||||
$upgrade_title = '框架';
|
|
||||||
// $upgrade[ 'app_key' ] = AddonDict::FRAMEWORK_KEY;
|
// $upgrade[ 'app_key' ] = AddonDict::FRAMEWORK_KEY;
|
||||||
$upgrade[ 'version' ] = config('version.version');
|
// $upgrade[ 'version' ] = config('version.version');
|
||||||
} else {
|
// } else {
|
||||||
// $upgrade[ 'app_key' ] = $addon;
|
// $upgrade[ 'app_key' ] = $addon;
|
||||||
// $upgrade[ 'version' ] = ( new Addon() )->where([ [ 'key', '=', $addon ] ])->value('version');
|
// $upgrade[ 'version' ] = ( new Addon() )->where([ [ 'key', '=', $addon ] ])->value('version');
|
||||||
$upgrade_title = ( new Addon() )->where([ [ 'key', 'in', $addon ] ])->field('title')->select()->toArray();
|
// $upgrade_title = ( new Addon() )->where([ [ 'key', '=', $addon ] ])->value('title');
|
||||||
$upgrade_title = implode(',', array_column($upgrade_title, 'title'));
|
|
||||||
//
|
//
|
||||||
// // 判断框架版本是否低于插件支持版本
|
// // 判断框架版本是否低于插件支持版本
|
||||||
// $last_version = $upgrade_content[ 'version_list' ][ count($upgrade_content[ 'version_list' ]) - 1 ];
|
// $last_version = $upgrade_content[ 'version_list' ][ count($upgrade_content[ 'version_list' ]) - 1 ];
|
||||||
// if (str_replace('.', '', config('version.version')) < str_replace('.', '', $last_version[ 'niucloud_version' ][ 'version_no' ])) {
|
// if (str_replace('.', '', config('version.version')) < str_replace('.', '', $last_version[ 'niucloud_version' ][ 'version_no' ])) {
|
||||||
// throw new CommonException('BEFORE_UPGRADING_NEED_UPGRADE_FRAMEWORK');
|
// throw new CommonException('BEFORE_UPGRADING_NEED_UPGRADE_FRAMEWORK');
|
||||||
// }
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
$response = ( new CoreAddonCloudService() )->upgradeAddon($upgrade);
|
$response = ( new CoreAddonCloudService() )->upgradeAddon($upgrade);
|
||||||
if (isset($response[ 'code' ]) && $response[ 'code' ] == 0) throw new CommonException($response[ 'msg' ]);
|
if (isset($response[ 'code' ]) && $response[ 'code' ] == 0) throw new CommonException($response[ 'msg' ]);
|
||||||
@ -217,10 +232,17 @@ class UpgradeService extends BaseAdminService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 是否需要备份
|
// 是否需要备份
|
||||||
$is_need_backup = $data[ 'is_need_backup' ] ?? true;
|
$is_need_backup = $data['is_need_backup'] ?? true;
|
||||||
if (!$is_need_backup) {
|
if (!$is_need_backup) {
|
||||||
unset($this->steps[ 'backupCode' ]);
|
unset($this->steps['backupCode']);
|
||||||
unset($this->steps[ 'backupSql' ]);
|
unset($this->steps['backupSql']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 是否需要云编译
|
||||||
|
$is_need_cloudbuild = $data['is_need_cloudbuild'] ?? true;
|
||||||
|
if (!$is_need_cloudbuild) {
|
||||||
|
unset($this->steps['cloudBuild']);
|
||||||
|
unset($this->steps['gteCloudBuildLog']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$upgrade_task = [
|
$upgrade_task = [
|
||||||
@ -232,8 +254,8 @@ class UpgradeService extends BaseAdminService
|
|||||||
'log' => [ $this->steps[ 'requestUpgrade' ][ 'title' ] ],
|
'log' => [ $this->steps[ 'requestUpgrade' ][ 'title' ] ],
|
||||||
'params' => [ 'app_key' => $upgrade[ 'app_key' ], 'token' => $response[ 'token' ] ],
|
'params' => [ 'app_key' => $upgrade[ 'app_key' ], 'token' => $response[ 'token' ] ],
|
||||||
'upgrade_content' => $upgrade_content,
|
'upgrade_content' => $upgrade_content,
|
||||||
'upgrade_apps' => $upgrade_content[ 'upgrade_apps' ],
|
'upgrade_apps' => $upgrade_content['upgrade_apps'],
|
||||||
'is_need_backup' => $is_need_backup
|
'is_need_backup' => $is_need_backup,
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($upgrade_content[ 'content' ] as $k => $v) {
|
foreach ($upgrade_content[ 'content' ] as $k => $v) {
|
||||||
@ -340,24 +362,24 @@ class UpgradeService extends BaseAdminService
|
|||||||
$res = ( new CoreAddonCloudService() )->downloadUpgradeFile($app_key, $token, $dir, $index, $step, $length);
|
$res = ( new CoreAddonCloudService() )->downloadUpgradeFile($app_key, $token, $dir, $index, $step, $length);
|
||||||
|
|
||||||
if ($res === true) {
|
if ($res === true) {
|
||||||
$index = array_search($app_key, $this->upgrade_task[ 'upgrade_apps' ]);
|
$index = array_search($app_key, $this->upgrade_task['upgrade_apps']);
|
||||||
if ($app_key == AddonDict::FRAMEWORK_KEY) {
|
if ($app_key == AddonDict::FRAMEWORK_KEY) {
|
||||||
$this->upgrade_task[ 'log' ][] = "下载更新文件";
|
$this->upgrade_task['log'][] = "下载更新文件";
|
||||||
} else {
|
} else {
|
||||||
$this->upgrade_task[ 'log' ][] = "下载" . $this->upgrade_task[ 'upgrade_content' ][ 'content' ][ $index ][ 'app' ][ 'app_name' ] . "更新文件";
|
$this->upgrade_task['log'][] = "下载". $this->upgrade_task['upgrade_content']['content'][$index]['app']['app_name'] ."更新文件";
|
||||||
}
|
}
|
||||||
$index++;
|
$index++;
|
||||||
if (isset($this->upgrade_task[ 'upgrade_apps' ][ $index ])) {
|
if (isset($this->upgrade_task['upgrade_apps'][$index])) {
|
||||||
$upgrade = [
|
$upgrade = [
|
||||||
'product_key' => BaseNiucloudClient::PRODUCT,
|
'product_key' => BaseNiucloudClient::PRODUCT,
|
||||||
'framework_version' => config('version.version'),
|
'framework_version' => config('version.version'),
|
||||||
'app_key' => $this->upgrade_task[ 'upgrade_content' ][ 'content' ][ $index ][ 'app' ][ 'app_key' ],
|
'app_key' => $this->upgrade_task['upgrade_content']['content'][$index]['app']['app_key'],
|
||||||
'version' => $this->upgrade_task[ 'upgrade_content' ][ 'content' ][ $index ][ 'version' ]
|
'version' => $this->upgrade_task['upgrade_content']['content'][$index]['version']
|
||||||
];
|
];
|
||||||
$response = ( new CoreAddonCloudService() )->upgradeAddon($upgrade);
|
$response = ( new CoreAddonCloudService() )->upgradeAddon($upgrade);
|
||||||
if (isset($response[ 'code' ]) && $response[ 'code' ] == 0) throw new CommonException($response[ 'msg' ]);
|
if (isset($response[ 'code' ]) && $response[ 'code' ] == 0) throw new CommonException($response[ 'msg' ]);
|
||||||
|
|
||||||
return [ 'app_key' => $upgrade[ 'app_key' ], 'token' => $response[ 'token' ] ];
|
return ['app_key' => $upgrade[ 'app_key' ], 'token' => $response[ 'token' ]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $res;
|
return $res;
|
||||||
@ -401,10 +423,10 @@ class UpgradeService extends BaseAdminService
|
|||||||
if ($db->getBackupProgress() == 100) {
|
if ($db->getBackupProgress() == 100) {
|
||||||
$this->upgrade_task[ 'log' ][] = "数据库备份完成";
|
$this->upgrade_task[ 'log' ][] = "数据库备份完成";
|
||||||
} else {
|
} else {
|
||||||
$this->upgrade_task[ 'log' ][] = $db->getBackupProgress() == 0 ? '数据库开始备份' : '数据库备份已备份' . $db->getBackupProgress() . '%';
|
$this->upgrade_task[ 'log' ][] = $db->getBackupProgress() == 0 ? '数据库开始备份' : '数据库备份已备份'. $db->getBackupProgress() . '%';
|
||||||
}
|
}
|
||||||
if ($result === true) return true;
|
if ($result === true) return true;
|
||||||
return [ 'index' => $result ];
|
return ['index' => $result];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -414,11 +436,11 @@ class UpgradeService extends BaseAdminService
|
|||||||
public function coverCode($index = 0, $addon = "")
|
public function coverCode($index = 0, $addon = "")
|
||||||
{
|
{
|
||||||
$this->upgrade_task[ 'is_cover' ] = 1;
|
$this->upgrade_task[ 'is_cover' ] = 1;
|
||||||
if (empty($addon)) $addon = $this->upgrade_task[ 'upgrade_apps' ][ 0 ];
|
if (empty($addon)) $addon = $this->upgrade_task['upgrade_apps'][0];
|
||||||
|
|
||||||
$app_index = array_search($addon, $this->upgrade_task[ 'upgrade_apps' ]);
|
$app_index = array_search($addon, $this->upgrade_task['upgrade_apps']);
|
||||||
|
|
||||||
$version_list = array_reverse($this->upgrade_task[ 'upgrade_content' ][ 'content' ][ $app_index ][ 'version_list' ]);
|
$version_list = array_reverse($this->upgrade_task[ 'upgrade_content' ]['content'][$app_index][ 'version_list' ]);
|
||||||
$code_dir = $this->upgrade_dir . $this->upgrade_task[ 'key' ] . DIRECTORY_SEPARATOR . 'download' . DIRECTORY_SEPARATOR . $addon . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
|
$code_dir = $this->upgrade_dir . $this->upgrade_task[ 'key' ] . DIRECTORY_SEPARATOR . 'download' . DIRECTORY_SEPARATOR . $addon . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
|
||||||
|
|
||||||
$version_item = $version_list[ $index ];
|
$version_item = $version_list[ $index ];
|
||||||
@ -473,8 +495,8 @@ class UpgradeService extends BaseAdminService
|
|||||||
return compact('index', 'addon');
|
return compact('index', 'addon');
|
||||||
} else {
|
} else {
|
||||||
$app_index++;
|
$app_index++;
|
||||||
if (isset($this->upgrade_task[ 'upgrade_apps' ][ $app_index ])) {
|
if (isset($this->upgrade_task['upgrade_apps'][$app_index])) {
|
||||||
return [ 'index' => 0, 'addon' => $this->upgrade_task[ 'upgrade_apps' ][ $app_index ] ];
|
return ['index' => 0, 'addon' => $this->upgrade_task['upgrade_apps'][$app_index]];
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -546,7 +568,7 @@ class UpgradeService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function handleUniapp()
|
public function handleUniapp()
|
||||||
{
|
{
|
||||||
$key = end($this->upgrade_task[ 'upgrade_apps' ]);
|
$key = end($this->upgrade_task['upgrade_apps']);
|
||||||
|
|
||||||
$code_dir = $this->upgrade_dir . $this->upgrade_task[ 'key' ] . DIRECTORY_SEPARATOR . 'download' . DIRECTORY_SEPARATOR . $key . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
|
$code_dir = $this->upgrade_dir . $this->upgrade_task[ 'key' ] . DIRECTORY_SEPARATOR . 'download' . DIRECTORY_SEPARATOR . $key . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
|
||||||
$exclude_files = [ '.env.development', '.env.production', 'manifest.json' ];
|
$exclude_files = [ '.env.development', '.env.production', 'manifest.json' ];
|
||||||
@ -621,8 +643,8 @@ class UpgradeService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function refreshMenu($addon = "")
|
public function refreshMenu($addon = "")
|
||||||
{
|
{
|
||||||
if (empty($addon)) $addon = $this->upgrade_task[ 'upgrade_apps' ][ 0 ];
|
if (empty($addon)) $addon = $this->upgrade_task['upgrade_apps'][0];
|
||||||
$app_index = array_search($addon, $this->upgrade_task[ 'upgrade_apps' ]);
|
$app_index = array_search($addon, $this->upgrade_task['upgrade_apps']);
|
||||||
|
|
||||||
if ($addon == AddonDict::FRAMEWORK_KEY) {
|
if ($addon == AddonDict::FRAMEWORK_KEY) {
|
||||||
( new InstallSystemService() )->installMenu();
|
( new InstallSystemService() )->installMenu();
|
||||||
@ -631,8 +653,8 @@ class UpgradeService extends BaseAdminService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$app_index++;
|
$app_index++;
|
||||||
if (isset($this->upgrade_task[ 'upgrade_apps' ][ $app_index ])) {
|
if (isset($this->upgrade_task['upgrade_apps'][$app_index])) {
|
||||||
return [ 'addon' => $this->upgrade_task[ 'upgrade_apps' ][ $app_index ] ];
|
return ['addon' => $this->upgrade_task['upgrade_apps'][$app_index]];
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -643,8 +665,8 @@ class UpgradeService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function installSchedule($addon = "")
|
public function installSchedule($addon = "")
|
||||||
{
|
{
|
||||||
if (empty($addon)) $addon = $this->upgrade_task[ 'upgrade_apps' ][ 0 ];
|
if (empty($addon)) $addon = $this->upgrade_task['upgrade_apps'][0];
|
||||||
$app_index = array_search($addon, $this->upgrade_task[ 'upgrade_apps' ]);
|
$app_index = array_search($addon, $this->upgrade_task['upgrade_apps']);
|
||||||
|
|
||||||
if ($addon == AddonDict::FRAMEWORK_KEY) {
|
if ($addon == AddonDict::FRAMEWORK_KEY) {
|
||||||
( new CoreScheduleInstallService() )->installSystemSchedule();
|
( new CoreScheduleInstallService() )->installSystemSchedule();
|
||||||
@ -653,8 +675,8 @@ class UpgradeService extends BaseAdminService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$app_index++;
|
$app_index++;
|
||||||
if (isset($this->upgrade_task[ 'upgrade_apps' ][ $app_index ])) {
|
if (isset($this->upgrade_task['upgrade_apps'][$app_index])) {
|
||||||
return [ 'addon' => $this->upgrade_task[ 'upgrade_apps' ][ $app_index ] ];
|
return ['addon' => $this->upgrade_task['upgrade_apps'][$app_index]];
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -712,7 +734,7 @@ class UpgradeService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function upgradeComplete()
|
public function upgradeComplete()
|
||||||
{
|
{
|
||||||
foreach ($this->upgrade_task[ 'upgrade_apps' ] as $addon) {
|
foreach ($this->upgrade_task['upgrade_apps'] as $addon) {
|
||||||
if ($addon != AddonDict::FRAMEWORK_KEY) {
|
if ($addon != AddonDict::FRAMEWORK_KEY) {
|
||||||
$core_addon_service = new CoreAddonService();
|
$core_addon_service = new CoreAddonService();
|
||||||
$install_data = $core_addon_service->getAddonConfig($addon);
|
$install_data = $core_addon_service->getAddonConfig($addon);
|
||||||
@ -744,7 +766,7 @@ class UpgradeService extends BaseAdminService
|
|||||||
$this->upgrade_task[ 'params' ] = [];
|
$this->upgrade_task[ 'params' ] = [];
|
||||||
Cache::set($this->cache_key, $this->upgrade_task);
|
Cache::set($this->cache_key, $this->upgrade_task);
|
||||||
|
|
||||||
Log::write('升级出错之后的处理:' . json_encode($fail_reason));
|
Log::write('升级出错之后的处理:'.json_encode($fail_reason));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -753,10 +775,10 @@ class UpgradeService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function restoreCode()
|
public function restoreCode()
|
||||||
{
|
{
|
||||||
if ($this->upgrade_task[ 'is_need_backup' ]) {
|
if (!isset($this->upgrade_task['is_need_backup']) || $this->upgrade_task['is_need_backup']) {
|
||||||
$backup_dir = $this->upgrade_dir . $this->upgrade_task[ 'key' ] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
|
$backup_dir = $this->upgrade_dir . $this->upgrade_task[ 'key' ] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
|
||||||
} else {
|
} else {
|
||||||
$backup_dir = $this->upgrade_dir . $this->upgrade_task[ 'upgrade_content' ][ 'last_backup' ][ 'key' ] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
|
$backup_dir = $this->upgrade_dir . $this->upgrade_task['upgrade_content']['last_backup'][ 'key' ] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (is_dir($backup_dir)) {
|
if (is_dir($backup_dir)) {
|
||||||
@ -776,16 +798,21 @@ class UpgradeService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function restoreSql($index = 0)
|
public function restoreSql($index = 0)
|
||||||
{
|
{
|
||||||
if ($this->upgrade_task[ 'is_need_backup' ]) {
|
if (!isset($this->upgrade_task['is_need_backup']) || $this->upgrade_task['is_need_backup']) {
|
||||||
$backup_dir = $this->upgrade_dir . $this->upgrade_task[ 'key' ] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR;
|
$backup_dir = $this->upgrade_dir . $this->upgrade_task[ 'key' ] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR;
|
||||||
} else {
|
} else {
|
||||||
$backup_dir = $this->upgrade_dir . $this->upgrade_task[ 'upgrade_content' ][ 'last_backup' ][ 'key' ] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR;
|
$backup_dir = $this->upgrade_dir . $this->upgrade_task['upgrade_content']['last_backup'][ 'key' ] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (is_dir($backup_dir)) {
|
if (is_dir($backup_dir)) {
|
||||||
$db = new DbBackup($backup_dir, key: $this->upgrade_task[ 'key' ]);
|
$db = new DbBackup($backup_dir, key: $this->upgrade_task[ 'key' ]);
|
||||||
$result = $db->restoreDatabase();
|
$result = $db->restoreDatabase();
|
||||||
if ($result !== true) return [ 'index' => $result ];
|
if ($result !== true) return ['index' => $result];
|
||||||
|
|
||||||
|
$restore_progress = $db->getRestoreProgress();
|
||||||
|
if ($restore_progress % 5 == 0) {
|
||||||
|
$this->upgrade_task[ 'log' ][] = $restore_progress == 0 ? '数据库开始恢复' : '数据库恢复中已恢复'. $restore_progress . '%';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -798,7 +825,7 @@ class UpgradeService extends BaseAdminService
|
|||||||
|
|
||||||
public function restoreComplete()
|
public function restoreComplete()
|
||||||
{
|
{
|
||||||
( new UpgradeRecordsService() )->failed($this->upgrade_task[ 'key' ], $this->upgrade_task[ 'error' ]);
|
( new UpgradeRecordsService() )->failed($this->upgrade_task[ 'key' ], $this->upgrade_task['error']);
|
||||||
$this->clearUpgradeTask(2);
|
$this->clearUpgradeTask(2);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -829,8 +856,8 @@ class UpgradeService extends BaseAdminService
|
|||||||
foreach ($addons as $key) {
|
foreach ($addons as $key) {
|
||||||
$info = ( new Addon() )->where([ [ 'key', '=', $key ] ])->field('version,type')->find();
|
$info = ( new Addon() )->where([ [ 'key', '=', $key ] ])->field('version,type')->find();
|
||||||
$upgrade[ 'app_key' ] = $key;
|
$upgrade[ 'app_key' ] = $key;
|
||||||
$upgrade[ 'version' ] = $info[ 'version' ];
|
$upgrade[ 'version' ] = $info['version'];
|
||||||
if ($info[ 'type' ] == 'app') {
|
if ($info['type'] == 'app') {
|
||||||
array_unshift($apps, $upgrade);
|
array_unshift($apps, $upgrade);
|
||||||
} else {
|
} else {
|
||||||
array_push($apps, $upgrade);
|
array_push($apps, $upgrade);
|
||||||
@ -841,13 +868,13 @@ class UpgradeService extends BaseAdminService
|
|||||||
foreach ($apps as $item) {
|
foreach ($apps as $item) {
|
||||||
$upgrade_content = ( new CoreModuleService() )->getUpgradeContent($item)[ 'data' ] ?? [];
|
$upgrade_content = ( new CoreModuleService() )->getUpgradeContent($item)[ 'data' ] ?? [];
|
||||||
if (!empty($upgrade_content)) {
|
if (!empty($upgrade_content)) {
|
||||||
$content[ 'content' ][] = $upgrade_content;
|
$content['content'][] = $upgrade_content;
|
||||||
$content[ 'upgrade_apps' ][] = $upgrade_content[ 'app' ][ 'app_key' ];
|
$content['upgrade_apps'][] = $upgrade_content['app']['app_key'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($content[ 'content' ])) {
|
if (!empty($content['content'])) {
|
||||||
$content[ 'last_backup' ] = ( new SysBackupRecords() )->where([ [ 'status', '=', BackupDict::STATUS_COMPLETE ] ])->order('complete_time desc')->find();
|
$content['last_backup'] = (new SysBackupRecords())->where([ ['status', '=', BackupDict::STATUS_COMPLETE ] ])->order('complete_time desc')->find();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $content;
|
return $content;
|
||||||
@ -870,7 +897,7 @@ class UpgradeService extends BaseAdminService
|
|||||||
{
|
{
|
||||||
// 主动取消升级
|
// 主动取消升级
|
||||||
if ($is_active && $this->upgrade_task && !empty($this->upgrade_task[ 'key' ])) {
|
if ($is_active && $this->upgrade_task && !empty($this->upgrade_task[ 'key' ])) {
|
||||||
( new UpgradeRecordsService() )->edit([ [ 'upgrade_key', '=', $this->upgrade_task[ 'key' ] ], [ 'status', '=', UpgradeDict::STATUS_READY ] ], [ 'status' => UpgradeDict::STATUS_CANCEL ]);
|
( new UpgradeRecordsService() )->edit([ [ 'upgrade_key', '=', $this->upgrade_task[ 'key' ] ], ['status', '=', UpgradeDict::STATUS_READY ] ], ['status' => UpgradeDict::STATUS_CANCEL]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($delayed) {
|
if ($delayed) {
|
||||||
|
|||||||
@ -66,4 +66,9 @@ class UserLogService extends BaseAdminService
|
|||||||
$res = $this->model->create($data);
|
$res = $this->model->create($data);
|
||||||
return $res->id;
|
return $res->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function destroy()
|
||||||
|
{
|
||||||
|
(new SysUserLog())->whereRaw("1=1")->delete();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -32,6 +32,7 @@ use think\Model;
|
|||||||
class UserService extends BaseAdminService
|
class UserService extends BaseAdminService
|
||||||
{
|
{
|
||||||
public static $cache_tag_name = 'user_cache';
|
public static $cache_tag_name = 'user_cache';
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
@ -46,16 +47,16 @@ class UserService extends BaseAdminService
|
|||||||
{
|
{
|
||||||
$field = 'uid,username,head_img,real_name,last_ip,last_time,login_count,status, role_ids, is_admin';
|
$field = 'uid,username,head_img,real_name,last_ip,last_time,login_count,status, role_ids, is_admin';
|
||||||
$search = [
|
$search = [
|
||||||
'username' => $where['username'],
|
'username' => $where[ 'username' ],
|
||||||
'realname' => $where['realname'],
|
'realname' => $where[ 'realname' ],
|
||||||
'create_time' => $where['create_time']
|
'create_time' => $where[ 'create_time' ]
|
||||||
];
|
];
|
||||||
if (!empty($where['role'])) {
|
if (!empty($where[ 'role' ])) {
|
||||||
$search['role_ids'] = $where['role'];
|
$search[ 'role_ids' ] = $where[ 'role' ];
|
||||||
}
|
}
|
||||||
$search_model = (new SysUser())->withSearch(['username', 'realname', 'create_time', 'role_ids'], $search)->field($field)->order('uid desc')->append(['status_name']);
|
$search_model = ( new SysUser() )->withSearch([ 'username', 'realname', 'create_time', 'role_ids' ], $search)->field($field)->order('uid desc')->append([ 'status_name' ]);
|
||||||
return $this->pageQuery($search_model, function ($item, $key) {
|
return $this->pageQuery($search_model, function ($item, $key) {
|
||||||
$role_ids = $item['role_ids'] ?? [];
|
$role_ids = $item[ 'role_ids' ] ?? [];
|
||||||
$item->role_data = $this->getRoleByUserRoleIds($role_ids);
|
$item->role_data = $this->getRoleByUserRoleIds($role_ids);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -66,20 +67,21 @@ class UserService extends BaseAdminService
|
|||||||
* @param int $uid
|
* @param int $uid
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getInfo(int $uid){
|
public function getInfo(int $uid)
|
||||||
|
{
|
||||||
$where = array(
|
$where = array(
|
||||||
['uid', '=', $uid],
|
[ 'uid', '=', $uid ],
|
||||||
);
|
);
|
||||||
$field = 'uid, username, head_img, real_name, last_ip, last_time, create_time, login_count, status, delete_time, update_time, role_ids, is_admin';
|
$field = 'uid, username, head_img, real_name, last_ip, last_time, create_time, login_count, status, delete_time, update_time, role_ids, is_admin';
|
||||||
$user = (new SysUser())->where($where)->field($field)->findOrEmpty();
|
$user = ( new SysUser() )->where($where)->field($field)->findOrEmpty();
|
||||||
if ($user->isEmpty())
|
if ($user->isEmpty())
|
||||||
return [];
|
return [];
|
||||||
|
|
||||||
if (!empty($user?->userrole)) {
|
if (!empty($user?->userrole)) {
|
||||||
$user->userrole->appendData(['role_array' => $this->getRoleByUserRoleIds($user->role_ids ?? [])]);
|
$user->userrole->appendData([ 'role_array' => $this->getRoleByUserRoleIds($user->role_ids ?? []) ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $user->append(['status_name'])->toArray();
|
return $user->append([ 'status_name' ])->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -88,18 +90,19 @@ class UserService extends BaseAdminService
|
|||||||
* @return bool
|
* @return bool
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public function add(array $data){
|
public function add(array $data)
|
||||||
|
{
|
||||||
$user_data = [
|
$user_data = [
|
||||||
'username' => $data['username'],
|
'username' => $data[ 'username' ],
|
||||||
'head_img' => $data['head_img'],
|
'head_img' => $data[ 'head_img' ],
|
||||||
'status' => $data['status'],
|
'status' => $data[ 'status' ],
|
||||||
'real_name' => $data['real_name'],
|
'real_name' => $data[ 'real_name' ],
|
||||||
'password' => create_password($data['password']),
|
'password' => create_password($data[ 'password' ]),
|
||||||
|
|
||||||
'is_admin' => $data['is_admin'],
|
'is_admin' => $data[ 'is_admin' ],
|
||||||
'role_ids' => $data['role_ids'],
|
'role_ids' => $data[ 'role_ids' ],
|
||||||
];
|
];
|
||||||
$user = (new SysUser())->create($user_data);
|
$user = ( new SysUser() )->create($user_data);
|
||||||
return $user?->uid;
|
return $user?->uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,17 +113,18 @@ class UserService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function addUser($data)
|
public function addUser($data)
|
||||||
{
|
{
|
||||||
$role_ids = $data['role_ids'] ?? [];
|
$role_ids = $data[ 'role_ids' ] ?? [];
|
||||||
$is_admin = $data['is_admin'] ?? 0;
|
$is_admin = $data[ 'is_admin' ] ?? 0;
|
||||||
|
|
||||||
$data['is_admin'] = $is_admin;
|
$data[ 'is_admin' ] = $is_admin;
|
||||||
if(!$is_admin){
|
if (!$is_admin) {
|
||||||
$data['role_ids'] = $role_ids;
|
$data[ 'role_ids' ] = $role_ids;
|
||||||
}
|
}
|
||||||
//添加用户
|
//添加用户
|
||||||
$uid = $this->add($data);
|
$uid = $this->add($data);
|
||||||
return $uid;
|
return $uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新对应站点用户
|
* 更新对应站点用户
|
||||||
* @param $uid
|
* @param $uid
|
||||||
@ -129,11 +133,11 @@ class UserService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function editUser($uid, $data)
|
public function editUser($uid, $data)
|
||||||
{
|
{
|
||||||
$role_ids = $data['role_ids'] ?? [];
|
$role_ids = $data[ 'role_ids' ] ?? [];
|
||||||
$is_admin = $data['is_admin'] ?? 0;
|
$is_admin = $data[ 'is_admin' ] ?? 0;
|
||||||
$data['is_admin'] = $is_admin;
|
$data[ 'is_admin' ] = $is_admin;
|
||||||
if(!$is_admin){
|
if (!$is_admin) {
|
||||||
$data['role_ids'] = $role_ids;
|
$data[ 'role_ids' ] = $role_ids;
|
||||||
}
|
}
|
||||||
$this->edit($uid, $data);
|
$this->edit($uid, $data);
|
||||||
return true;
|
return true;
|
||||||
@ -149,12 +153,12 @@ class UserService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function modify(int $uid, string $field, $data)
|
public function modify(int $uid, string $field, $data)
|
||||||
{
|
{
|
||||||
$field_name = match ($field) {
|
$field_name = match ( $field ) {
|
||||||
'password' => 'password',
|
'password' => 'password',
|
||||||
'real_name' => 'real_name',
|
'real_name' => 'real_name',
|
||||||
'head_img' => 'head_img',
|
'head_img' => 'head_img',
|
||||||
};
|
};
|
||||||
return $this->edit($uid, [$field_name => $data]);
|
return $this->edit($uid, [ $field_name => $data ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -162,8 +166,9 @@ class UserService extends BaseAdminService
|
|||||||
* @param int $uid
|
* @param int $uid
|
||||||
* @return bool|true
|
* @return bool|true
|
||||||
*/
|
*/
|
||||||
public function lock(int $uid){
|
public function lock(int $uid)
|
||||||
return $this->edit($uid, ['status' => UserDict::OFF]);
|
{
|
||||||
|
return $this->edit($uid, [ 'status' => UserDict::OFF ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -171,8 +176,9 @@ class UserService extends BaseAdminService
|
|||||||
* @param int $uid
|
* @param int $uid
|
||||||
* @return bool|true
|
* @return bool|true
|
||||||
*/
|
*/
|
||||||
public function unlock(int $uid){
|
public function unlock(int $uid)
|
||||||
return $this->edit($uid, ['status' => UserDict::ON]);
|
{
|
||||||
|
return $this->edit($uid, [ 'status' => UserDict::ON ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -183,12 +189,10 @@ class UserService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function checkUsername($username)
|
public function checkUsername($username)
|
||||||
{
|
{
|
||||||
$count = (new SysUser())->where([['username', '=', $username]])->count();
|
$count = ( new SysUser() )->where([ [ 'username', '=', $username ] ])->count();
|
||||||
if($count > 0)
|
if ($count > 0) {
|
||||||
{
|
|
||||||
return true;
|
return true;
|
||||||
}
|
} else return false;
|
||||||
else return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -196,9 +200,10 @@ class UserService extends BaseAdminService
|
|||||||
* @param int $uid
|
* @param int $uid
|
||||||
* @return SysUser|array|mixed|Model
|
* @return SysUser|array|mixed|Model
|
||||||
*/
|
*/
|
||||||
public function find(int $uid){
|
public function find(int $uid)
|
||||||
|
{
|
||||||
|
|
||||||
$user = (new SysUser())->findOrEmpty($uid);
|
$user = ( new SysUser() )->findOrEmpty($uid);
|
||||||
if ($user->isEmpty())
|
if ($user->isEmpty())
|
||||||
throw new AdminException('USER_NOT_EXIST');
|
throw new AdminException('USER_NOT_EXIST');
|
||||||
return $user;
|
return $user;
|
||||||
@ -210,44 +215,45 @@ class UserService extends BaseAdminService
|
|||||||
* @param array $data
|
* @param array $data
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function edit(int $uid, array $data){
|
public function edit(int $uid, array $data)
|
||||||
|
{
|
||||||
$user = $this->find($uid);
|
$user = $this->find($uid);
|
||||||
$user_data = [
|
$user_data = [
|
||||||
];
|
];
|
||||||
$is_off_status = false;
|
$is_off_status = false;
|
||||||
if(isset($data['status'])){
|
if (isset($data[ 'status' ])) {
|
||||||
$user_data['status'] = $data['status'];
|
$user_data[ 'status' ] = $data[ 'status' ];
|
||||||
if($data['status'] == UserDict::OFF)
|
if ($data[ 'status' ] == UserDict::OFF)
|
||||||
$is_off_status = true;
|
$is_off_status = true;
|
||||||
}
|
}
|
||||||
if(isset($data['head_img'])){
|
if (isset($data[ 'head_img' ])) {
|
||||||
$user_data['head_img'] = $data['head_img'];
|
$user_data[ 'head_img' ] = $data[ 'head_img' ];
|
||||||
}
|
}
|
||||||
if(isset($data['real_name'])){
|
if (isset($data[ 'real_name' ])) {
|
||||||
$user_data['real_name'] = $data['real_name'];
|
$user_data[ 'real_name' ] = $data[ 'real_name' ];
|
||||||
}
|
}
|
||||||
|
|
||||||
$password = $data['password'] ?? '';
|
$password = $data[ 'password' ] ?? '';
|
||||||
$is_change_password = false;
|
$is_change_password = false;
|
||||||
if(!empty($password) && !check_password($password, $user->password)){
|
if (!empty($password) && !check_password($password, $user->password)) {
|
||||||
$user_data['password'] = create_password($password);
|
$user_data[ 'password' ] = create_password($password);
|
||||||
$is_change_password = true;
|
$is_change_password = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($data['role_ids'])){
|
if (isset($data[ 'role_ids' ])) {
|
||||||
$user_data['role_ids'] = $data['role_ids'];
|
$user_data[ 'role_ids' ] = $data[ 'role_ids' ];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(empty($user_data))
|
if (empty($user_data))
|
||||||
return true;
|
return true;
|
||||||
//更新用户信息
|
//更新用户信息
|
||||||
$user->save($user_data);
|
$user->save($user_data);
|
||||||
//更新权限 禁用用户 修改密码 都会清理token
|
//更新权限 禁用用户 修改密码 都会清理token
|
||||||
if($is_off_status || $is_change_password){
|
if ($is_off_status || $is_change_password) {
|
||||||
LoginService::clearToken($uid);
|
LoginService::clearToken($uid);
|
||||||
}
|
}
|
||||||
//清除用户缓存
|
//清除用户缓存
|
||||||
$cache_name = 'user_role_'.$uid;
|
$cache_name = 'user_role_' . $uid;
|
||||||
Cache::delete($cache_name);
|
Cache::delete($cache_name);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -257,13 +263,18 @@ class UserService extends BaseAdminService
|
|||||||
* @param int $uid
|
* @param int $uid
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function del(int $uid){
|
public function del(int $uid)
|
||||||
|
{
|
||||||
$where = [
|
$where = [
|
||||||
['uid', '=', $uid]
|
[ 'uid', '=', $uid ]
|
||||||
];
|
];
|
||||||
(new SysUser())->where($where)->delete();
|
$user = ( new SysUser() )->where($where)->findOrEmpty();
|
||||||
|
if ($user->isEmpty()) throw new AdminException('USER_NOT_EXIST');
|
||||||
|
if ($user->is_admin) throw new AdminException("SUPER_ADMIN_NOT_ALLOW_DEL");
|
||||||
|
$user->delete();
|
||||||
|
LoginService::clearToken($uid);
|
||||||
|
Cache::delete('user_role_' . $uid);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -271,8 +282,9 @@ class UserService extends BaseAdminService
|
|||||||
* @param string $username
|
* @param string $username
|
||||||
* @return SysUser|array|mixed|Model
|
* @return SysUser|array|mixed|Model
|
||||||
*/
|
*/
|
||||||
public function getUserInfoByUsername(string $username){
|
public function getUserInfoByUsername(string $username)
|
||||||
return (new SysUser())->where([['username', '=',$username]])->findOrEmpty();
|
{
|
||||||
|
return ( new SysUser() )->where([ [ 'username', '=', $username ] ])->findOrEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -283,7 +295,7 @@ class UserService extends BaseAdminService
|
|||||||
public function getUserAll(array $where)
|
public function getUserAll(array $where)
|
||||||
{
|
{
|
||||||
$field = 'uid, username, head_img';
|
$field = 'uid, username, head_img';
|
||||||
return (new SysUser())->withSearch(['username', 'realname', 'create_time'], $where)
|
return ( new SysUser() )->withSearch([ 'username', 'realname', 'create_time' ], $where)
|
||||||
->field($field)
|
->field($field)
|
||||||
->order('uid desc')
|
->order('uid desc')
|
||||||
->select()
|
->select()
|
||||||
@ -295,39 +307,42 @@ class UserService extends BaseAdminService
|
|||||||
* @param int $uid
|
* @param int $uid
|
||||||
* @return mixed|string
|
* @return mixed|string
|
||||||
*/
|
*/
|
||||||
public function getUserCache(int $uid){
|
public function getUserCache(int $uid)
|
||||||
$cache_name = 'user_role_'.$uid;
|
{
|
||||||
|
$cache_name = 'user_role_' . $uid;
|
||||||
return cache_remember(
|
return cache_remember(
|
||||||
$cache_name,
|
$cache_name,
|
||||||
function() use($uid) {
|
function () use ($uid) {
|
||||||
$where = array(
|
$where = array(
|
||||||
['uid', '=', $uid],
|
[ 'uid', '=', $uid ],
|
||||||
);
|
);
|
||||||
$field = 'uid, username, head_img, real_name, last_ip, last_time, create_time, login_count, status, delete_time, update_time, role_ids, is_admin';
|
$field = 'uid, username, head_img, real_name, last_ip, last_time, create_time, login_count, status, delete_time, update_time, role_ids, is_admin';
|
||||||
$user = (new SysUser())->where($where)->field($field)->append(['status_name'])->findOrEmpty();
|
$user = ( new SysUser() )->where($where)->field($field)->append([ 'status_name' ])->findOrEmpty();
|
||||||
return $user->toArray();
|
return $user->toArray();
|
||||||
},
|
},
|
||||||
[self::$cache_tag_name, RoleService::$cache_tag_name]
|
[ self::$cache_tag_name, RoleService::$cache_tag_name ]
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过角色id组获取角色
|
* 通过角色id组获取角色
|
||||||
* @param array $role_ids
|
* @param array $role_ids
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function getRoleByUserRoleIds(array $role_ids){
|
public function getRoleByUserRoleIds(array $role_ids)
|
||||||
|
{
|
||||||
sort($role_ids);
|
sort($role_ids);
|
||||||
$cache_name = 'role_by_ids_'.md5(implode(',', $role_ids));
|
$cache_name = 'role_by_ids_' . md5(implode(',', $role_ids));
|
||||||
return cache_remember(
|
return cache_remember(
|
||||||
$cache_name,
|
$cache_name,
|
||||||
function() use($role_ids) {
|
function () use ($role_ids) {
|
||||||
$where = array(
|
$where = array(
|
||||||
['role_id', 'in', $role_ids],
|
[ 'role_id', 'in', $role_ids ],
|
||||||
);
|
);
|
||||||
return SysRole::where($where)->column('role_name');
|
return SysRole::where($where)->column('role_name');
|
||||||
},
|
},
|
||||||
[RoleService::$cache_tag_name]
|
[ RoleService::$cache_tag_name ]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,6 @@ use app\dict\diy\TemplateDict;
|
|||||||
use app\model\diy\Diy;
|
use app\model\diy\Diy;
|
||||||
use app\model\diy\DiyTheme;
|
use app\model\diy\DiyTheme;
|
||||||
use app\service\core\addon\CoreAddonService;
|
use app\service\core\addon\CoreAddonService;
|
||||||
use app\service\core\diy\CoreDiyService;
|
|
||||||
use core\base\BaseApiService;
|
use core\base\BaseApiService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -32,6 +32,13 @@ class CoreAddonService extends CoreAddonBaseService
|
|||||||
$this->model = new Addon();
|
$this->model = new Addon();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getInitList()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'type_list' => AddonDict::getType()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取已下载的插件
|
* 获取已下载的插件
|
||||||
* @return array
|
* @return array
|
||||||
|
|||||||
@ -132,7 +132,6 @@ class CoreDiyFormRecordsService extends BaseCoreService
|
|||||||
|
|
||||||
$data[ 'create_time' ] = time();
|
$data[ 'create_time' ] = time();
|
||||||
// todo $data[ 'value' ] 考虑过滤存储数据,靠后完善,修改表单可能会用到
|
// todo $data[ 'value' ] 考虑过滤存储数据,靠后完善,修改表单可能会用到
|
||||||
$res = $this->model->create($data);
|
|
||||||
|
|
||||||
$diy_form_records_fields_model = new DiyFormRecordsFields();
|
$diy_form_records_fields_model = new DiyFormRecordsFields();
|
||||||
|
|
||||||
@ -191,7 +190,7 @@ class CoreDiyFormRecordsService extends BaseCoreService
|
|||||||
$diy_form_records_fields[] = [
|
$diy_form_records_fields[] = [
|
||||||
'form_id' => $data[ 'form_id' ], // 所属万能表单id
|
'form_id' => $data[ 'form_id' ], // 所属万能表单id
|
||||||
// 'form_field_id'=>'', // todo 暂无,靠后完善
|
// 'form_field_id'=>'', // todo 暂无,靠后完善
|
||||||
'record_id' => $res->record_id, // 关联表单填写记录id
|
// 'record_id' => $res->record_id, // 关联表单填写记录id
|
||||||
'member_id' => $data[ 'member_id' ], // 填写会员id
|
'member_id' => $data[ 'member_id' ], // 填写会员id
|
||||||
'field_key' => $component[ 'id' ], // 字段唯一标识
|
'field_key' => $component[ 'id' ], // 字段唯一标识
|
||||||
'field_type' => $component[ 'componentName' ], // 字段类型
|
'field_type' => $component[ 'componentName' ], // 字段类型
|
||||||
@ -208,8 +207,11 @@ class CoreDiyFormRecordsService extends BaseCoreService
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($diy_form_records_fields)) {
|
if (!empty($diy_form_records_fields)) {
|
||||||
|
$res = $this->model->create($data);
|
||||||
|
foreach ($diy_form_records_fields as &$item){
|
||||||
|
$item['record_id'] = $res->record_id;
|
||||||
|
}
|
||||||
$diy_form_records_fields_model->insertAll($diy_form_records_fields);
|
$diy_form_records_fields_model->insertAll($diy_form_records_fields);
|
||||||
|
|
||||||
$diy_form = new DiyForm();
|
$diy_form = new DiyForm();
|
||||||
@ -224,7 +226,7 @@ class CoreDiyFormRecordsService extends BaseCoreService
|
|||||||
}
|
}
|
||||||
|
|
||||||
Db::commit();
|
Db::commit();
|
||||||
return $res->record_id;
|
return $res->record_id ?? 0;
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
Db::rollback();
|
Db::rollback();
|
||||||
throw new CommonException($e->getMessage());
|
throw new CommonException($e->getMessage());
|
||||||
|
|||||||
92
niucloud/app/service/core/http/HttpHelper.php
Normal file
92
niucloud/app/service/core/http/HttpHelper.php
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\service\core\http;
|
||||||
|
|
||||||
|
class HttpHelper
|
||||||
|
{
|
||||||
|
public function get($url, $data = [])
|
||||||
|
{
|
||||||
|
return $this->formatNiuCloudReturn($this->httpRequest('GET', $url, $data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function put($url, $data = [])
|
||||||
|
{
|
||||||
|
return $this->formatNiuCloudReturn($this->httpRequest('PUT', $url, $data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function post($url, $data = [])
|
||||||
|
{
|
||||||
|
return $this->formatNiuCloudReturn($this->httpRequest('POST', $url, $data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function formatNiuCloudReturn($return)
|
||||||
|
{
|
||||||
|
if ($return['code'] != 1) {
|
||||||
|
throw new \Exception($return['msg']);
|
||||||
|
}
|
||||||
|
return $return['data'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $method
|
||||||
|
* @param string $url
|
||||||
|
* @param array $data
|
||||||
|
* @return mixed
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public function httpRequest(string $method, string $url, array $data = [])
|
||||||
|
{
|
||||||
|
$curl = curl_init();
|
||||||
|
curl_setopt($curl, CURLOPT_URL, $url);
|
||||||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||||||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
|
||||||
|
if (!empty($_SERVER['HTTP_USER_AGENT'])) {
|
||||||
|
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
|
||||||
|
}
|
||||||
|
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
|
||||||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($curl, CURLOPT_HEADER, false);
|
||||||
|
curl_setopt($curl, CURLOPT_PROXY, ''); // 清空代理设置
|
||||||
|
curl_setopt($curl, CURLOPT_HTTPHEADER, [
|
||||||
|
'Content-Type: application/json; charset=utf-8',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 根据请求方法设置不同的CURL选项
|
||||||
|
switch (strtoupper($method)) {
|
||||||
|
case 'POST':
|
||||||
|
curl_setopt($curl, CURLOPT_POST, true);
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
|
||||||
|
break;
|
||||||
|
case 'PUT':
|
||||||
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
|
||||||
|
break;
|
||||||
|
case 'GET':
|
||||||
|
// 对于GET请求,参数通常放在URL中,而不是请求体
|
||||||
|
if (!empty($data)) {
|
||||||
|
$url = $url . (strpos($url, '?') === false ? '?' : '&') . http_build_query($data);
|
||||||
|
curl_setopt($curl, CURLOPT_URL, $url);
|
||||||
|
}
|
||||||
|
// 同时设置HTTP基本认证的另一种方式(保留原代码中的设置)
|
||||||
|
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
|
||||||
|
// curl_setopt($curl, CURLOPT_USERPWD, "[$username]:[$password]");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, strtoupper($method));
|
||||||
|
if (!empty($data)) {
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = curl_exec($curl);
|
||||||
|
if (curl_errno($curl)) {
|
||||||
|
throw new \Exception(curl_error($curl));
|
||||||
|
}
|
||||||
|
curl_close($curl);
|
||||||
|
$response_data = json_decode($result, true);
|
||||||
|
if(empty($response_data)){
|
||||||
|
throw new \Exception("SYSTEM_IS_ERROR");
|
||||||
|
}
|
||||||
|
return $response_data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -47,6 +47,8 @@ class CoreMemberService extends BaseCoreService
|
|||||||
{
|
{
|
||||||
$field_name = match ($field) {
|
$field_name = match ($field) {
|
||||||
'nickname' => 'nickname',
|
'nickname' => 'nickname',
|
||||||
|
'mobile' => 'mobile',
|
||||||
|
'id_card' => 'id_card',
|
||||||
'headimg' => 'headimg',
|
'headimg' => 'headimg',
|
||||||
'member_label' => 'member_label',
|
'member_label' => 'member_label',
|
||||||
'member_level' => 'member_level',
|
'member_level' => 'member_level',
|
||||||
|
|||||||
@ -57,9 +57,9 @@ class CoreMenuService extends BaseCoreService
|
|||||||
*/
|
*/
|
||||||
public function deleteByAddon(string $addon, bool $is_all = true)
|
public function deleteByAddon(string $addon, bool $is_all = true)
|
||||||
{
|
{
|
||||||
$where = [['addon', '=', $addon]];
|
$where = [ [ 'addon', '=', $addon ] ];
|
||||||
if(!$is_all){
|
if (!$is_all) {
|
||||||
$where[] = ['source', '=', MenuDict::SYSTEM];
|
$where[] = [ 'source', '=', MenuDict::SYSTEM ];
|
||||||
}
|
}
|
||||||
Db::name("sys_menu")->where($where)->delete();
|
Db::name("sys_menu")->where($where)->delete();
|
||||||
return true;
|
return true;
|
||||||
@ -71,9 +71,9 @@ class CoreMenuService extends BaseCoreService
|
|||||||
public function refreshAllAddonMenu()
|
public function refreshAllAddonMenu()
|
||||||
{
|
{
|
||||||
|
|
||||||
$addons = (new Addon())->field("key")->select()->toArray();
|
$addons = ( new Addon() )->field("key")->select()->toArray();
|
||||||
foreach ($addons as $k => $v) {
|
foreach ($addons as $k => $v) {
|
||||||
$this->refreshAddonMenu($v["key"]);
|
$this->refreshAddonMenu($v[ "key" ]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -87,16 +87,18 @@ class CoreMenuService extends BaseCoreService
|
|||||||
{
|
{
|
||||||
$addon_loader = new DictLoader("Menu");
|
$addon_loader = new DictLoader("Menu");
|
||||||
|
|
||||||
$addon_admin_tree = $addon_loader->load(["addon" => $addon, "app_type" => "admin"]);
|
$addon_admin_tree = $addon_loader->load([ "addon" => $addon, "app_type" => "admin" ]);
|
||||||
|
|
||||||
|
if (isset($addon_admin_tree[ 'delete' ])) unset($addon_admin_tree[ 'delete' ]);
|
||||||
|
|
||||||
if (isset($addon_admin_tree['delete'])) unset($addon_admin_tree['delete']);
|
|
||||||
$menu_list = [];
|
$menu_list = [];
|
||||||
|
|
||||||
if (!empty($addon_admin_tree)) {
|
if (!empty($addon_admin_tree)) {
|
||||||
$menu_list = array_merge($menu_list, $this->loadMenu($addon_admin_tree, "admin", $addon));
|
$menu_list = array_merge($menu_list, $this->loadMenu($addon_admin_tree, "admin", $addon));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->deleteByAddon($addon, false);
|
$this->deleteByAddon($addon, false);
|
||||||
if(!empty($menu_list))
|
if (!empty($menu_list)) {
|
||||||
{
|
|
||||||
$this->install($menu_list);
|
$this->install($menu_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,28 +131,28 @@ class CoreMenuService extends BaseCoreService
|
|||||||
if (is_array($tree)) {
|
if (is_array($tree)) {
|
||||||
foreach ($tree as $key => $value) {
|
foreach ($tree as $key => $value) {
|
||||||
$item = [
|
$item = [
|
||||||
'menu_name' => $value['menu_name'],
|
'menu_name' => $value[ 'menu_name' ],
|
||||||
'menu_short_name' => $value['menu_short_name'] ?? '',
|
'menu_short_name' => $value[ 'menu_short_name' ] ?? '',
|
||||||
'menu_key' => $value['menu_key'],
|
'menu_key' => $value[ 'menu_key' ],
|
||||||
'app_type' => $app_type,
|
'app_type' => $app_type,
|
||||||
'addon' => $addon,
|
'addon' => $addon,
|
||||||
'parent_key' => $value['parent_key'] ?? $parent_key,
|
'parent_key' => $value[ 'parent_key' ] ?? $parent_key,
|
||||||
'menu_type' => $value['menu_type'],
|
'menu_type' => $value[ 'menu_type' ],
|
||||||
'icon' => $value['icon'] ?? '',
|
'icon' => $value[ 'icon' ] ?? '',
|
||||||
'api_url' => $value['api_url'] ?? '',
|
'api_url' => $value[ 'api_url' ] ?? '',
|
||||||
'router_path' => $value['router_path'] ?? '',
|
'router_path' => $value[ 'router_path' ] ?? '',
|
||||||
'view_path' => $value['view_path'] ?? '',
|
'view_path' => $value[ 'view_path' ] ?? '',
|
||||||
'methods' => $value['methods'] ?? '',
|
'methods' => $value[ 'methods' ] ?? '',
|
||||||
'sort' => $value['sort'] ?? '',
|
'sort' => $value[ 'sort' ] ?? '',
|
||||||
'status' => 1,
|
'status' => 1,
|
||||||
'is_show' => $value['is_show'] ?? 1
|
'is_show' => $value[ 'is_show' ] ?? 1
|
||||||
];
|
];
|
||||||
$refer = $value;
|
$refer = $value;
|
||||||
if (isset($refer['children'])) {
|
if (isset($refer[ 'children' ])) {
|
||||||
unset($refer['children']);
|
unset($refer[ 'children' ]);
|
||||||
$menu_list[] = $item;
|
$menu_list[] = $item;
|
||||||
$p_key = $refer['menu_key'];
|
$p_key = $refer[ 'menu_key' ];
|
||||||
$this->menuTreeToList($value['children'], $p_key, $app_type, $addon, $menu_list);
|
$this->menuTreeToList($value[ 'children' ], $p_key, $app_type, $addon, $menu_list);
|
||||||
} else {
|
} else {
|
||||||
$menu_list[] = $item;
|
$menu_list[] = $item;
|
||||||
}
|
}
|
||||||
@ -180,12 +182,13 @@ class CoreMenuService extends BaseCoreService
|
|||||||
* @throws \think\db\exception\DataNotFoundException
|
* @throws \think\db\exception\DataNotFoundException
|
||||||
* @throws \think\db\exception\ModelNotFoundException
|
* @throws \think\db\exception\ModelNotFoundException
|
||||||
*/
|
*/
|
||||||
public function getRoutePathByMenuKey($menu_key, $paths = []) {
|
public function getRoutePathByMenuKey($menu_key, $paths = [])
|
||||||
$menu = $this->model->where([ ['menu_key', '=', $menu_key], ['app_type', '=', 'admin'] ])->field('parent_key,router_path')->find();
|
{
|
||||||
|
$menu = $this->model->where([ [ 'menu_key', '=', $menu_key ] ])->field('parent_key,router_path')->find();
|
||||||
if (empty($menu)) return '';
|
if (empty($menu)) return '';
|
||||||
array_unshift($paths, $menu['router_path']);
|
array_unshift($paths, $menu[ 'router_path' ]);
|
||||||
if (!empty($menu['parent_key'])) {
|
if (!empty($menu[ 'parent_key' ])) {
|
||||||
return $this->getRoutePathByMenuKey($menu['parent_key'], $paths);
|
return $this->getRoutePathByMenuKey($menu[ 'parent_key' ], $paths);
|
||||||
} else {
|
} else {
|
||||||
return implode('/', $paths);
|
return implode('/', $paths);
|
||||||
}
|
}
|
||||||
|
|||||||
407
niucloud/app/service/core/notice/CoreNiuSmsService.php
Normal file
407
niucloud/app/service/core/notice/CoreNiuSmsService.php
Normal file
@ -0,0 +1,407 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\service\core\notice;
|
||||||
|
|
||||||
|
use app\dict\sys\ConfigKeyDict;
|
||||||
|
use app\dict\sys\SmsDict;
|
||||||
|
use app\service\core\http\HttpHelper;
|
||||||
|
use app\service\core\sys\CoreConfigService;
|
||||||
|
use core\base\BaseAdminService;
|
||||||
|
|
||||||
|
class CoreNiuSmsService extends BaseAdminService
|
||||||
|
{
|
||||||
|
/*************************牛云短信处理****************************/
|
||||||
|
private const PACKAGE_LIST_URL = '/niusms/packages';
|
||||||
|
private const SEND_CODE_URL = '/niusms/send';
|
||||||
|
|
||||||
|
/***子账号相关***/
|
||||||
|
private const SEND_CAPTCHA_URL = '/niusms/captcha';
|
||||||
|
private const LOGIN_ACCOUNT_URL = '/niusms/account/login/%s';
|
||||||
|
private const ACCOUNT_REGISTER_URL = '/niusms/account/register';
|
||||||
|
private const ACCOUNT_INFO_URL = '/niusms/account/info/%s';
|
||||||
|
private const ACCOUNT_EDIT_URL = '/niusms/account/edit/%s';
|
||||||
|
private const ACCOUNT_SEND_LIST_URL = '/niusms/account/send_list/%s';
|
||||||
|
private const RESET_PASSWORD_URL = '/niusms/account/reset/password/%s';
|
||||||
|
|
||||||
|
/**签名相关**/
|
||||||
|
private const SIGN_LIST_URL = '/niusms/sign/%s/list';
|
||||||
|
private const SIGN_INFO_URL = '/niusms/sign/%s/info';
|
||||||
|
private const SIGN_ADD_URL = '/niusms/sign/%s/add';
|
||||||
|
|
||||||
|
/**模版相关**/
|
||||||
|
private const TEMPLATE_LIST_URL = '/niusms/template/%s/list';
|
||||||
|
private const TEMPLATE_INFO_URL = '/niusms/template/%s/info';
|
||||||
|
private const TEMPLATE_ADD_URL = '/niusms/template/%s/add';
|
||||||
|
|
||||||
|
/*****订单相关*****/
|
||||||
|
private const ORDER_LIST_URL = '/niusms/order/list/%s';
|
||||||
|
private const ORDER_CREATE_URL = '/niusms/order/create/%s';
|
||||||
|
private const ORDER_NOTIFY_URL = "/niusms/pay/notify";
|
||||||
|
private const ORDER_CALCULATE_URL = '/niusms/order/calculate/%s';
|
||||||
|
private const ORDER_PAY_URL = '/niusms/pay/info/%s';
|
||||||
|
private const ORDER_INFO_URL = '/niusms/order/info/%s/%s';
|
||||||
|
private const ORDER_STATUS_URL = '/niusms/order/status/%s/%s';
|
||||||
|
|
||||||
|
private $niushop_url_prefix = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$niushop_url_prefix = env('NIU_SHOP_PREFIX', 'https://api.niucloud.com/openapi');
|
||||||
|
if (empty($niushop_url_prefix)) {
|
||||||
|
throw new \Exception('URL_NOT_FOUND');
|
||||||
|
} else {
|
||||||
|
$this->niushop_url_prefix = $niushop_url_prefix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置账号缓存
|
||||||
|
* @param $params
|
||||||
|
* @return \app\model\sys\SysConfig|bool|\think\Model
|
||||||
|
*/
|
||||||
|
public function setNiuLoginConfig($params)
|
||||||
|
{
|
||||||
|
$config = $this->getNiuLoginConfig(true);
|
||||||
|
$config['default'] = $params['default'] ?? ($config['default'] ?? "");
|
||||||
|
$config[SmsDict::NIUSMS] = [
|
||||||
|
'username' => $params['username'] ?? $config[SmsDict::NIUSMS]['username'] ?? "",
|
||||||
|
'password' => $params['password'] ?? $config[SmsDict::NIUSMS]['password'] ?? "",
|
||||||
|
'signature' => $params['signature'] ?? $config[SmsDict::NIUSMS]['signature'] ?? "",
|
||||||
|
];
|
||||||
|
return (new CoreConfigService())->setConfig(ConfigKeyDict::SMS, $config);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getNiuLoginConfig($is_all = false)
|
||||||
|
{
|
||||||
|
$config = (new CoreConfigService())->getConfigValue(ConfigKeyDict::SMS);
|
||||||
|
if ($is_all) {
|
||||||
|
return $config;
|
||||||
|
}
|
||||||
|
return $config[SmsDict::NIUSMS] ?? [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发验证短信
|
||||||
|
* @param $mobile
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function packageList($params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . self::PACKAGE_LIST_URL;
|
||||||
|
$res = (new HttpHelper())->get($url, $params + $this->getPageParam());
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发验证短信
|
||||||
|
* @param $mobile
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function sendMobileCode($params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . self::SEND_CODE_URL;
|
||||||
|
$res = (new HttpHelper())->post($url, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发验证短信
|
||||||
|
* @param $mobile
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function captcha()
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . self::SEND_CAPTCHA_URL;
|
||||||
|
$res = (new HttpHelper())->get($url);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册牛云短信子账号
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function registerAccount($params)
|
||||||
|
{
|
||||||
|
$res = (new HttpHelper())->post($this->niushop_url_prefix . self::ACCOUNT_REGISTER_URL, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录牛云短信子账号
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function loginAccount($params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::LOGIN_ACCOUNT_URL, $params['username']);
|
||||||
|
$res = (new HttpHelper())->post($url, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取牛云短信子账号信息
|
||||||
|
* @param $username
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function accountInfo($username)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::ACCOUNT_INFO_URL, $username);
|
||||||
|
$res = (new HttpHelper())->get($url);
|
||||||
|
$config = $this->getNiuLoginConfig();
|
||||||
|
if ($config['username'] == $res['username']) {
|
||||||
|
$res['signature'] = $config['signature'] ?? "";
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取牛云短信子账号信息
|
||||||
|
* @param $username
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function accountSendList($username, $params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::ACCOUNT_SEND_LIST_URL, $username);
|
||||||
|
$res = (new HttpHelper())->get($url, $this->getPageParam() + $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新账号信息 (手机号 默认签名)
|
||||||
|
* @param $username
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function editAccount($username, $params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::ACCOUNT_EDIT_URL, $username);
|
||||||
|
$res = (new HttpHelper())->put($url, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置密码
|
||||||
|
* @param $username
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function resetPassword($username, $params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::RESET_PASSWORD_URL, $username);
|
||||||
|
$res = (new HttpHelper())->put($url, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************签名处理*********************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取签名列表
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function signList($username)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::SIGN_LIST_URL, $username);
|
||||||
|
$res = (new HttpHelper())->get($url, $this->getPageParam());
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取签名信息
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function signInfo($username, $signature)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::SIGN_INFO_URL, $username);
|
||||||
|
$res = (new HttpHelper())->get($url, ['signature' => $signature]);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 报备签名
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function signCreate($username, $params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::SIGN_ADD_URL, $username);
|
||||||
|
$res = (new HttpHelper())->post($url, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 报备签名-删除
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function signDelete($username, $params)
|
||||||
|
{
|
||||||
|
$time = time();
|
||||||
|
$request['tKey'] = $time;
|
||||||
|
$request['password'] = md5(md5($params['password']) . $time);
|
||||||
|
$request['username'] = $username;
|
||||||
|
$request['remark'] = $params['remark'] ?? '';
|
||||||
|
$request['signatureList'] = $params['signatures'];
|
||||||
|
$url = "https://api-shss.zthysms.com/sms/v1/sign/delete";
|
||||||
|
$res = (new HttpHelper())->httpRequest('POST', $url, $request);
|
||||||
|
if ($res['code'] != 200) {
|
||||||
|
throw new \Exception($res['msg']);
|
||||||
|
}
|
||||||
|
return $res['failList'] ?? [];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**********************模版处理*********************/
|
||||||
|
/**
|
||||||
|
* 获取模版列表
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function templateList($username, $params)
|
||||||
|
{
|
||||||
|
$params = array_merge($params, $this->getPageParam());
|
||||||
|
$params['limit'] = $params['limit'] ?? 100;
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::TEMPLATE_LIST_URL, $username);
|
||||||
|
$res = (new HttpHelper())->get($url, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取模版详情
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function templateInfo($username, $tem_id)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::TEMPLATE_INFO_URL, $username);
|
||||||
|
$res = (new HttpHelper())->get($url, [
|
||||||
|
'tem_id' => $tem_id
|
||||||
|
]);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取签名列表
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function templateCreate($username, $params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::TEMPLATE_ADD_URL, $username);
|
||||||
|
$res = (new HttpHelper())->post($url, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除模版
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function templateDelete($username, $params)
|
||||||
|
{
|
||||||
|
$time = time();
|
||||||
|
$request['tKey'] = $time;
|
||||||
|
$request['password'] = md5(md5($params['password']) . $time);
|
||||||
|
$request['username'] = $username;
|
||||||
|
$request['temId'] = $params['template_id'] ?? '';
|
||||||
|
$url = "https://api-shss.zthysms.com/sms/v2/template/delete";
|
||||||
|
$res = (new HttpHelper())->httpRequest('POST', $url, $request);
|
||||||
|
if ($res['code'] != 200) {
|
||||||
|
throw new \Exception('ZT'.$res['code'].":".$res['msg']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单列表
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function orderList($username, $params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::ORDER_LIST_URL, $username);
|
||||||
|
$res = (new HttpHelper())->get($url, $this->getPageParam() + $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单详情
|
||||||
|
* @param $username
|
||||||
|
* @param $out_trade_no
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function orderInfo($username, $out_trade_no)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::ORDER_INFO_URL, $username, $out_trade_no);
|
||||||
|
$res = (new HttpHelper())->get($url);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单状态
|
||||||
|
* @param $username
|
||||||
|
* @param $out_trade_no
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function orderStatus($username, $out_trade_no)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::ORDER_STATUS_URL, $username, $out_trade_no);
|
||||||
|
$res = (new HttpHelper())->get($url);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建订单
|
||||||
|
* @param $username
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function orderCreate($username, $params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::ORDER_CREATE_URL, $username);
|
||||||
|
$res = (new HttpHelper())->post($url, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建订单
|
||||||
|
* @param $username
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function calculate($username, $params)
|
||||||
|
{
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::ORDER_CALCULATE_URL, $username);
|
||||||
|
$res = (new HttpHelper())->post($url, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单支付信息
|
||||||
|
* @param $username
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function orderPayInfo($username, $params)
|
||||||
|
{
|
||||||
|
// 判断是否为https协议
|
||||||
|
$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? 'https' : 'http';
|
||||||
|
// 获取域名(含端口)
|
||||||
|
$host = $_SERVER['HTTP_HOST'];
|
||||||
|
// 组合成全域名
|
||||||
|
$return_url = $protocol . '://' . $host . "/site/setting/sms/pay";
|
||||||
|
|
||||||
|
$url = $this->niushop_url_prefix . sprintf(self::ORDER_PAY_URL, $username);
|
||||||
|
$params['notify_url'] = $this->niushop_url_prefix . self::ORDER_NOTIFY_URL;
|
||||||
|
//TODO::待添加支付结果页面
|
||||||
|
$params['return_url'] = $return_url;
|
||||||
|
$res = (new HttpHelper())->post($url, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -111,7 +111,9 @@ class CoreNoticeService extends BaseCoreService
|
|||||||
'weapp_template_id' => '',
|
'weapp_template_id' => '',
|
||||||
'sms_id' => '',
|
'sms_id' => '',
|
||||||
'wechat_first' => '',
|
'wechat_first' => '',
|
||||||
'wechat_remark' => ''
|
'wechat_remark' => '',
|
||||||
|
'audit_status'=>'wait',
|
||||||
|
'sign'=>'',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
$item['notice'][] = $notice_item;
|
$item['notice'][] = $notice_item;
|
||||||
@ -132,7 +134,7 @@ class CoreNoticeService extends BaseCoreService
|
|||||||
public function getInfo(string $key)
|
public function getInfo(string $key)
|
||||||
{
|
{
|
||||||
if (!array_key_exists($key, NoticeDict::getNotice())) throw new NoticeException('NOTICE_TYPE_NOT_EXIST');
|
if (!array_key_exists($key, NoticeDict::getNotice())) throw new NoticeException('NOTICE_TYPE_NOT_EXIST');
|
||||||
$info = $this->model->where([ [ 'id', '>', 0 ], [ 'key', '=', $key ] ])->findOrEmpty()->toArray();
|
$info = $this->model->where([ [ 'key', '=', $key ] ])->findOrEmpty()->toArray();
|
||||||
if (!empty($info)) {
|
if (!empty($info)) {
|
||||||
$notice = array_merge(NoticeDict::getNotice($key), $info);
|
$notice = array_merge(NoticeDict::getNotice($key), $info);
|
||||||
} else {
|
} else {
|
||||||
@ -172,7 +174,7 @@ class CoreNoticeService extends BaseCoreService
|
|||||||
$wechat = $notice_template[ 'wechat' ] ?? [];
|
$wechat = $notice_template[ 'wechat' ] ?? [];
|
||||||
$this->model->create(array_merge([
|
$this->model->create(array_merge([
|
||||||
'key' => $key,
|
'key' => $key,
|
||||||
'sms_content' => $notice_template['sms'][ 'content' ] ?? '',
|
'sms_content' => $notice_template[ 'sms']['content' ] ?? '',
|
||||||
'wechat_first' => $data[ 'wechat_first' ] ?? ( $wechat[ 'first' ] ?? '' ),
|
'wechat_first' => $data[ 'wechat_first' ] ?? ( $wechat[ 'first' ] ?? '' ),
|
||||||
'wechat_remark' => $data[ 'wechat_remark' ] ?? ( $wechat[ 'remark' ] ?? '' ),
|
'wechat_remark' => $data[ 'wechat_remark' ] ?? ( $wechat[ 'remark' ] ?? '' ),
|
||||||
], $data));
|
], $data));
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace app\service\core\notice;
|
namespace app\service\core\notice;
|
||||||
|
|
||||||
|
use app\dict\sys\ConfigKeyDict;
|
||||||
use app\dict\sys\SmsDict;
|
use app\dict\sys\SmsDict;
|
||||||
use app\service\core\sys\CoreConfigService;
|
use app\service\core\sys\CoreConfigService;
|
||||||
use core\base\BaseCoreService;
|
use core\base\BaseCoreService;
|
||||||
@ -29,7 +30,7 @@ class CoreSmsService extends BaseCoreService
|
|||||||
parent::__construct();
|
parent::__construct();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function send($mobile, $params, $key, $template_id, $content)
|
public function send($mobile, $params, $key, $template_id, $content,$url_params=[])
|
||||||
{
|
{
|
||||||
//查询配置
|
//查询配置
|
||||||
$config = $this->getDefaultSmsConfig();
|
$config = $this->getDefaultSmsConfig();
|
||||||
@ -46,9 +47,9 @@ class CoreSmsService extends BaseCoreService
|
|||||||
'params' => $params,
|
'params' => $params,
|
||||||
'status' => SmsDict::SENDING
|
'status' => SmsDict::SENDING
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$sms_driver = new SmsLoader($sms_type, $config);
|
$sms_driver = new SmsLoader($sms_type, $config);
|
||||||
$params = $this->makeUp($params, $content, $sms_type);
|
$params = $this->makeUp($params, $content, $sms_type);
|
||||||
|
$params['url_params'] = $url_params;
|
||||||
$result = $sms_driver->send($mobile, $template_id, $params);
|
$result = $sms_driver->send($mobile, $template_id, $params);
|
||||||
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
@ -90,7 +91,7 @@ class CoreSmsService extends BaseCoreService
|
|||||||
*/
|
*/
|
||||||
public function getDefaultSmsConfig()
|
public function getDefaultSmsConfig()
|
||||||
{
|
{
|
||||||
$info = (new CoreConfigService())->getConfig('SMS')['value'] ?? [];
|
$info = (new CoreConfigService())->getConfig(ConfigKeyDict::SMS)['value'] ?? [];
|
||||||
if (empty($info))
|
if (empty($info))
|
||||||
throw new NoticeException('NOTICE_SMS_NOT_OPEN');
|
throw new NoticeException('NOTICE_SMS_NOT_OPEN');
|
||||||
|
|
||||||
|
|||||||
@ -34,12 +34,18 @@ class NoticeService extends BaseCoreService
|
|||||||
* @param $key
|
* @param $key
|
||||||
* @param $data
|
* @param $data
|
||||||
* @return false|mixed
|
* @return false|mixed
|
||||||
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public static function send($key, $data){
|
public static function send($key, $data){
|
||||||
|
|
||||||
$template = (new CoreNoticeService())->getInfo($key);
|
try {
|
||||||
if(empty($template)) return false;
|
$template = (new CoreNoticeService())->getInfo($key);
|
||||||
|
if(empty($template)) return false;
|
||||||
|
|
||||||
return Notice::dispatch(['key' => $key, 'data' => $data, 'template' => $template], is_async:$template['async']);
|
return Notice::dispatch(['key' => $key, 'data' => $data, 'template' => $template], is_async:$template['async']);
|
||||||
|
|
||||||
|
}catch (\Exception $e){
|
||||||
|
throw new \Exception($e->getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -27,6 +27,7 @@ use Throwable;
|
|||||||
class CoreRefundService extends BaseCoreService
|
class CoreRefundService extends BaseCoreService
|
||||||
{
|
{
|
||||||
protected $pay_event;
|
protected $pay_event;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
@ -41,16 +42,17 @@ class CoreRefundService extends BaseCoreService
|
|||||||
* @param string $reason
|
* @param string $reason
|
||||||
* @return string|null
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public function create(string $out_trade_no, float $money, string $reason = '', $trade_type = '', $trade_id = ''){
|
public function create(string $out_trade_no, float $money, string $reason = '', $trade_type = '', $trade_id = '')
|
||||||
|
{
|
||||||
//通过交易流水号获取支付单据
|
//通过交易流水号获取支付单据
|
||||||
$pay = (new CorePayService())->findPayInfoByOutTradeNo($out_trade_no);
|
$pay = ( new CorePayService() )->findPayInfoByOutTradeNo($out_trade_no);
|
||||||
if($pay->isEmpty()) throw new PayException('ALIPAY_TRANSACTION_NO_NOT_EXIST');//单据不存在
|
if ($pay->isEmpty()) throw new PayException('ALIPAY_TRANSACTION_NO_NOT_EXIST');//单据不存在
|
||||||
|
|
||||||
//查询当前支付已存在的退狂单据,所有的退款总额不能超过支付单据的支付金额
|
// 查询当前支付已存在的退款单据,所有的退款总额不能超过支付单据的支付金额
|
||||||
$total_refund_money = $this->model->where([['out_trade_no', '=', $out_trade_no], ['status', '<>', RefundDict::FAIL]])->sum('money');
|
$total_refund_money = $this->model->where([ [ 'out_trade_no', '=', $out_trade_no ], [ 'status', '<>', RefundDict::FAIL ] ])->sum('money');
|
||||||
|
|
||||||
$comparison = bccomp(bcadd($total_refund_money, $money), $pay['money']);//浮点数直接进行比较会出现精度问题
|
$comparison = bccomp(bcadd($total_refund_money, $money), $pay[ 'money' ]); // 浮点数直接进行比较会出现精度问题
|
||||||
if ($comparison > 0) throw new PayException('退款金额不能超过支付总额');//退款金额不能超过支付总额
|
if ($comparison > 0) throw new PayException('退款金额不能超过支付总额'); // 退款金额不能超过支付总额
|
||||||
|
|
||||||
//校验当前数据是否存在
|
//校验当前数据是否存在
|
||||||
//存在就修改,不存在就创建
|
//存在就修改,不存在就创建
|
||||||
@ -76,26 +78,27 @@ class CoreRefundService extends BaseCoreService
|
|||||||
* @param string $voucher
|
* @param string $voucher
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function refund(string $refund_no, $voucher = '', $refund_type = RefundDict::BACK, $main_type = '', $main_id = 0){
|
public function refund(string $refund_no, $voucher = '', $refund_type = RefundDict::BACK, $main_type = '', $main_id = 0)
|
||||||
|
{
|
||||||
$refund = $this->findByRefundNo($refund_no);
|
$refund = $this->findByRefundNo($refund_no);
|
||||||
if($refund->isEmpty()) throw new PayException('REFUND_NOT_EXIST');
|
if ($refund->isEmpty()) throw new PayException('REFUND_NOT_EXIST');
|
||||||
$out_trade_no = $refund->out_trade_no;
|
$out_trade_no = $refund->out_trade_no;
|
||||||
$money = $refund->money;
|
$money = $refund->money;
|
||||||
$pay = (new CorePayService())->findPayInfoByOutTradeNo($out_trade_no);
|
$pay = ( new CorePayService() )->findPayInfoByOutTradeNo($out_trade_no);
|
||||||
if($pay->isEmpty()) throw new PayException('ALIPAY_TRANSACTION_NO_NOT_EXIST');//单据不存在
|
if ($pay->isEmpty()) throw new PayException('ALIPAY_TRANSACTION_NO_NOT_EXIST');//单据不存在
|
||||||
try{
|
try {
|
||||||
//存入退款方式
|
//存入退款方式
|
||||||
$refund->save(['refund_type' => $refund_type]);
|
$refund->save([ 'refund_type' => $refund_type ]);
|
||||||
if($refund_type == RefundDict::BACK){
|
if ($refund_type == RefundDict::BACK) {
|
||||||
//判断成功的话,可以直接调用退款成功
|
//判断成功的话,可以直接调用退款成功
|
||||||
$pay_result = $this->pay_event->init($refund->channel, $refund->type)->refund($out_trade_no, $money, $pay['money'], $refund_no, $voucher);
|
$pay_result = $this->pay_event->init($refund->channel, $refund->type)->refund($out_trade_no, $money, $pay[ 'money' ], $refund_no, $voucher);
|
||||||
$this->refundNotify($out_trade_no, $refund->type, $pay_result);
|
$this->refundNotify($out_trade_no, $refund->type, $pay_result);
|
||||||
}else if($refund_type == RefundDict::OFFLINE){
|
} else if ($refund_type == RefundDict::OFFLINE) {
|
||||||
$pay_result = $this->pay_event->init($refund->channel, PayDict::OFFLINEPAY)->refund($out_trade_no, $money, $pay['money'], $refund_no, $voucher);
|
$pay_result = $this->pay_event->init($refund->channel, PayDict::OFFLINEPAY)->refund($out_trade_no, $money, $pay[ 'money' ], $refund_no, $voucher);
|
||||||
$this->refundNotify($out_trade_no, $refund->type, $pay_result, $main_type, $main_id);
|
$this->refundNotify($out_trade_no, $refund->type, $pay_result, $main_type, $main_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}catch ( Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
throw new PayException($e->getMessage());
|
throw new PayException($e->getMessage());
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -106,9 +109,10 @@ class CoreRefundService extends BaseCoreService
|
|||||||
* @param string $refund_no
|
* @param string $refund_no
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function findByRefundNo(string $refund_no){
|
public function findByRefundNo(string $refund_no)
|
||||||
|
{
|
||||||
return $this->model->where([
|
return $this->model->where([
|
||||||
['refund_no', '=', $refund_no],
|
[ 'refund_no', '=', $refund_no ],
|
||||||
])->findOrEmpty();
|
])->findOrEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,25 +126,26 @@ class CoreRefundService extends BaseCoreService
|
|||||||
* @param $main_id
|
* @param $main_id
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function refundNotify($out_trade_no, string $type, array $params = [], $main_type = '', $main_id = 0){
|
public function refundNotify($out_trade_no, string $type, array $params = [], $main_type = '', $main_id = 0)
|
||||||
$refund_no = $params['refund_no'];
|
{
|
||||||
|
$refund_no = $params[ 'refund_no' ];
|
||||||
|
|
||||||
$refund = $this->findByRefundNo($refund_no);
|
$refund = $this->findByRefundNo($refund_no);
|
||||||
|
|
||||||
if($refund->isEmpty()) throw new PayException('REFUND_NOT_EXIST');
|
if ($refund->isEmpty()) throw new PayException('REFUND_NOT_EXIST');
|
||||||
if(!in_array($refund['status'], [RefundDict::WAIT, RefundDict::DEALING])) throw new PayException('REFUND_IS_CHANGE');//只有待退款和退款中的退款单据可以
|
if (!in_array($refund[ 'status' ], [ RefundDict::WAIT, RefundDict::DEALING ])) throw new PayException('REFUND_IS_CHANGE');//只有待退款和退款中的退款单据可以
|
||||||
|
|
||||||
$status = $params['status'];//第三方支付的状态,根据状态进行下一步业务
|
$status = $params[ 'status' ];//第三方支付的状态,根据状态进行下一步业务
|
||||||
// 启动事务
|
// 启动事务
|
||||||
Db::startTrans();
|
Db::startTrans();
|
||||||
try {
|
try {
|
||||||
switch($status){
|
switch ($status) {
|
||||||
case RefundDict::SUCCESS://退款成功
|
case RefundDict::SUCCESS://退款成功
|
||||||
$this->refundSuccess([
|
$this->refundSuccess([
|
||||||
'out_trade_no' => $out_trade_no,
|
'out_trade_no' => $out_trade_no,
|
||||||
'refund_no' => $refund_no,
|
'refund_no' => $refund_no,
|
||||||
'trade_type' => $refund['trade_type'],
|
'trade_type' => $refund[ 'trade_type' ],
|
||||||
'trade_id' => $refund['trade_id'],
|
'trade_id' => $refund[ 'trade_id' ],
|
||||||
'main_type' => $main_type,
|
'main_type' => $main_type,
|
||||||
'main_id' => $main_id
|
'main_id' => $main_id
|
||||||
]);
|
]);
|
||||||
@ -156,14 +161,14 @@ class CoreRefundService extends BaseCoreService
|
|||||||
$this->refundFail([
|
$this->refundFail([
|
||||||
'out_trade_no' => $out_trade_no,
|
'out_trade_no' => $out_trade_no,
|
||||||
'refund_no' => $refund_no,
|
'refund_no' => $refund_no,
|
||||||
'fail_reason' => $params['fail_reason'] ?? ''
|
'fail_reason' => $params[ 'fail_reason' ] ?? ''
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// 提交事务
|
// 提交事务
|
||||||
Db::commit();
|
Db::commit();
|
||||||
return true;
|
return true;
|
||||||
} catch ( Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
Db::rollback();
|
Db::rollback();
|
||||||
throw new PayException($e->getMessage());
|
throw new PayException($e->getMessage());
|
||||||
@ -175,21 +180,24 @@ class CoreRefundService extends BaseCoreService
|
|||||||
* @param $data
|
* @param $data
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function check($data){
|
public function check($data)
|
||||||
$out_trade_no = $data['out_trade_no'];
|
{
|
||||||
$refund_no = $data['refund_no'];
|
$out_trade_no = $data[ 'out_trade_no' ];
|
||||||
|
$refund_no = $data[ 'refund_no' ];
|
||||||
$refund = $this->findByRefundNo($refund_no);
|
$refund = $this->findByRefundNo($refund_no);
|
||||||
if($refund->isEmpty()) throw new PayException('REFUND_NOT_EXIST');
|
if ($refund->isEmpty()) throw new PayException('REFUND_NOT_EXIST');
|
||||||
if(!in_array($refund['status'], [RefundDict::WAIT, RefundDict::DEALING])) throw new PayException('REFUND_IS_CHANGE');//只有待退款和退款中的退款单据可以
|
if (!in_array($refund[ 'status' ], [ RefundDict::WAIT, RefundDict::DEALING ])) throw new PayException('REFUND_IS_CHANGE');//只有待退款和退款中的退款单据可以
|
||||||
//查询第三方退款单据
|
//查询第三方退款单据
|
||||||
$refund_info = $this->pay_event->init($refund->channel, $refund->type)->getRefund($out_trade_no, $refund_no);
|
$refund_info = $this->pay_event->init($refund->channel, $refund->type)->getRefund($out_trade_no, $refund_no);
|
||||||
//这儿的refund_info 已经统一整理成公共的数据格式
|
//这儿的refund_info 已经统一整理成公共的数据格式
|
||||||
$status = $refund_info['status'];
|
$status = $refund_info[ 'status' ];
|
||||||
switch($status){
|
switch ($status) {
|
||||||
case RefundDict::SUCCESS://退款成功
|
case RefundDict::SUCCESS://退款成功
|
||||||
$this->refundSuccess([
|
$this->refundSuccess([
|
||||||
'out_trade_no' => $out_trade_no,
|
'out_trade_no' => $out_trade_no,
|
||||||
'refund_no' => $refund_no,
|
'refund_no' => $refund_no,
|
||||||
|
'trade_type' => $refund[ 'trade_type' ],
|
||||||
|
'trade_id' => $refund[ 'trade_id' ],
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
case RefundDict::DEALING://退款处理中
|
case RefundDict::DEALING://退款处理中
|
||||||
@ -202,7 +210,7 @@ class CoreRefundService extends BaseCoreService
|
|||||||
$this->refundFail([
|
$this->refundFail([
|
||||||
'out_trade_no' => $out_trade_no,
|
'out_trade_no' => $out_trade_no,
|
||||||
'refund_no' => $refund_no,
|
'refund_no' => $refund_no,
|
||||||
'fail_reason' => $refund_info['fail_reason']
|
'fail_reason' => $refund_info[ 'fail_reason' ]
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -214,18 +222,19 @@ class CoreRefundService extends BaseCoreService
|
|||||||
* @param array $data
|
* @param array $data
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function refundSuccess(array $data){
|
public function refundSuccess(array $data)
|
||||||
|
{
|
||||||
|
|
||||||
$out_trade_no = $data['out_trade_no'];
|
$out_trade_no = $data[ 'out_trade_no' ];
|
||||||
$refund_no = $data['refund_no'];
|
$refund_no = $data[ 'refund_no' ];
|
||||||
$this->model->where([
|
$this->model->where([
|
||||||
['refund_no', '=', $refund_no]
|
[ 'refund_no', '=', $refund_no ]
|
||||||
])->update([
|
])->update([
|
||||||
'status' => RefundDict::SUCCESS
|
'status' => RefundDict::SUCCESS
|
||||||
]);
|
]);
|
||||||
$pay = (new CorePayService())->findPayInfoByOutTradeNo($out_trade_no);
|
$pay = ( new CorePayService() )->findPayInfoByOutTradeNo($out_trade_no);
|
||||||
$result = event('RefundSuccess', ['refund_no' => $refund_no, 'trade_type' => $pay->trade_type, 'trade_id' => $data['trade_id']]);
|
$result = event('RefundSuccess', [ 'refund_no' => $refund_no, 'trade_type' => $pay->trade_type, 'trade_id' => $data[ 'trade_id' ] ]);
|
||||||
if(!check_event_result($result)){
|
if (!check_event_result($result)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -236,13 +245,14 @@ class CoreRefundService extends BaseCoreService
|
|||||||
* @param array $data
|
* @param array $data
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function refundFail(array $data){
|
public function refundFail(array $data)
|
||||||
$refund_no = $data['refund_no'];
|
{
|
||||||
|
$refund_no = $data[ 'refund_no' ];
|
||||||
$this->model->where([
|
$this->model->where([
|
||||||
['refund_no', '=', $refund_no]
|
[ 'refund_no', '=', $refund_no ]
|
||||||
])->update([
|
])->update([
|
||||||
'status' => RefundDict::FAIL,
|
'status' => RefundDict::FAIL,
|
||||||
'fail_reason' => $data['fail_reason']
|
'fail_reason' => $data[ 'fail_reason' ]
|
||||||
]);
|
]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -252,11 +262,12 @@ class CoreRefundService extends BaseCoreService
|
|||||||
* @param array $data
|
* @param array $data
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function refundDealing(array $data){
|
public function refundDealing(array $data)
|
||||||
$out_trade_no = $data['out_trade_no'];
|
{
|
||||||
$refund_no = $data['refund_no'];
|
$out_trade_no = $data[ 'out_trade_no' ];
|
||||||
|
$refund_no = $data[ 'refund_no' ];
|
||||||
$this->model->where([
|
$this->model->where([
|
||||||
['refund_no', '=', $refund_no]
|
[ 'refund_no', '=', $refund_no ]
|
||||||
])->update([
|
])->update([
|
||||||
'status' => RefundDict::DEALING
|
'status' => RefundDict::DEALING
|
||||||
]);
|
]);
|
||||||
|
|||||||
@ -67,7 +67,7 @@ class CoreWeappCloudService extends CoreCloudBaseService
|
|||||||
// 如果不存在编译版小程序
|
// 如果不存在编译版小程序
|
||||||
if ($compile_addon->isEmpty()) {
|
if ($compile_addon->isEmpty()) {
|
||||||
dir_copy($this->root_path . 'uni-app', $uni_dir, exclude_dirs: [ 'node_modules', 'unpackage', 'dist' ]);
|
dir_copy($this->root_path . 'uni-app', $uni_dir, exclude_dirs: [ 'node_modules', 'unpackage', 'dist' ]);
|
||||||
// $this->handleTabbar($uni_dir . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR);
|
$this->handleTabbar($uni_dir . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR);
|
||||||
// 替换env文件
|
// 替换env文件
|
||||||
$this->weappEnvReplace($uni_dir . DIRECTORY_SEPARATOR . '.env.production');
|
$this->weappEnvReplace($uni_dir . DIRECTORY_SEPARATOR . '.env.production');
|
||||||
} else {
|
} else {
|
||||||
@ -123,6 +123,9 @@ class CoreWeappCloudService extends CoreCloudBaseService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$tabbarList = array_map(function ($item) {
|
$tabbarList = array_map(function ($item) {
|
||||||
|
if (strpos($item[ 'link' ][ 'url' ], '?') !== false) {
|
||||||
|
$item[ 'link' ][ 'url' ] = explode('?', $item[ 'link' ][ 'url' ])[0];
|
||||||
|
}
|
||||||
$link = array_filter(explode('/', $item[ 'link' ][ 'url' ]));
|
$link = array_filter(explode('/', $item[ 'link' ][ 'url' ]));
|
||||||
$item[ 'link' ] = $item[ 'link' ][ 'url' ];
|
$item[ 'link' ] = $item[ 'link' ][ 'url' ];
|
||||||
$item[ 'component' ] = implode('-', $link);
|
$item[ 'component' ] = implode('-', $link);
|
||||||
|
|||||||
29
niucloud/app/upgrade/v154/upgrade.sql
Normal file
29
niucloud/app/upgrade/v154/upgrade.sql
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
DROP TABLE IF EXISTS `niu_sms_template`;
|
||||||
|
CREATE TABLE `niu_sms_template` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`sms_type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '短信服务商类型 niuyun-牛云 aliyun-阿里云 tencent-腾讯',
|
||||||
|
`username` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '子账号名称',
|
||||||
|
`template_key` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模版key',
|
||||||
|
`template_id` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模版id',
|
||||||
|
`template_type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模版类型',
|
||||||
|
`template_content` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模版内容',
|
||||||
|
`param_json` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '参数变量',
|
||||||
|
`status` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '上下架状态',
|
||||||
|
`audit_status` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '报备、审核状态',
|
||||||
|
`audit_msg` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '审核结果/拒绝原因',
|
||||||
|
`report_info` TEXT DEFAULT NULL COMMENT '报备、审核信息',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='牛云短信模板表';
|
||||||
|
|
||||||
|
ALTER TABLE `member` ADD COLUMN `id_card` VARCHAR(30) DEFAULT '' COMMENT '身份证号';
|
||||||
|
|
||||||
|
ALTER TABLE `member` MODIFY `id_card` VARCHAR(30) DEFAULT '' COMMENT '身份证号' AFTER `birthday`;
|
||||||
|
|
||||||
|
ALTER TABLE `member` ADD COLUMN `remark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注';
|
||||||
|
|
||||||
|
ALTER TABLE `member` MODIFY `remark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注' AFTER `location`;
|
||||||
|
|
||||||
|
ALTER TABLE `addon` CHANGE COLUMN `key` `key` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '插件标识';
|
||||||
@ -35,7 +35,7 @@ class CashOutConfig extends Validate
|
|||||||
'rate.between' => 'validate_member.cash_out_rate_between',
|
'rate.between' => 'validate_member.cash_out_rate_between',
|
||||||
'is_auto_verify.in' => 'validate_member.cash_out_is_auto_verify_in',
|
'is_auto_verify.in' => 'validate_member.cash_out_is_auto_verify_in',
|
||||||
'is_auto_transfer.in' => 'validate_member.cash_out_is_auto_transfer_in',
|
'is_auto_transfer.in' => 'validate_member.cash_out_is_auto_transfer_in',
|
||||||
'transfer_type.require' => 'validate_member_cash_out_config.transfer_type_require',
|
'transfer_type.requireIf' => 'validate_member_cash_out_config.transfer_type_require',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $scene = [
|
protected $scene = [
|
||||||
|
|||||||
@ -27,7 +27,7 @@ class Member extends Validate
|
|||||||
|
|
||||||
protected $rule = [
|
protected $rule = [
|
||||||
'nickname' => 'requireWithout:field|max:30|requireIf:field,nickname',
|
'nickname' => 'requireWithout:field|max:30|requireIf:field,nickname',
|
||||||
'mobile' => 'mobile',
|
'mobile' => 'mobile|unique:member',
|
||||||
'sex' => 'checkSex',
|
'sex' => 'checkSex',
|
||||||
'birthday' => 'date',
|
'birthday' => 'date',
|
||||||
'username' => 'require|checkUsername',
|
'username' => 'require|checkUsername',
|
||||||
@ -39,8 +39,8 @@ class Member extends Validate
|
|||||||
'nickname.requireWithout' => 'validate_member.nickname_require',
|
'nickname.requireWithout' => 'validate_member.nickname_require',
|
||||||
'nickname.requireIf' => 'validate_member.nickname_require',
|
'nickname.requireIf' => 'validate_member.nickname_require',
|
||||||
'nickname.max' => 'validate_member.nickname_max',
|
'nickname.max' => 'validate_member.nickname_max',
|
||||||
'mobile.require' => 'validate_member.mobile_require',
|
|
||||||
'mobile.mobile' => 'validate_member.mobile_mobile',
|
'mobile.mobile' => 'validate_member.mobile_mobile',
|
||||||
|
'mobile.unique' => 'validate_member.mobile_unique',
|
||||||
'birthday' => 'validate_member.birthday_format',
|
'birthday' => 'validate_member.birthday_format',
|
||||||
'username.require' => 'validate_member.username_require',
|
'username.require' => 'validate_member.username_require',
|
||||||
'username.unique' => 'validate_member.username_is_exist',
|
'username.unique' => 'validate_member.username_is_exist',
|
||||||
@ -52,8 +52,8 @@ class Member extends Validate
|
|||||||
|
|
||||||
protected $scene = [
|
protected $scene = [
|
||||||
'add' => ['birthday', 'mobile', 'password'],
|
'add' => ['birthday', 'mobile', 'password'],
|
||||||
'edit' => ['sex', 'birthday'],
|
'edit' => ['sex', 'birthday','mobile'],
|
||||||
'modify' => ['sex', 'birthday'],
|
'modify' => ['sex', 'birthday','mobile'],
|
||||||
'account_register' => ['username', 'password', 'mobile'],
|
'account_register' => ['username', 'password', 'mobile'],
|
||||||
'reset_password' => ['password', 'mobile'],
|
'reset_password' => ['password', 'mobile'],
|
||||||
'set_status' => ['status']
|
'set_status' => ['status']
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'version' => '1.5.3',
|
'version' => '1.5.4',
|
||||||
'code' => '2025052201'
|
'code' => '2025061001'
|
||||||
];
|
];
|
||||||
|
|||||||
@ -154,6 +154,42 @@ abstract class BaseDict extends Storage
|
|||||||
return $files_data;
|
return $files_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载文件数据
|
||||||
|
* @param $files
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function loadFilesWithAddon($files)
|
||||||
|
{
|
||||||
|
$default_sort = 100000;
|
||||||
|
$files_data = [];
|
||||||
|
if (!empty($files)) {
|
||||||
|
foreach ($files as $addon => $file) {
|
||||||
|
$config = include $file;
|
||||||
|
|
||||||
|
if (!empty($config)) {
|
||||||
|
$temp[$addon] = $config;
|
||||||
|
$config = $temp;
|
||||||
|
if (isset($config['file_sort'])) {
|
||||||
|
$sort = $config['file_sort'];
|
||||||
|
unset($config['file_sort']);
|
||||||
|
$sort = $sort * 10;
|
||||||
|
while (array_key_exists($sort, $files_data)) {
|
||||||
|
$sort++;
|
||||||
|
}
|
||||||
|
$files_data[$sort] = $config;
|
||||||
|
} else {
|
||||||
|
$files_data[$default_sort] = $config;
|
||||||
|
$default_sort++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ksort($files_data);
|
||||||
|
return $files_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加载
|
* 加载
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
|||||||
@ -1,50 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Niucloud-admin 企业快速开发的多应用管理平台
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 官方网址:https://www.niucloud.com
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | niucloud团队 版权所有 开源版本可自由商用
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Author: Niucloud Team
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
namespace core\dict;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 图标
|
|
||||||
* Class Icon
|
|
||||||
* @package core\dict
|
|
||||||
*/
|
|
||||||
class Icon extends BaseDict
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param array $data
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function load(array $data): array
|
|
||||||
{
|
|
||||||
$sys_path = dirname(app()->getRootPath()) . str_replace('/', DIRECTORY_SEPARATOR, '/admin/src/styles/icon');
|
|
||||||
$file_arr = getFileMap($sys_path);
|
|
||||||
$icon_arr = [];
|
|
||||||
if (!empty($file_arr)) {
|
|
||||||
foreach ($file_arr as $ck => $cv) {
|
|
||||||
if (str_contains($cv, '.json')) {
|
|
||||||
$json_string = file_get_contents($ck);
|
|
||||||
$icon = json_decode($json_string, true, 512, JSON_THROW_ON_ERROR);
|
|
||||||
$icon_arr[] = $icon;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count($icon_arr) > 1) {
|
|
||||||
$last_icon = array_pop($icon_arr); // 最后一个
|
|
||||||
$first_icon = array_shift($icon_arr); // 第一个
|
|
||||||
|
|
||||||
array_unshift($icon_arr, $last_icon); // 将系统图标放到第一位置
|
|
||||||
$icon_arr[] = $first_icon; // 交换位置
|
|
||||||
}
|
|
||||||
|
|
||||||
return $icon_arr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -20,19 +20,24 @@ class Notice extends BaseDict
|
|||||||
*/
|
*/
|
||||||
public function load(array $data)
|
public function load(array $data)
|
||||||
{
|
{
|
||||||
|
$with_addon = ($data['with_addon'] ?? 0) == 1;
|
||||||
$template_files = [];
|
$template_files = [];
|
||||||
$system_path = $this->getDictPath() . "notice" . DIRECTORY_SEPARATOR . $data[ 'type' ] . ".php";
|
$system_path = $this->getDictPath() . "notice" . DIRECTORY_SEPARATOR . $data['type'] . ".php";
|
||||||
if (is_file($system_path)) {
|
if (is_file($system_path)) {
|
||||||
$template_files[] = $system_path;
|
$template_files['app'] = $system_path;
|
||||||
}
|
}
|
||||||
$addons = $this->getLocalAddons();
|
$addons = $this->getLocalAddons();
|
||||||
foreach ($addons as $v) {
|
foreach ($addons as $v) {
|
||||||
$template_path = $this->getAddonDictPath($v) . "notice" . DIRECTORY_SEPARATOR . $data[ 'type' ] . ".php";
|
$template_path = $this->getAddonDictPath($v) . "notice" . DIRECTORY_SEPARATOR . $data['type'] . ".php";
|
||||||
if (is_file($template_path)) {
|
if (is_file($template_path)) {
|
||||||
$template_files[] = $template_path;
|
$template_files[$v] = $template_path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$template_files_data = $this->loadFiles($template_files);
|
if ($with_addon) {
|
||||||
|
$template_files_data = $this->loadFilesWithAddon($template_files);
|
||||||
|
} else {
|
||||||
|
$template_files_data = $this->loadFiles($template_files);
|
||||||
|
}
|
||||||
|
|
||||||
$template_data_array = [];
|
$template_data_array = [];
|
||||||
foreach ($template_files_data as $file_data) {
|
foreach ($template_files_data as $file_data) {
|
||||||
|
|||||||
140
niucloud/core/sms/Niuyun.php
Normal file
140
niucloud/core/sms/Niuyun.php
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
namespace core\sms;
|
||||||
|
|
||||||
|
|
||||||
|
use app\dict\notice\NoticeTypeDict;
|
||||||
|
use app\model\sys\NiuSmsTemplate;
|
||||||
|
use app\service\core\http\HttpHelper;
|
||||||
|
use core\exception\CommonException;
|
||||||
|
use think\facade\Log;
|
||||||
|
|
||||||
|
class Niuyun extends BaseSms
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $username = '';
|
||||||
|
protected $password = '';
|
||||||
|
protected $signature = '';
|
||||||
|
// private const SEND_URL = "https://api-ogw.zthysms.com/partner/v1/sms/sub-accounts/message/%s/template";
|
||||||
|
private const SEND_URL = "https://api-shss.zthysms.com/v2/sendSmsTp";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $config
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function initialize(array $config = [])
|
||||||
|
{
|
||||||
|
Log::write("SEND_NY_SMS init " . json_encode($config, 256));
|
||||||
|
parent::initialize($config);
|
||||||
|
$this->username = $config['username'] ?? '';
|
||||||
|
$this->password = $config['password'] ?? '';
|
||||||
|
$this->signature = $config['signature'] ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模版发送短信
|
||||||
|
* @param string $mobile
|
||||||
|
* @param string $template_id
|
||||||
|
* @param array $data
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function send(string $mobile, string $template_id, array $data = [])
|
||||||
|
{
|
||||||
|
Log::write("SEND_NY_SMS pre " . json_encode($data, 256));
|
||||||
|
if (empty($this->signature)) {
|
||||||
|
throw new CommonException('签名未配置');
|
||||||
|
}
|
||||||
|
$template_info = (new NiuSmsTemplate())->where('template_id', $template_id)->findOrEmpty();
|
||||||
|
Log::write("SEND_NY_SMS pre signature" . json_encode($template_info->toArray(), 256));
|
||||||
|
if ($template_info->isEmpty()) {
|
||||||
|
throw new CommonException('模版未报备');
|
||||||
|
}
|
||||||
|
if ($template_info->audit_status != NoticeTypeDict::API_AUDIT_RESULT_PASS) {
|
||||||
|
throw new CommonException('模版审核未通过');
|
||||||
|
}
|
||||||
|
$url = self::SEND_URL;
|
||||||
|
$template_info = $template_info->toArray();
|
||||||
|
$data = $this->formatParams($data, $template_info);
|
||||||
|
|
||||||
|
$params['records'] = [
|
||||||
|
[
|
||||||
|
'mobile' => $mobile,
|
||||||
|
'tpContent' => $data
|
||||||
|
]
|
||||||
|
];
|
||||||
|
$params['tpId'] = $template_id;
|
||||||
|
$params['username'] = $this->username;
|
||||||
|
$tKey = time();
|
||||||
|
$params['tKey'] = $tKey;
|
||||||
|
$params['password'] = md5(md5($this->password) . $tKey);
|
||||||
|
$params['signature'] = $this->signature;
|
||||||
|
Log::write("SEND_NY_SMS params " . json_encode($params, 256));
|
||||||
|
try {
|
||||||
|
$res = (new HttpHelper())->httpRequest('POST', $url, $params);
|
||||||
|
Log::write("SEND_NY_SMS res " . json_encode($res, 256));
|
||||||
|
if ($res['code'] != 200) {
|
||||||
|
throw new CommonException('ZT-' . $res['code'] . ":" . $res['msg']);
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
throw new CommonException($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function formatParams($data, $template_info)
|
||||||
|
{
|
||||||
|
$params_json = $template_info['param_json'];
|
||||||
|
$params_type_arr = NoticeTypeDict::getApiParamsType();
|
||||||
|
$type_arr = array_column($params_type_arr, null, 'type');
|
||||||
|
$return = [];
|
||||||
|
foreach ($params_json as $param => $validate) {
|
||||||
|
$value = $data[$param];
|
||||||
|
$pattern = $type_arr[$validate]['rule'] ?? '';
|
||||||
|
$max = $type_arr[$validate]['max'] ?? 1;
|
||||||
|
$min = $type_arr[$validate]['max'] ?? mb_strlen($value);
|
||||||
|
if (!empty($pattern) && in_array($validate, [NoticeTypeDict::PARAMS_TYPE_CHINESE, NoticeTypeDict::PARAMS_TYPE_OTHERS])) {
|
||||||
|
$value = str_replace(' ', '', $value);
|
||||||
|
$value = str_replace('.', '', $value);
|
||||||
|
$filtered = preg_replace($pattern, '', $value);
|
||||||
|
$value = (mb_strlen($filtered, 'UTF-8') >= $min && mb_strlen($filtered, 'UTF-8') <= 35)
|
||||||
|
? $filtered // 长度合法,保留过滤后的字符串
|
||||||
|
: mb_substr($filtered, 0, $max); // 长度非法,返回空字符串
|
||||||
|
}
|
||||||
|
if (empty($value)) {
|
||||||
|
Log::write("SEND_NY_SMS 参数异常,无法发送 param:" . $param);
|
||||||
|
throw new \Exception('NY:参数异常,无法发送');
|
||||||
|
}
|
||||||
|
$return[$param] = $value;
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function modify(string $sign, string $mobile, string $code)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function template(int $page = 0, int $limit = 10, int $type = 1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function apply(string $title, string $content, int $type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function localTemplate(int $type, int $page, int $limit)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function record($id)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -213,4 +213,9 @@ class DbBackup
|
|||||||
$this->setCache();
|
$this->setCache();
|
||||||
return $this->restoreIndex;
|
return $this->restoreIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getRestoreProgress() {
|
||||||
|
$backupFiles = glob($this->backupPath . '/backup_*.sql');
|
||||||
|
return round($this->restoreIndex / count($backupFiles) * 100);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user