mirror of
https://gitee.com/niucloud-team/niucloud-admin.git
synced 2025-12-12 19:02:49 +00:00
update niucloud
This commit is contained in:
parent
5139129e29
commit
5d94d8ebdc
@ -12,6 +12,7 @@
|
||||
namespace app\adminapi\controller\login;
|
||||
|
||||
use app\service\admin\auth\ConfigService;
|
||||
use app\service\core\upload\CoreImageService;
|
||||
use core\base\BaseAdminController;
|
||||
use think\Response;
|
||||
|
||||
|
||||
@ -72,5 +72,50 @@ class Recharge extends BaseAdminController
|
||||
return success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款列表
|
||||
* @return Response
|
||||
*/
|
||||
public function refundLists()
|
||||
{
|
||||
$data = $this->request->params([
|
||||
['create_time', []],
|
||||
['member_id', ''],
|
||||
['refund_no', ''],
|
||||
['status', ''],
|
||||
['keywords', ''],
|
||||
['order_no', ''],
|
||||
]);
|
||||
return success((new RechargeOrderRefundService())->getPage($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款详情
|
||||
* @param int $order_id
|
||||
* @return Response
|
||||
*/
|
||||
public function refundDetail(int $refund_id)
|
||||
{
|
||||
return success((new RechargeOrderRefundService())->getDetail($refund_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询退款状态
|
||||
* @param $type
|
||||
* @return Response
|
||||
*/
|
||||
public function refundStatus()
|
||||
{
|
||||
return success((new RechargeOrderRefundService())->getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款统计
|
||||
*/
|
||||
public function refundStat()
|
||||
{
|
||||
return success((new RechargeOrderRefundService())->stat());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,67 +0,0 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\adminapi\controller\order;
|
||||
|
||||
use app\service\admin\order\RefundService;
|
||||
use core\base\BaseAdminController;
|
||||
use think\Response;
|
||||
|
||||
class Refund extends BaseAdminController
|
||||
{
|
||||
/**
|
||||
* 退款列表
|
||||
* @return Response
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$data = $this->request->params([
|
||||
['create_time', []],
|
||||
['member_id', ''],
|
||||
['refund_no', ''],
|
||||
['status', ''],
|
||||
['keywords', ''],
|
||||
['order_no', ''],
|
||||
]);
|
||||
return success((new RefundService())->getPage($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款详情
|
||||
* @param int $order_id
|
||||
* @return Response
|
||||
*/
|
||||
public function detail(int $refund_id)
|
||||
{
|
||||
return success((new RefundService())->getDetail($refund_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询退款状态
|
||||
* @param $type
|
||||
* @return Response
|
||||
*/
|
||||
public function status($type = 'recharge')
|
||||
{
|
||||
$data = $this->request->params([
|
||||
['type', 'recharge']
|
||||
]);
|
||||
return success((new RefundService())->getStatus($data['type']));
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款统计
|
||||
*/
|
||||
public function stat()
|
||||
{
|
||||
return success((new RefundService())->stat());
|
||||
}
|
||||
}
|
||||
@ -1,64 +0,0 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\adminapi\controller\pay;
|
||||
|
||||
use app\service\admin\pay\PayConfigService;
|
||||
use core\base\BaseAdminController;
|
||||
use think\Response;
|
||||
|
||||
class Config extends BaseAdminController
|
||||
{
|
||||
|
||||
/**
|
||||
* 获取支付设置
|
||||
* @return Response
|
||||
*/
|
||||
public function get($type){
|
||||
return success((new PayConfigService())->getConfigByType($type));
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付设置
|
||||
* @return Response
|
||||
*/
|
||||
public function set($type){
|
||||
$data = $this->request->params([
|
||||
['status', 0],
|
||||
//支付宝配置
|
||||
['app_id', ''],
|
||||
['app_secret_cert', ''],
|
||||
['app_public_cert_path', ''],
|
||||
['alipay_public_cert_path', ''],
|
||||
['alipay_root_cert_path', ''],
|
||||
//微信配置
|
||||
['mch_id', ''],
|
||||
['mch_secret_key', ''],
|
||||
['mch_secret_cert', ''],
|
||||
['mch_public_cert_path', ''],
|
||||
|
||||
]);
|
||||
$this->validate(array_merge($data, ['type' => $type]), 'app\validate\pay\Pay.set');
|
||||
(new PayConfigService())->setConfigByType($type, $data);
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付方式列表
|
||||
* @return Response
|
||||
*/
|
||||
public function lists(){
|
||||
return success((new PayConfigService())->getPayConfigList());
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -104,4 +104,23 @@ class Config extends BaseAdminController
|
||||
public function getServiceInfo(){
|
||||
return success((new ConfigService())->getService());
|
||||
}
|
||||
|
||||
/**设置版权信息
|
||||
* @return Response
|
||||
*/
|
||||
public function setMap(){
|
||||
$data = $this->request->params([
|
||||
['key', ''],
|
||||
]);
|
||||
(new ConfigService())->setMap($data);
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地图设置
|
||||
* @return Response
|
||||
*/
|
||||
public function getMap(){
|
||||
return success((new ConfigService())->getMap());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,11 @@
|
||||
<?php
|
||||
// 全局中间件定义文件
|
||||
use app\adminapi\middleware\AllowCrossDomain;
|
||||
|
||||
use think\middleware\LoadLangPack;
|
||||
return [
|
||||
//跨域请求中间件
|
||||
AllowCrossDomain::class,
|
||||
//语言中间件
|
||||
LoadLangPack::class,
|
||||
|
||||
];
|
||||
|
||||
@ -30,6 +30,14 @@ Route::group('order', function () {
|
||||
Route::get('recharge/stat', 'order.Recharge/stat');
|
||||
// 订单发起退款
|
||||
Route::put('recharge/refund/:order_id', 'order.Recharge/refund');
|
||||
//退款订单列表
|
||||
Route::get('recharge/refund', 'order.Recharge/refundLists');
|
||||
//退款订单详情
|
||||
Route::get('recharge/refund/:refund_id', 'order.Recharge/refundDetail');
|
||||
//退款订单状态
|
||||
Route::get('recharge/refund/status', 'order.Recharge/refundStatus');
|
||||
//退款订单统计
|
||||
Route::get('recharge/refund/stat', 'order.Recharge/refundStat');
|
||||
})->middleware([
|
||||
AdminCheckToken::class,
|
||||
AdminCheckRole::class,
|
||||
|
||||
@ -19,13 +19,7 @@ use think\facade\Route;
|
||||
* 支付相关路由
|
||||
*/
|
||||
Route::group('pay', function () {
|
||||
/***************************************************** 系统整体信息 *************************************************/
|
||||
//设置支付配置
|
||||
Route::put('config/:type', 'pay.Config/set');
|
||||
//获取支付配置
|
||||
Route::get('config/:type', 'pay.Config/get');
|
||||
//获取支付方式列表
|
||||
Route::get('lists', 'pay.Config/lists');
|
||||
|
||||
/***************************************************** 支付渠道 *************************************************/
|
||||
//渠道列表
|
||||
Route::get('channel/lists', 'pay.PayChannel/lists');
|
||||
|
||||
@ -1,35 +0,0 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
use app\adminapi\middleware\AdminCheckRole;
|
||||
use app\adminapi\middleware\AdminCheckToken;
|
||||
use app\adminapi\middleware\AdminLog;
|
||||
use think\facade\Route;
|
||||
|
||||
|
||||
/**
|
||||
* 退款相关路由
|
||||
*/
|
||||
Route::group('refund', function () {
|
||||
/***************************************************** 退款 *************************************************/
|
||||
//退款列表
|
||||
Route::get('refund', 'order.Refund/lists');
|
||||
//退款详情
|
||||
Route::get('refund/:refund_id', 'order.Refund/detail');
|
||||
//退款状态
|
||||
Route::get('status', 'order.Refund/status');
|
||||
//退款状态
|
||||
Route::get('stat', 'order.Refund/stat');
|
||||
})->middleware([
|
||||
AdminCheckToken::class,
|
||||
AdminCheckRole::class,
|
||||
AdminLog::class
|
||||
]);
|
||||
@ -67,6 +67,11 @@ Route::group('sys', function () {
|
||||
//版权设置
|
||||
Route::put('config/copyright', 'sys.Config/setCopyright');
|
||||
|
||||
//地图设置
|
||||
Route::put('config/map', 'sys.Config/setMap');
|
||||
//地图设置
|
||||
Route::get('config/map', 'sys.Config/getMap');
|
||||
|
||||
//登录注册设置
|
||||
Route::get('config/login', 'login.Config/getConfig');
|
||||
//登录注册设置
|
||||
|
||||
@ -1,7 +1,10 @@
|
||||
<?php
|
||||
// 全局中间件定义文件
|
||||
use app\api\middleware\AllowCrossDomain;
|
||||
use think\middleware\LoadLangPack;
|
||||
return [
|
||||
//跨域请求中间件
|
||||
AllowCrossDomain::class,
|
||||
//语言中间件
|
||||
LoadLangPack::class,
|
||||
];
|
||||
|
||||
@ -42,9 +42,7 @@ function fail($msg = 'FAIL', ?array $data = [], int $code = 0, int $http_code =
|
||||
*/
|
||||
function get_lang($str)
|
||||
{
|
||||
$lang_config = config('lang') ?? [];
|
||||
$range = cookie($lang_config['cookie_var']) ?? 'zh-cn';
|
||||
return Lang::get($str, [], $range);
|
||||
return Lang::get($str);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -67,7 +67,7 @@
|
||||
'is_show' => 1,
|
||||
],
|
||||
[
|
||||
'menu_name' => '站点用户',
|
||||
'menu_name' => '站点管理员',
|
||||
'menu_key' => 'site_user',
|
||||
'menu_type' => 1,
|
||||
'icon' => 'element-User',
|
||||
@ -245,7 +245,7 @@
|
||||
],
|
||||
[
|
||||
|
||||
'menu_name' => '管理员',
|
||||
'menu_name' => '平台管理员',
|
||||
'menu_key' => 'auth_user',
|
||||
'menu_type' => 1,
|
||||
'icon' => 'iconfont-iconyonghu',
|
||||
@ -515,7 +515,7 @@
|
||||
],
|
||||
[
|
||||
'menu_name' => '环境检测',
|
||||
'menu_key' => 'iconfont-iconsixingjiance',
|
||||
'menu_key' => 'tools_check_environment',
|
||||
'menu_type' => 1,
|
||||
'icon' => 'element-SetUp',
|
||||
'api_url' => '',
|
||||
|
||||
@ -361,26 +361,39 @@ return
|
||||
],
|
||||
],
|
||||
[
|
||||
'menu_name' => '财务管理',
|
||||
'menu_key' => 'finance',
|
||||
'menu_name' => '订单管理',
|
||||
'menu_key' => 'order',
|
||||
'menu_type' => 0,
|
||||
'icon' => 'element-Box',
|
||||
'icon' => 'iconfont-icondingdan',
|
||||
'api_url' => '',
|
||||
'router_path' => 'finance',
|
||||
'router_path' => 'order',
|
||||
'view_path' => '',
|
||||
'methods' => '',
|
||||
'sort' => 60,
|
||||
'sort' => 65,
|
||||
'status' => 1,
|
||||
'is_show' => 1,
|
||||
'children' => [
|
||||
[
|
||||
'menu_name' => '会员充值',
|
||||
'menu_key' => 'recharge_list',
|
||||
'menu_type' => 1,
|
||||
'menu_name' => '充值订单',
|
||||
'menu_key' => 'recharge_order',
|
||||
'menu_type' => 0,
|
||||
'icon' => 'element-Help',
|
||||
'api_url' => 'order/recharge',
|
||||
'api_url' => 'recharge',
|
||||
'router_path' => 'recharge',
|
||||
'view_path' => 'finance/recharge/list',
|
||||
'view_path' => '',
|
||||
'methods' => 'get',
|
||||
'sort' => 100,
|
||||
'status' => 1,
|
||||
'is_show' => 1,
|
||||
'children' => [
|
||||
[
|
||||
'menu_name' => '订单列表',
|
||||
'menu_key' => 'recharge_order_list',
|
||||
'menu_type' => 1,
|
||||
'icon' => '',
|
||||
'api_url' => 'recharge',
|
||||
'router_path' => 'order',
|
||||
'view_path' => 'order/recharge/list',
|
||||
'methods' => 'get',
|
||||
'sort' => 100,
|
||||
'status' => 1,
|
||||
@ -388,7 +401,7 @@ return
|
||||
'children' => [
|
||||
[
|
||||
'menu_name' => '退款',
|
||||
'menu_key' => 'refund',
|
||||
'menu_key' => 'recharge_refund',
|
||||
'menu_type' => 2,
|
||||
'icon' => '',
|
||||
'api_url' => 'order/refund/<id>',
|
||||
@ -402,18 +415,63 @@ return
|
||||
]
|
||||
],
|
||||
[
|
||||
'menu_name' => '充值详情',
|
||||
'menu_key' => 'recharge_order_info',
|
||||
'menu_name' => '订单详情',
|
||||
'menu_key' => 'recharge_order_detail',
|
||||
'menu_type' => 1,
|
||||
'icon' => '',
|
||||
'api_url' => 'order/recharge/<order_id>',
|
||||
'router_path' => 'recharge/detail',
|
||||
'view_path' => 'finance/recharge/detail',
|
||||
'router_path' => 'detail',
|
||||
'view_path' => 'order/recharge/detail',
|
||||
'methods' => 'get',
|
||||
'sort' => 90,
|
||||
'status' => 1,
|
||||
'is_show' => 0,
|
||||
],
|
||||
[
|
||||
'menu_name' => '退款记录',
|
||||
'menu_key' => 'recharge_refund_list',
|
||||
'menu_type' => 1,
|
||||
'icon' => 'iconfont-icontuikuanjilu',
|
||||
'api_url' => 'order/refund',
|
||||
'router_path' => 'refund',
|
||||
'view_path' => 'order/recharge/refund',
|
||||
'methods' => 'get',
|
||||
'sort' => 90,
|
||||
'status' => 1,
|
||||
'is_show' => 1,
|
||||
'children' => [
|
||||
[
|
||||
'menu_name' => '退款详情',
|
||||
'menu_key' => 'recharge_refund_detail',
|
||||
'menu_type' => 2,
|
||||
'icon' => '',
|
||||
'api_url' => 'order/refund/<id>',
|
||||
'router_path' => '',
|
||||
'view_path' => '',
|
||||
'methods' => 'get',
|
||||
'sort' => 100,
|
||||
'status' => 1,
|
||||
'is_show' => 0,
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
[
|
||||
'menu_name' => '财务管理',
|
||||
'menu_key' => 'finance',
|
||||
'menu_type' => 0,
|
||||
'icon' => 'element-Box',
|
||||
'api_url' => '',
|
||||
'router_path' => 'finance',
|
||||
'view_path' => '',
|
||||
'methods' => '',
|
||||
'sort' => 60,
|
||||
'status' => 1,
|
||||
'is_show' => 1,
|
||||
'children' => [
|
||||
[
|
||||
'menu_name' => '会员提现',
|
||||
'menu_key' => 'cash_out_list',
|
||||
@ -426,35 +484,6 @@ return
|
||||
'sort' => 99,
|
||||
'status' => 1,
|
||||
'is_show' => 1,
|
||||
],
|
||||
[
|
||||
'menu_name' => '退款记录',
|
||||
'menu_key' => 'refund_list',
|
||||
'menu_type' => 1,
|
||||
'icon' => 'iconfont-icontuikuanjilu',
|
||||
'api_url' => 'order/refund',
|
||||
'router_path' => 'refund',
|
||||
'view_path' => 'order/refund',
|
||||
'methods' => 'get',
|
||||
'sort' => 90,
|
||||
'status' => 1,
|
||||
'is_show' => 1,
|
||||
'children' => [
|
||||
[
|
||||
'menu_name' => '退款详情',
|
||||
'menu_key' => 'refund_detail',
|
||||
'menu_type' => 2,
|
||||
'icon' => '',
|
||||
'api_url' => 'order/refund/<id>',
|
||||
'router_path' => '',
|
||||
'view_path' => '',
|
||||
'methods' => 'get',
|
||||
'sort' => 100,
|
||||
'status' => 1,
|
||||
'is_show' => 0,
|
||||
],
|
||||
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
@ -1140,6 +1169,19 @@ return
|
||||
]
|
||||
]
|
||||
],
|
||||
[
|
||||
'menu_name' => '地图设置',
|
||||
'menu_key' => 'map_setting',
|
||||
'menu_type' => 1,
|
||||
'icon' => 'element-Message',
|
||||
'api_url' => 'sys/config/map',
|
||||
'router_path' => 'map',
|
||||
'view_path' => 'setting/map',
|
||||
'methods' => 'get',
|
||||
'sort' => 99,
|
||||
'status' => 1,
|
||||
'is_show' => 1,
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
@ -1,57 +0,0 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\dict\order;
|
||||
|
||||
/**
|
||||
* 订单类型整体功能
|
||||
* Class OrderRefundDict
|
||||
* @package app\dict\order
|
||||
*/
|
||||
class OrderRefundDict
|
||||
{
|
||||
const WAIT = '1';//待审核
|
||||
const WAIT_TRANSFER = '2';//待退款
|
||||
const SUCCESS = '3';//退款成功
|
||||
const FAIL = '-1';//退款失败
|
||||
|
||||
/**
|
||||
* 退款状态
|
||||
* @param $status
|
||||
* @return mixed
|
||||
*/
|
||||
public static function getStatus($status = []){
|
||||
$list = [
|
||||
self::WAIT => [
|
||||
'name' => get_lang('dict_refund.wait'),
|
||||
'key' => self::WAIT,
|
||||
],
|
||||
self::WAIT_TRANSFER => [
|
||||
'name' => get_lang('dict_refund.wait_transfer'),
|
||||
'key' => self::WAIT,
|
||||
],
|
||||
self::SUCCESS => [
|
||||
'name' => get_lang('dict_refund.success'),
|
||||
'key' => self::WAIT,
|
||||
],
|
||||
self::FAIL => [
|
||||
'name' => get_lang('dict_refund.fail'),
|
||||
'key' => self::FAIL,
|
||||
]
|
||||
];
|
||||
foreach($list as $k => $v){
|
||||
if(!empty($status) && !in_array($k, $status)) unset($list[$k]);
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -31,18 +31,16 @@ $system_event = [
|
||||
'Scan' => [ 'app\listener\scan\ScanListener' ],
|
||||
'AddSiteAfter' => [ 'app\listener\site\AddSiteAfterListener' ],
|
||||
|
||||
/**
|
||||
* 消息相关事件
|
||||
*/
|
||||
|
||||
/**
|
||||
* 支付相关事件
|
||||
*/
|
||||
//支付成功
|
||||
'PaySuccess' => [ 'app\listener\pay\PaySuccessListener' ],
|
||||
//退款成功
|
||||
'RefundSuccess' => [ 'app\listener\pay\RefundSuccessListener' ],
|
||||
//转账成功
|
||||
'TransferSuccess' => [ 'app\listener\pay\TransferSuccessListener' ],
|
||||
/**
|
||||
* 订单相关事件
|
||||
*/
|
||||
|
||||
|
||||
// 任务失败统一回调,有四种定义方式
|
||||
'queue_failed'=> [
|
||||
|
||||
@ -1359,7 +1359,7 @@ CREATE TABLE article (
|
||||
author varchar(255) NOT NULL DEFAULT '' COMMENT '作者',
|
||||
content text DEFAULT NULL COMMENT '文章内容',
|
||||
visit int(11) NOT NULL DEFAULT 0 COMMENT '实际浏览量',
|
||||
visit_virtual int(11) NOT NULL DEFAULT 0 COMMENT '虚拟浏览量',
|
||||
visit_virtual int(11) NOT NULL DEFAULT 0 COMMENT '初始浏览量',
|
||||
is_show tinyint(4) NOT NULL DEFAULT 1 COMMENT '是否显示:1-是.0-否',
|
||||
sort int(11) NOT NULL DEFAULT 0 COMMENT '排序',
|
||||
create_time int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
|
||||
@ -144,4 +144,130 @@ return [
|
||||
'status_success' => 'success',
|
||||
'status_fail' => 'fail',
|
||||
],
|
||||
'dict_menu_admin' => [
|
||||
'overview' => 'overview',
|
||||
'site' => 'site',
|
||||
'site_list' => 'site list',
|
||||
'site_info' => 'site info',
|
||||
'site_group' => 'site package',
|
||||
'site_user' => 'site user',
|
||||
'auth' => 'auth',
|
||||
'menu_list' => 'menu manage',
|
||||
'auth_menu' => 'admin menu',
|
||||
'auth_menu_add' => 'add',
|
||||
'auth_menu_update' => 'edit',
|
||||
'auth_menu_del' => 'delete',
|
||||
'auth_menu_info' => 'info',
|
||||
'auth_site_menu' => 'site menu',
|
||||
'auth_site_menu_add' => 'add',
|
||||
'auth_site_menu_update' => 'edit',
|
||||
'auth_site_menu_del' => 'delete',
|
||||
'auth_site_menu_info' => 'info',
|
||||
'auth_user' => 'manager',
|
||||
'auth_user_add' => 'add',
|
||||
'auth_user_update' => 'edit',
|
||||
'auth_user_del' => 'delete',
|
||||
'auth_user_info' => 'info',
|
||||
'auth_role' => 'role manage',
|
||||
'auth_role_add' => 'add',
|
||||
'auth_role_update' => 'edit',
|
||||
'auth_role_del' => 'delete',
|
||||
'auth_log' => 'log',
|
||||
'setting' => 'system config',
|
||||
'setting_system' => 'web config',
|
||||
'setting_copyright' => 'copyright config',
|
||||
'setting_login' => 'login config',
|
||||
'setting_storage' => 'storage config',
|
||||
'setting_oplatform' => 'wechat platform',
|
||||
'tool' => 'develop tools',
|
||||
'code' => 'generator',
|
||||
'code_edit' => 'table edit',
|
||||
'tools_Update_cache' => 'update cache',
|
||||
'tools_check_environment' => 'check environment',
|
||||
'app_store' => 'app market'
|
||||
|
||||
],
|
||||
'dict_menu_site' => [
|
||||
'overview' => 'overview',
|
||||
'diy' => 'diy manage',
|
||||
'diy_page_index' => 'diy index',
|
||||
'diy_page_member' => 'diy member',
|
||||
'diy_page_update' => 'save',
|
||||
'diy_page_list' => 'page manage',
|
||||
'diy_bottom' => 'bottom config',
|
||||
'diy_tabbar_update' => 'save',
|
||||
'attachment' => 'attachment',
|
||||
'decorate' => 'decorate',
|
||||
'page_decorate' => 'page decorate',
|
||||
'article' => 'article',
|
||||
'article_list' => 'article list',
|
||||
'article_edit' => 'article edit',
|
||||
'article_category' => 'article category',
|
||||
'member' => 'member',
|
||||
'member_list' => 'member list',
|
||||
'member_update' => 'edit',
|
||||
'member_info' => 'member detail',
|
||||
'member_label' => 'member label',
|
||||
'member_label_update' => 'edit label',
|
||||
'member_label_add' => 'add label',
|
||||
'member_label_delete' => 'delete label',
|
||||
'member_point' => 'member point',
|
||||
'member_balance' => 'member balance',
|
||||
'member_commission' => 'member commission',
|
||||
'order' => 'order',
|
||||
'recharge_order' => 'recharge order',
|
||||
'recharge_order_list' => 'order list',
|
||||
'recharge_refund' => 'refund',
|
||||
'recharge_order_detail' => 'order detail',
|
||||
'recharge_refund_list' => 'refund list',
|
||||
'recharge_refund_detail' => 'refund detail',
|
||||
'finance' => 'finance manage',
|
||||
'cash_out_list' => 'member cashout',
|
||||
'addon' => 'app manage',
|
||||
'addon_list' => 'addon list',
|
||||
'channel' => 'channel manage',
|
||||
'channel_pc' => 'pc manage',
|
||||
'pc_config' => 'pc config',
|
||||
'channel_h5' => 'h5 manage',
|
||||
'h5_config' => 'h5 config',
|
||||
'channel_wechat' => 'wechat manage',
|
||||
'wechat_config' => 'wechat config',
|
||||
'wechat_menu' => 'wechat menu',
|
||||
'wechat_template_message' => 'template manage',
|
||||
'channel_weapp' => 'weapp manage',
|
||||
'weapp_config' => 'weapp config',
|
||||
'weapp_template_message' => 'weapp message',
|
||||
'channel_aliapp' => 'aliapp manage',
|
||||
'aliapp_config' => 'aliapp config',
|
||||
'auth' => 'auth manage',
|
||||
'auth_user' => 'manager',
|
||||
'auth_user_add' => 'add',
|
||||
'auth_user_update' => 'edit',
|
||||
'auth_user_del' => 'delete',
|
||||
'auth_user_info' => 'detail',
|
||||
'auth_role' => 'role manage',
|
||||
'auth_role_add' => 'add',
|
||||
'auth_role_update' => 'edit',
|
||||
'auth_role_del' => 'delete',
|
||||
'auth_log' => 'log',
|
||||
'setting' => 'system config',
|
||||
'setting_system' => 'web config',
|
||||
'system_agreement' => 'agreement manage',
|
||||
'system_agreement_edit' => 'edit agreement',
|
||||
'setting_login_register' => 'login config',
|
||||
'setting_member' => 'member config',
|
||||
'setting_pay' => 'pay manage',
|
||||
'setting_pay_channel' => 'pay config',
|
||||
'setting_pay_channel_set' => 'config',
|
||||
'setting_pay_transfer' => 'transfer config',
|
||||
'setting_pay_transfer_set' => 'config',
|
||||
'cash_out_config' => 'cashout config',
|
||||
'setting_notice' => 'notice manage',
|
||||
'setting_notice_template' => 'notice template',
|
||||
'setting_notice_records' => 'send log',
|
||||
'sms_notice' => 'sms manage',
|
||||
'sms_setting' => 'sms config',
|
||||
'sms_notice_records' => 'send log',
|
||||
'map_setting' => 'map config',
|
||||
],
|
||||
];
|
||||
|
||||
@ -2,9 +2,6 @@
|
||||
|
||||
namespace app\listener\notice_template;
|
||||
|
||||
use app\service\core\order\CoreOrderRefundService;
|
||||
use app\service\core\order\CoreOrderService;
|
||||
use core\exception\NoticeException;
|
||||
|
||||
/**
|
||||
* 会员验证码
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
namespace app\listener\notice_template;
|
||||
|
||||
use app\service\core\member\CoreMemberService;
|
||||
use app\service\core\order\CoreOrderService;
|
||||
use app\service\core\order\recharge\CoreRechargeOrderService;
|
||||
|
||||
class RechargeSuccess extends BaseNoticeTemplate
|
||||
{
|
||||
@ -17,8 +17,8 @@ class RechargeSuccess extends BaseNoticeTemplate
|
||||
$site_id = $params['site_id'];
|
||||
$order_id = $data['order_id'];
|
||||
|
||||
$core_order_service = new CoreOrderService();
|
||||
$order = $core_order_service->getOrderInfo($site_id, $order_id);
|
||||
$core_order_service = new CoreRechargeOrderService();
|
||||
$order = $core_order_service->orderInfo($site_id, $order_id);
|
||||
if (!empty($order)){
|
||||
$member = (new CoreMemberService())->getInfoByMemberId($site_id, $order['member_id']);
|
||||
//通过订单id查询订单信息
|
||||
|
||||
@ -11,8 +11,6 @@
|
||||
|
||||
namespace app\listener\pay;
|
||||
|
||||
|
||||
use app\dict\order\RechargeOrderDict;
|
||||
use app\service\core\order\recharge\CoreRechargeOrderService;
|
||||
|
||||
/**
|
||||
@ -23,10 +21,9 @@ class PaySuccessListener
|
||||
public function handle(array $pay_info)
|
||||
{
|
||||
$trade_type = $pay_info['trade_type'] ?? '';
|
||||
switch($trade_type){
|
||||
case RechargeOrderDict::getOrderType()['type']:
|
||||
return (new CoreRechargeOrderService())->pay($pay_info);
|
||||
break;
|
||||
if($trade_type == 'recharge')
|
||||
{
|
||||
(new CoreRechargeOrderService())->pay($pay_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -9,24 +9,22 @@
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\dict\order;
|
||||
namespace app\listener\pay;
|
||||
|
||||
use app\service\core\order\recharge\CoreRechargeOrderService;
|
||||
use app\service\core\order\recharge\CoreRechargeRefundService;
|
||||
|
||||
/**
|
||||
* 订单类型整体功能
|
||||
* Class OrderTypeDict
|
||||
* @package app\dict\member
|
||||
* 退款成功事件
|
||||
*/
|
||||
class OrderTypeDict
|
||||
class RefundSuccessListener
|
||||
{
|
||||
|
||||
/**
|
||||
* 查询订单适配的支付方式
|
||||
* @param $type
|
||||
* @return void
|
||||
*/
|
||||
public static function getAllowPayType($type){
|
||||
/** @var RechargeOrderDict $class */
|
||||
$class = __NAMESPACE__ . '\\' . ucfirst(strtolower($type)).'OrderDict';
|
||||
return $class::ALLOW_PAY;
|
||||
public function handle(array $refund_info)
|
||||
{
|
||||
$trade_type = $refund_info['trade_type'] ?? '';
|
||||
if($trade_type == 'recharge')
|
||||
{
|
||||
(new CoreRechargeRefundService())->refundComplete($refund_info['refund_no']);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,5 @@
|
||||
<?php
|
||||
// 全局中间件定义文件
|
||||
use app\middleware\AllowCrossDomain;
|
||||
use think\middleware\LoadLangPack;
|
||||
|
||||
return [
|
||||
|
||||
@ -99,7 +99,7 @@ class Article extends BaseModel
|
||||
}
|
||||
|
||||
public function getArticleUrlAttr($value, $data) {
|
||||
$site_tag = '/s' . $data['site_id'];
|
||||
$site_tag = $data['site_id'] == 1 ? '' : '/s' . $data['site_id'];
|
||||
$data = [
|
||||
'wap_url' => ( !empty(env("system.wap_domain")) ? env("system.wap_domain") : request()->domain() ) . "/wap" . $site_tag . "/pages/article/detail?id={$data['id']}",
|
||||
'web_url' => ( !empty(env("system.web_domain")) ? env("system.web_domain") : request()->domain() ) . "/web" . $site_tag . "/article/detail?id={$data['id']}"
|
||||
|
||||
@ -17,11 +17,11 @@ use app\model\pay\Pay;
|
||||
use core\base\BaseModel;
|
||||
|
||||
/**
|
||||
* 订单模型
|
||||
* Class Order
|
||||
* 充值订单模型
|
||||
* Class RechargeOrder
|
||||
* @package app\model\order
|
||||
*/
|
||||
class Order extends BaseModel
|
||||
class RechargeOrder extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
@ -34,7 +34,7 @@ class Order extends BaseModel
|
||||
* 模型名称
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'order';
|
||||
protected $name = 'recharge_order';
|
||||
|
||||
//类型
|
||||
protected $type = [
|
||||
@ -42,37 +42,6 @@ class Order extends BaseModel
|
||||
'close_time' => 'timestamp',
|
||||
];
|
||||
|
||||
/**
|
||||
* 订单状态名称
|
||||
* @param $value
|
||||
* @param $data
|
||||
* @return mixed|string
|
||||
*/
|
||||
public function getOrderStatusInfoAttr($value, $data)
|
||||
{
|
||||
if(isset($data['order_type']) && isset($data['order_status']))
|
||||
{
|
||||
$class = "app\\dict\\order\\". ucfirst($data['order_type']).'OrderDict';
|
||||
return $class::getStatus($data['order_status']);
|
||||
}else
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款状态
|
||||
* @param $value
|
||||
* @param $data
|
||||
* @return void
|
||||
*/
|
||||
public function getRefundStatusNameAttr($value, $data) {
|
||||
if(isset($data['order_type']) && isset($data['refund_status']))
|
||||
{
|
||||
$class = "app\\dict\\order\\". ucfirst($data['order_type']).'OrderDict';
|
||||
return $class::getRefundStatus($data['refund_status'])['name'] ?? '';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录渠道字段转化
|
||||
@ -228,7 +197,7 @@ class Order extends BaseModel
|
||||
*/
|
||||
public function item()
|
||||
{
|
||||
return $this->hasMany(OrderItem::class,'order_id', 'order_id');
|
||||
return $this->hasMany(RechargeOrderItem::class,'order_id', 'order_id');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -18,7 +18,7 @@ use core\base\BaseModel;
|
||||
* Class OrderItem
|
||||
* @package app\model\order
|
||||
*/
|
||||
class OrderItem extends BaseModel
|
||||
class RechargeOrderItem extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
@ -31,14 +31,14 @@ class OrderItem extends BaseModel
|
||||
* 模型名称
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'order_item';
|
||||
protected $name = 'recharge_order_item';
|
||||
|
||||
/**
|
||||
* @return HasOne
|
||||
*/
|
||||
public function orderNo()
|
||||
{
|
||||
return $this->hasOne(Order::class, 'order_id', 'order_id')->joinType('left')->withField('order_id, order_no')->bind(['order_no' => 'order_no']);
|
||||
return $this->hasOne(RechargeOrder::class, 'order_id', 'order_id')->joinType('left')->withField('order_id, order_no')->bind(['order_no' => 'order_no']);
|
||||
}
|
||||
/**
|
||||
* 数量字段处理
|
||||
@ -58,6 +58,6 @@ class OrderItem extends BaseModel
|
||||
* @return void
|
||||
*/
|
||||
public function ordermain(){
|
||||
return $this->hasOne(Order::class, 'order_id')->joinType('inner');
|
||||
return $this->hasOne(RechargeOrder::class, 'order_id')->joinType('inner');
|
||||
}
|
||||
}
|
||||
@ -11,6 +11,7 @@
|
||||
|
||||
namespace app\model\order;
|
||||
|
||||
use app\dict\order\RechargeOrderDict;
|
||||
use app\model\member\Member;
|
||||
use app\model\pay\Refund;
|
||||
use core\base\BaseModel;
|
||||
@ -20,7 +21,7 @@ use core\base\BaseModel;
|
||||
* Class OrderItem
|
||||
* @package app\model\order
|
||||
*/
|
||||
class OrderItemRefund extends BaseModel
|
||||
class RechargeOrderItemRefund extends BaseModel
|
||||
{
|
||||
//类型
|
||||
protected $type = [
|
||||
@ -39,7 +40,7 @@ class OrderItemRefund extends BaseModel
|
||||
* 模型名称
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'order_item_refund';
|
||||
protected $name = 'recharge_order_item_refund';
|
||||
|
||||
/**
|
||||
* 退款状态字段处理
|
||||
@ -48,9 +49,7 @@ class OrderItemRefund extends BaseModel
|
||||
*/
|
||||
public function getStatusNameAttr($value, $data)
|
||||
{
|
||||
$class = "\\app\\dict\\order\\" . ucfirst($data['item_type']). "OrderDict";
|
||||
if (!class_exists($class)) return '';
|
||||
return $class::getRefundStatus()[$data['status'] ?? '']['name'] ?? '';
|
||||
return RechargeOrderDict::getRefundStatus()[$data['status'] ?? '']['name'] ?? '';
|
||||
}
|
||||
|
||||
/**
|
||||
@ -58,7 +57,7 @@ class OrderItemRefund extends BaseModel
|
||||
* @return \think\model\relation\HasOne
|
||||
*/
|
||||
public function item() {
|
||||
return $this->hasOne(OrderItem::class, 'order_item_id', 'order_item_id')->joinType('inner');
|
||||
return $this->hasOne(RechargeOrderItem::class, 'order_item_id', 'order_item_id')->joinType('inner');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -114,7 +113,7 @@ class OrderItemRefund extends BaseModel
|
||||
public function searchJoinOrderNoAttr($query, $value, $data)
|
||||
{
|
||||
if ($value) {
|
||||
$query->where('order_item_refund.order_no', '=', $value);
|
||||
$query->where('recharge_order_item_refund.order_no', '=', $value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -140,7 +139,7 @@ class OrderItemRefund extends BaseModel
|
||||
public function searchJoinMemberIdAttr($query, $value, $data)
|
||||
{
|
||||
if ($value) {
|
||||
$query->where('order_item_refund.member_id', '=', $value);
|
||||
$query->where('recharge_order_item_refund.member_id', '=', $value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -166,7 +165,7 @@ class OrderItemRefund extends BaseModel
|
||||
public function searchJoinStatusAttr($query, $value, $data)
|
||||
{
|
||||
if ($value != '') {
|
||||
$query->where('order_item_refund.status', '=', $value);
|
||||
$query->where('recharge_order_item_refund.status', '=', $value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -196,11 +195,11 @@ class OrderItemRefund extends BaseModel
|
||||
$start_time = empty($value[0]) ? 0 : strtotime($value[0]) ;
|
||||
$end_time = empty($value[1]) ? 0 : strtotime($value[1]) ;
|
||||
if($start_time > 0 && $end_time > 0){
|
||||
$query->whereBetweenTime('order_item_refund.create_time', $start_time, $end_time);
|
||||
$query->whereBetweenTime('recharge_order_item_refund.create_time', $start_time, $end_time);
|
||||
}else if($start_time > 0 && $end_time == 0){
|
||||
$query->where([['order_item_refund.create_time', '>=', $start_time]]);
|
||||
$query->where([['recharge_order_item_refund.create_time', '>=', $start_time]]);
|
||||
}else if($start_time == 0 && $end_time > 0){
|
||||
$query->where([['order_item_refund.create_time', '<=', $end_time]]);
|
||||
$query->where([['recharge_order_item_refund.create_time', '<=', $end_time]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -18,7 +18,7 @@ use core\base\BaseModel;
|
||||
* Class OrderLog
|
||||
* @package app\model\order
|
||||
*/
|
||||
class OrderLog extends BaseModel
|
||||
class RechargeOrderLog extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
@ -31,7 +31,7 @@ class OrderLog extends BaseModel
|
||||
* 模型名称
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'order_log';
|
||||
protected $name = 'recharge_order_log';
|
||||
|
||||
|
||||
}
|
||||
@ -11,7 +11,6 @@
|
||||
|
||||
namespace app\model\pay;
|
||||
|
||||
use app\dict\order\OrderTypeDict;
|
||||
use app\dict\pay\PayDict;
|
||||
use core\base\BaseModel;
|
||||
|
||||
@ -56,16 +55,6 @@ class Pay extends BaseModel
|
||||
{
|
||||
return PayDict::getStatus()[$data['status'] ?? ''] ?? '';
|
||||
}
|
||||
|
||||
/**
|
||||
* 支持的支付方式
|
||||
* @param $value
|
||||
* @param $data
|
||||
* @return void
|
||||
*/
|
||||
public function getPayTypeListAttr($value, $data){
|
||||
return OrderTypeDict::getAllowPayType($data['trade_type']);
|
||||
}
|
||||
/**
|
||||
* 支付方式字段转化
|
||||
* @param $value
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
namespace app\service\admin\file;
|
||||
|
||||
use app\dict\sys\FileDict;
|
||||
use app\dict\sys\StorageDict;
|
||||
use app\service\core\upload\CoreUploadService;
|
||||
use core\base\BaseAdminService;
|
||||
use core\exception\UploadFileException;
|
||||
@ -62,6 +63,6 @@ class UploadService extends BaseAdminService
|
||||
throw new UploadFileException('CERT_TYPE_ERROR');
|
||||
$dir = $this->root_path.'/document/'.$type.'/'.$this->site_id.'/'.date('Ym').'/'.date('d');
|
||||
$core_upload_service = new CoreUploadService();
|
||||
return $core_upload_service->document($file, $this->site_id, $type, $dir, true, true);
|
||||
return $core_upload_service->document($file, $this->site_id, $type, $dir, StorageDict::LOCAL, true);
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,13 @@
|
||||
<template>
|
||||
<div class="main-container">
|
||||
<div class="detail-head">
|
||||
<div class="left" @click="back()">
|
||||
<span class="iconfont iconxiangzuojiantou !text-xs"></span>
|
||||
<span class="ml-[1px]">{{t('returnToPreviousPage')}}</span>
|
||||
</div>
|
||||
<span class="adorn">|</span>
|
||||
<span class="right">{{ pageName }}</span>
|
||||
</div>
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form">
|
||||
{FORM_VIEW}
|
||||
@ -21,9 +29,10 @@ import type { FormInstance } from 'element-plus'
|
||||
import { get{UCASE_NAME}Info,add{UCASE_NAME},edit{UCASE_NAME} } from '@/api/{MODULE_NAME}';
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const router = useRoute()
|
||||
const id:number = parseInt(router.query.id);
|
||||
const route = useRoute()
|
||||
const id:number = parseInt(route.query.id);
|
||||
const loading = ref(false)
|
||||
const pageName = route.meta.title
|
||||
|
||||
/**
|
||||
* 表单数据
|
||||
|
||||
@ -11,6 +11,8 @@
|
||||
|
||||
namespace app\service\admin\order;
|
||||
|
||||
use app\dict\order\RechargeOrderDict;
|
||||
use app\model\order\RechargeOrderItemRefund;
|
||||
use app\service\core\order\recharge\CoreRechargeRefundService;
|
||||
use core\base\BaseAdminService;
|
||||
|
||||
@ -24,6 +26,7 @@ class RechargeOrderRefundService extends BaseAdminService
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->model = new RechargeOrderItemRefund();
|
||||
}
|
||||
|
||||
public function create($order_id) {
|
||||
@ -34,4 +37,88 @@ class RechargeOrderRefundService extends BaseAdminService
|
||||
return $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询退款列表
|
||||
* @param array $where
|
||||
* @return mixed
|
||||
*/
|
||||
public function getPage(array $where) {
|
||||
|
||||
$field = 'recharge_order_item_refund.refund_id,recharge_order_item_refund.num,recharge_order_item_refund.money,recharge_order_item_refund.refund_no,recharge_order_item_refund.status,recharge_order_item_refund.create_time,recharge_order_item_refund.audit_time,recharge_order_item_refund.transfer_time,recharge_order_item_refund.item_type,recharge_order_item_refund.order_item_id, recharge_order_item_refund.order_id,recharge_order_item_refund.member_id,recharge_order_item_refund.order_no';
|
||||
$member_where = [];
|
||||
if(!empty($where['keywords']))
|
||||
{
|
||||
$member_where[] = ["member.member_id|member.nickname|member.mobile", '=', $where['keywords']];
|
||||
}
|
||||
$search_model = $this->model->where([['recharge_order_item_refund.site_id', '=', $this->site_id]])->with(['item' => function($query) {
|
||||
$query->with('orderNo')->field('order_id, order_item_id, item_name, item_image');
|
||||
}])->withSearch(['join_order_no' => 'order_no', 'join_status' => 'status', 'join_member_id' => 'member_id', 'refund_no' => 'refund_no', 'join_create_time' => 'create_time'],$where)->withJoin(['member' => function($query){
|
||||
$query->field("member.nickname, member.headimg, member.mobile, member.member_id");
|
||||
}
|
||||
])->where($member_where)->field($field)->order('create_time desc')->append(['status_name', 'payrefund.type_name']);
|
||||
|
||||
return $this->pageQuery($search_model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询退款详情
|
||||
* @param int $refund_id
|
||||
* @return void
|
||||
*/
|
||||
public function getDetail(int $refund_id) {
|
||||
$field = 'refund_id,num,money,refund_no,status,create_time,audit_time,transfer_time,item_type,order_item_id, order_id,member_id';
|
||||
$detail = $this->model->where([ ['site_id', '=', $this->site_id], ['refund_id', '=', $refund_id]])->field($field)->with(['item' => function($query) {
|
||||
$query->field('order_item_id, item_name, item_image');
|
||||
}, 'member' => function($query) {
|
||||
$query->field('member_id, nickname, mobile, headimg');
|
||||
}, 'payrefund' => function($query) {
|
||||
$query->field('refund_no');
|
||||
}])->append(['status_name', 'payrefund.type_name'])->findOrEmpty()->toArray();
|
||||
return $detail;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款状态
|
||||
* @return void
|
||||
*/
|
||||
public function getStatus(){
|
||||
$status = RechargeOrderDict::getRefundStatus();
|
||||
return $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款统计数据(根据状态查询)
|
||||
*/
|
||||
public function stat()
|
||||
{
|
||||
$status = RechargeOrderDict::getRefundStatus();
|
||||
$all = 0;
|
||||
$have = 0;
|
||||
foreach ($status as $k => $v)
|
||||
{
|
||||
$money = $this->model->where([['status', '=', $v['status']], ['site_id', '=', $this->site_id]])->sum("money");
|
||||
if($money == null)
|
||||
{
|
||||
$money = 0;
|
||||
}
|
||||
if($k == 1 || $k == 2){
|
||||
$have = $have + $money;
|
||||
}
|
||||
$status[$k]['money'] = number_format($money, 2);
|
||||
$all = $all + $money;
|
||||
}
|
||||
$status['all'] = [
|
||||
'name' => get_lang('dict_refund.all'),
|
||||
'key' => 'all',
|
||||
'money' => number_format($all, 2)
|
||||
];
|
||||
$status['have'] = [
|
||||
'name' => get_lang('dict_refund.have'),
|
||||
'key' => 'all',
|
||||
'money' => number_format($have, 2)
|
||||
];
|
||||
return $status;
|
||||
|
||||
}
|
||||
}
|
||||
@ -12,7 +12,7 @@
|
||||
namespace app\service\admin\order;
|
||||
|
||||
use app\dict\order\RechargeOrderDict;
|
||||
use app\model\order\Order;
|
||||
use app\model\order\RechargeOrder;
|
||||
use core\base\BaseAdminService;
|
||||
|
||||
/**
|
||||
@ -25,7 +25,7 @@ class RechargeOrderService extends BaseAdminService
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->model = new Order();
|
||||
$this->model = new RechargeOrder();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -44,8 +44,16 @@ class RechargeOrderService extends BaseAdminService
|
||||
$query->field('member_id, nickname, mobile, headimg');
|
||||
}, 'pay' => function($query) {
|
||||
$query->field('');
|
||||
} ])->order($order)->append(['order_status_info', 'order_from_name', 'refund_status_name' ]);
|
||||
return $this->pageQuery($search_model);
|
||||
} ])->order($order)->append(['order_from_name' ]);
|
||||
$list = $this->pageQuery($search_model);
|
||||
$order_status = RechargeOrderDict::getStatus();
|
||||
$refund_status = RechargeOrderDict::getRefundStatus();
|
||||
foreach ($list['data'] as $k => $v)
|
||||
{
|
||||
$list['data'][$k]['order_status_info'] = $order_status[$v['order_status']] ?? [];
|
||||
$list['data'][$k]['refund_status_name'] = $refund_status[$v['refund_status']]['name'] ?? '';
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,7 +70,11 @@ class RechargeOrderService extends BaseAdminService
|
||||
$query->field('member_id, nickname, mobile, headimg');
|
||||
}, 'pay' => function($query) {
|
||||
$query->field('');
|
||||
} ])->append(['order_status_info', 'order_from_name'])->findOrEmpty()->toArray();
|
||||
} ])->append(['order_from_name'])->findOrEmpty()->toArray();
|
||||
if(!empty($detail))
|
||||
{
|
||||
$detail['order_status_info'] = RechargeOrderDict::getStatus($detail['order_status']) ?? [];
|
||||
}
|
||||
return $detail;
|
||||
}
|
||||
|
||||
|
||||
@ -1,114 +0,0 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\service\admin\order;
|
||||
|
||||
use app\dict\order\OrderRefundDict;
|
||||
use app\model\order\OrderItemRefund;
|
||||
use core\base\BaseAdminService;
|
||||
|
||||
/**
|
||||
* 充值订单
|
||||
* Class RechargeOrderService
|
||||
* @package app\service\admin\order
|
||||
*/
|
||||
class RefundService extends BaseAdminService
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->model = new OrderItemRefund();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询退款列表
|
||||
* @param array $where
|
||||
* @return mixed
|
||||
*/
|
||||
public function getPage(array $where) {
|
||||
|
||||
$field = 'order_item_refund.refund_id,order_item_refund.num,order_item_refund.money,order_item_refund.refund_no,order_item_refund.status,order_item_refund.create_time,order_item_refund.audit_time,order_item_refund.transfer_time,order_item_refund.item_type,order_item_refund.order_item_id, order_item_refund.order_id,order_item_refund.member_id,order_item_refund.order_no';
|
||||
$member_where = [];
|
||||
if(!empty($where['keywords']))
|
||||
{
|
||||
$member_where[] = ["member.member_id|member.nickname|member.mobile", '=', $where['keywords']];
|
||||
}
|
||||
$search_model = $this->model->where([['order_item_refund.site_id', '=', $this->site_id]])->with(['item' => function($query) {
|
||||
$query->with('orderNo')->field('order_id, order_item_id, item_name, item_image');
|
||||
}])->withSearch(['join_order_no' => 'order_no', 'join_status' => 'status', 'join_member_id' => 'member_id', 'refund_no' => 'refund_no', 'join_create_time' => 'create_time'],$where)->withJoin(['member' => function($query){
|
||||
$query->field("member.nickname, member.headimg, member.mobile, member.member_id");
|
||||
}
|
||||
])->where($member_where)->field($field)->order('create_time desc')->append(['status_name', 'payrefund.type_name']);
|
||||
|
||||
return $this->pageQuery($search_model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询退款详情
|
||||
* @param int $refund_id
|
||||
* @return void
|
||||
*/
|
||||
public function getDetail(int $refund_id) {
|
||||
$field = 'refund_id,num,money,refund_no,status,create_time,audit_time,transfer_time,item_type,order_item_id, order_id,member_id';
|
||||
$detail = $this->model->where([ ['site_id', '=', $this->site_id], ['refund_id', '=', $refund_id]])->field($field)->with(['item' => function($query) {
|
||||
$query->field('order_item_id, item_name, item_image');
|
||||
}, 'member' => function($query) {
|
||||
$query->field('member_id, nickname, mobile, headimg');
|
||||
}, 'payrefund' => function($query) {
|
||||
$query->field('refund_no');
|
||||
}])->append(['status_name', 'payrefund.type_name'])->findOrEmpty()->toArray();
|
||||
return $detail;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款状态
|
||||
* @return void
|
||||
*/
|
||||
public function getStatus($type){
|
||||
$status = OrderRefundDict::getStatus();
|
||||
return $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款统计数据(根据状态查询)
|
||||
*/
|
||||
public function stat()
|
||||
{
|
||||
$status = OrderRefundDict::getStatus();
|
||||
$all = 0;
|
||||
$have = 0;
|
||||
foreach ($status as $k => $v)
|
||||
{
|
||||
$money = $this->model->where([['status', '=', $v['key']], ['site_id', '=', $this->site_id]])->sum("money");
|
||||
if($money == null)
|
||||
{
|
||||
$money = 0;
|
||||
}
|
||||
if($k == 1 || $k == 2){
|
||||
$have = $have + $money;
|
||||
}
|
||||
$status[$k]['money'] = number_format($money, 2);
|
||||
$all = $all + $money;
|
||||
}
|
||||
$status['all'] = [
|
||||
'name' => get_lang('dict_refund.all'),
|
||||
'key' => 'all',
|
||||
'money' => number_format($all, 2)
|
||||
];
|
||||
$status['have'] = [
|
||||
'name' => get_lang('dict_refund.have'),
|
||||
'key' => 'all',
|
||||
'money' => number_format($have, 2)
|
||||
];
|
||||
return $status;
|
||||
|
||||
}
|
||||
}
|
||||
@ -21,8 +21,6 @@ use core\exception\PayException;
|
||||
|
||||
/**
|
||||
* 支付配置服务层
|
||||
* Class PayConfigService
|
||||
* @package app\service\admin\pay
|
||||
*/
|
||||
class PayChannelService extends BaseAdminService
|
||||
{
|
||||
@ -142,7 +140,6 @@ class PayChannelService extends BaseAdminService
|
||||
];
|
||||
break;
|
||||
}
|
||||
// $config['status'] = $data['status'] ?? '0';//是否启用
|
||||
return $config;
|
||||
}
|
||||
|
||||
|
||||
@ -1,62 +0,0 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\service\admin\pay;
|
||||
|
||||
use app\service\core\pay\CorePayConfigService;
|
||||
use core\base\BaseAdminService;
|
||||
|
||||
/**
|
||||
* 支付配置服务层
|
||||
* Class PayConfigService
|
||||
* @package app\service\admin\pay
|
||||
*/
|
||||
class PayConfigService extends BaseAdminService
|
||||
{
|
||||
|
||||
public $core_pay_config_service;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->core_pay_config_service = new CorePayConfigService();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取配置
|
||||
* @param string $key
|
||||
* @param string $value
|
||||
* @param int $site_id
|
||||
*/
|
||||
public function getConfigByType(string $type){
|
||||
return $this->core_pay_config_service->getConfigByType($this->site_id, $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置配置信息
|
||||
* @param string $key
|
||||
* @param int $site_id
|
||||
* @return mixed
|
||||
*/
|
||||
public function setConfigByType(string $type, array $data)
|
||||
{
|
||||
return $this->core_pay_config_service->setConfigByType($this->site_id, $type, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付方式配置列表
|
||||
* @return array|null
|
||||
*/
|
||||
public function getPayConfigList(){
|
||||
return $this->core_pay_config_service->getPayConfigList($this->site_id);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
namespace app\service\admin\stat;
|
||||
|
||||
use app\model\order\Order;
|
||||
use app\model\order\RechargeOrder;
|
||||
use app\service\admin\member\MemberService;
|
||||
use app\service\admin\site\SiteService;
|
||||
use app\service\admin\sys\SystemService;
|
||||
@ -115,7 +115,7 @@ class SiteStatService extends BaseAdminService
|
||||
['order_status', '>', 0],
|
||||
['create_time', 'between', [$start_time, $end_time]]
|
||||
];
|
||||
$money = (new Order())->where($where)->sum('order_money');
|
||||
$money = (new RechargeOrder())->where($where)->sum('order_money');
|
||||
return $money;
|
||||
}
|
||||
|
||||
@ -131,7 +131,7 @@ class SiteStatService extends BaseAdminService
|
||||
['order_status', '>', 0],
|
||||
['create_time', 'between', [$start_time, $end_time]]
|
||||
];
|
||||
$money = (new Order())->where($where)->count('order_id');
|
||||
$money = (new RechargeOrder())->where($where)->count('order_id');
|
||||
return $money;
|
||||
}
|
||||
|
||||
|
||||
@ -174,7 +174,7 @@ class AttachmentService extends BaseAdminService
|
||||
['id', '=', $id]
|
||||
);
|
||||
$category_model = new SysAttachmentCategory();
|
||||
$res = $category_model->edit($data, $where);
|
||||
$res = $category_model->where($where)->update($data);
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
||||
@ -123,4 +123,34 @@ class ConfigService extends BaseAdminService
|
||||
$res = $this->core_config_service->setConfig(0,'SERVICE_INFO', $data);
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置地图key
|
||||
* @param array $value
|
||||
* @return bool
|
||||
*/
|
||||
public function setMap(array $value)
|
||||
{
|
||||
$data = [
|
||||
'key' => $value['key'],
|
||||
];
|
||||
$res = $this->core_config_service->setConfig($this->site_id,'MAPKEY', $data);
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地图key
|
||||
*/
|
||||
public function getMap()
|
||||
{
|
||||
$info = (new CoreConfigService())->getConfig($this->site_id, 'MAPKEY');
|
||||
if(empty($info))
|
||||
{
|
||||
$info = [];
|
||||
$info['value'] = [
|
||||
'key' => '',
|
||||
];
|
||||
}
|
||||
return $info['value'];
|
||||
}
|
||||
}
|
||||
@ -117,7 +117,7 @@ class MenuService extends BaseAdminService
|
||||
{
|
||||
sort($menu_keys);
|
||||
$cache_name = 'menu' . md5(implode("_", $menu_keys)) . $is_tree;
|
||||
return cache_remember(
|
||||
$menu_list = cache_remember(
|
||||
$cache_name,
|
||||
function () use ($menu_keys, $app_type, $is_tree) {
|
||||
$where = [
|
||||
@ -128,23 +128,24 @@ class MenuService extends BaseAdminService
|
||||
$where[] = ['app_type', '=', $app_type];
|
||||
}
|
||||
$menu_list = $this->model->where($where)->order('sort', 'desc')->select()->toArray();
|
||||
return $is_tree ? $this->menuToTree($menu_list, 'menu_key', 'parent_key', 'children', 'auth', '', 1) : $menu_list;
|
||||
return $menu_list;
|
||||
|
||||
},
|
||||
self::$cache_tag_name
|
||||
);
|
||||
// return Cache::tag(self::$cache_tag_name)->remember($cache_name, function () use ($menu_keys, $app_type, $is_tree) {
|
||||
// $where = [
|
||||
// ['menu_key', 'in', $menu_keys],
|
||||
//// ['menu_type', 'in', [0,1]]
|
||||
// ];
|
||||
// if(!empty($app_type)){
|
||||
// $where[] = ['app_type', '=', $app_type];
|
||||
// }
|
||||
// $menu_list = $this->model->where($where)->order('sort', 'desc')->select()->toArray();
|
||||
// return $is_tree ? $this->menuToTree($menu_list, 'menu_key', 'parent_key', 'children', 'auth', '', 1) : $menu_list;
|
||||
//
|
||||
// });
|
||||
foreach ($menu_list as $k => $v)
|
||||
{
|
||||
$lang_menu_key = "dict_menu_". $v['app_type']. '.'. $v['menu_key'];
|
||||
$lang_menu_name = get_lang("dict_menu_". $v['app_type']. '.'. $v['menu_key']);
|
||||
//语言已定义
|
||||
if($lang_menu_key != $lang_menu_name)
|
||||
{
|
||||
$menu_list[$k]['menu_name'] = $lang_menu_name;
|
||||
}
|
||||
}
|
||||
|
||||
return $is_tree ? $this->menuToTree($menu_list, 'menu_key', 'parent_key', 'children', 'auth', '', 1) : $menu_list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -301,7 +302,7 @@ class MenuService extends BaseAdminService
|
||||
public function getAllMenuList($app_type = '', $status = 'all', $is_tree = 0, $is_button = 0)
|
||||
{
|
||||
$cache_name = 'menu_api_' .$app_type.'_'. $status . '_' . $is_tree . '_' . $is_button;
|
||||
return cache_remember(
|
||||
$menu_list = cache_remember(
|
||||
$cache_name,
|
||||
function () use ($status, $is_tree, $is_button, $app_type) {
|
||||
$where = [
|
||||
@ -312,21 +313,22 @@ class MenuService extends BaseAdminService
|
||||
$where[] = ['status', '=', $status];
|
||||
}
|
||||
$menu_list = $this->model->where($where)->order('sort desc')->select()->toArray();
|
||||
return $is_tree ? $this->menuToTree($menu_list, 'menu_key', 'parent_key', 'children', 'auth', '', $is_button) : $menu_list;
|
||||
return $menu_list;
|
||||
},
|
||||
self::$cache_tag_name
|
||||
);
|
||||
// return Cache::tag(self::$cache_tag_name)->remember($cache_name, function () use ($status, $is_tree, $is_button, $app_type) {
|
||||
// $where = [
|
||||
//// ['menu_type', 'in', [0,1]]
|
||||
// ['app_type', '=', $app_type],
|
||||
// ];
|
||||
// if ($status != 'all') {
|
||||
// $where[] = ['status', '=', $status];
|
||||
// }
|
||||
// $menu_list = $this->model->where($where)->order('sort desc')->select()->toArray();
|
||||
// return $is_tree ? $this->menuToTree($menu_list, 'menu_key', 'parent_key', 'children', 'auth', '', $is_button) : $menu_list;
|
||||
// });
|
||||
foreach ($menu_list as $k => $v)
|
||||
{
|
||||
$lang_menu_key = "dict_menu_". $v['app_type']. '.'. $v['menu_key'];
|
||||
$lang_menu_name = get_lang("dict_menu_". $v['app_type']. '.'. $v['menu_key']);
|
||||
//语言已定义
|
||||
if($lang_menu_key != $lang_menu_name)
|
||||
{
|
||||
$menu_list[$k]['menu_name'] = $lang_menu_name;
|
||||
}
|
||||
}
|
||||
|
||||
return $is_tree ? $this->menuToTree($menu_list, 'menu_key', 'parent_key', 'children', 'auth', '', $is_button) : $menu_list;;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -49,6 +49,7 @@ class SystemService extends BaseAdminService
|
||||
{
|
||||
$site_tag = $this->site_id == 1 ? '' : '/s' . $this->site_id;
|
||||
$data = [
|
||||
'wap_domain' => env("system.wap_domain"),
|
||||
'wap_url' => ( !empty(env("system.wap_domain")) ? env("system.wap_domain") : request()->domain() ) . "/wap" . $site_tag,
|
||||
'web_url' => ( !empty(env("system.web_domain")) ? env("system.web_domain") : request()->domain() ) . "/web" . $site_tag,
|
||||
];
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
namespace app\service\api\order;
|
||||
|
||||
use app\dict\order\RechargeOrderDict;
|
||||
use app\model\order\Order;
|
||||
use app\model\order\RechargeOrder;
|
||||
use app\service\core\order\recharge\CoreRechargeOrderService;
|
||||
use core\base\BaseApiService;
|
||||
|
||||
@ -26,7 +26,7 @@ class RechargeOrderService extends BaseApiService
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->model = new Order();
|
||||
$this->model = new RechargeOrder();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -54,8 +54,16 @@ class RechargeOrderService extends BaseApiService
|
||||
$where['order_type'] = 'recharge';
|
||||
$search_model = $this->model->where([ ['site_id', '=', $this->site_id], ['member_id', '=', $this->member_id] ])->withSearch(['order_status'], $where)->field($field)->with(['item' => function($query) {
|
||||
$query->field('order_item_id, order_id, member_id, item_id, item_type, item_name, item_image, price, num, item_money, is_refund, refund_no, refund_status, create_time');
|
||||
}])->order($order)->append(['order_status_info', 'order_from_name']);
|
||||
return $this->pageQuery($search_model);
|
||||
}])->order($order)->append(['order_from_name']);
|
||||
$list = $this->pageQuery($search_model);
|
||||
$order_status = RechargeOrderDict::getStatus();
|
||||
//$refund_status = RechargeOrderDict::getRefundStatus();
|
||||
foreach ($list['data'] as $k => $v)
|
||||
{
|
||||
$list['data'][$k]['order_status_info'] = $order_status[$v['order_status']] ?? [];
|
||||
// $list['data'][$k]['refund_status_name'] = $refund_status[$v['refund_status']]['name'] ?? '';
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -68,7 +76,11 @@ class RechargeOrderService extends BaseApiService
|
||||
$field = 'order_id, site_id, order_no, order_from, order_type, out_trade_no, order_status, refund_status, member_id, ip, member_message, order_item_money, order_discount_money, order_money, create_time, pay_time, close_time, is_delete, is_enable_refund, remark, invoice_id, close_reason';
|
||||
$detail = $this->model->where([['order_type', '=', 'recharge'], ['site_id', '=', $this->site_id], ['member_id', '=', $this->member_id], ['order_id', '=', $order_id]])->field($field)->with(['item' => function($query) {
|
||||
$query->field('order_item_id, order_id, member_id, item_id, item_type, item_name, item_image, price, num, item_money, is_refund, refund_no, refund_status, create_time');
|
||||
}])->append(['order_status_info', 'order_from_name'])->findOrEmpty()->toArray();
|
||||
}])->append(['order_from_name'])->findOrEmpty()->toArray();
|
||||
if(!empty($detail))
|
||||
{
|
||||
$detail['order_status_info'] = RechargeOrderDict::getStatus($detail['order_status']) ?? [];
|
||||
}
|
||||
return $detail;
|
||||
}
|
||||
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
|
||||
namespace app\service\api\upload;
|
||||
|
||||
use app\dict\sys\StorageDict;
|
||||
use app\service\core\upload\CoreUploadService;
|
||||
use core\base\BaseApiService;
|
||||
|
||||
@ -60,6 +61,6 @@ class UploadService extends BaseApiService
|
||||
{
|
||||
$dir = $this->root_path . '/' . 'document' . '/' . $this->site_id . '/' . date('Ym') . '/' . date('d');
|
||||
$core_upload_service = new CoreUploadService();
|
||||
return $core_upload_service->document($file, $this->site_id, '', $dir, $is_local);
|
||||
return $core_upload_service->document($file, $this->site_id, '', $dir, StorageDict::LOCAL);
|
||||
}
|
||||
}
|
||||
@ -1,95 +0,0 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\service\core\order;
|
||||
|
||||
use app\dict\pay\PayDict;
|
||||
use app\model\order\Order;
|
||||
use app\model\order\OrderItem;
|
||||
use app\service\core\pay\CorePayService;
|
||||
use core\base\BaseCoreService;
|
||||
use core\exception\CommonException;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 基础订单创建
|
||||
* Class CoreOrderCreateService
|
||||
* @package app\service\core\order
|
||||
*/
|
||||
class CoreOrderCreateService extends BaseCoreService
|
||||
{
|
||||
/**
|
||||
* 订单创建
|
||||
* @param int $site_id
|
||||
* @param array $order_data
|
||||
* @param array $order_items
|
||||
* @return array
|
||||
*/
|
||||
public function create(int $site_id, array $order_data, array $order_items)
|
||||
{
|
||||
|
||||
Db::startTrans();
|
||||
try{
|
||||
//添加订单支付表
|
||||
$order_data['out_trade_no'] = (new CorePayService())->create($site_id, PayDict::MEMBER, $order_data['member_id'], $order_data['order_money'], $order_data['order_type'], get_lang("dict_order.trade_type_recharge"));
|
||||
//添加订单表
|
||||
$order_data['order_no'] = $this->createOrderNo($site_id);
|
||||
$create_order = (new Order())->create($order_data);
|
||||
$order_id = $create_order->order_id;
|
||||
//添加订单项目表
|
||||
$order_item_model = new OrderItem();
|
||||
foreach ($order_items as $k => $order_item)
|
||||
{
|
||||
$order_item['order_id'] = $order_id;
|
||||
$order_item_model->create($order_item);
|
||||
}
|
||||
//订单创建执行事件
|
||||
event("orderCreateAfter");
|
||||
if($order_data['order_money'] == 0){
|
||||
(new CorePayService())->finish($site_id, $order_data['out_trade_no'], PayDict::BALANCEPAY);
|
||||
}
|
||||
Db::commit();
|
||||
//返回订单信息
|
||||
return [
|
||||
'order_id' => $order_id,
|
||||
'out_trade_no' => $order_data['out_trade_no']
|
||||
];
|
||||
|
||||
}catch (\Exception $e)
|
||||
{
|
||||
Db::rollback();
|
||||
throw new CommonException($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建订单编号
|
||||
* @param int $site_id
|
||||
* @return string
|
||||
*/
|
||||
public function createOrderNo(int $site_id)
|
||||
{
|
||||
$time_str = date('YmdHi');
|
||||
$max_no = Cache::get("order_no_".$site_id."_".$time_str);
|
||||
|
||||
if (!isset($max_no) || empty($max_no)) {
|
||||
$max_no = 1;
|
||||
} else {
|
||||
$max_no = $max_no + 1;
|
||||
}
|
||||
$order_no = $time_str . $site_id .sprintf('%03d', $max_no);
|
||||
Cache::set("order_no_".$site_id."_".$time_str, $max_no);
|
||||
return $order_no;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,84 +0,0 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\service\core\order;
|
||||
|
||||
use app\model\order\OrderItemRefund;
|
||||
use app\service\core\pay\CoreRefundService;
|
||||
use core\base\BaseCoreService;
|
||||
use core\exception\CommonException;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 退款创建
|
||||
* Class CoreOrderCreateService
|
||||
* @package app\service\core\order
|
||||
*/
|
||||
class CoreOrderRefundService extends BaseCoreService
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->model = new OrderItemRefund();
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款创建
|
||||
* @param array $data
|
||||
*/
|
||||
public function create(array $data)
|
||||
{
|
||||
$refund_no = (new CoreRefundService())->create($data['site_id'], $data['out_trade_no'], $data['money'], $data['reason'] ?? '');
|
||||
|
||||
$create = $this->model->create([
|
||||
'order_item_id' => $data['order_item_id'],
|
||||
'order_id' => $data['order_id'],
|
||||
'site_id' => $data['site_id'],
|
||||
'member_id' => $data['member_id'],
|
||||
'num' => $data['num'],
|
||||
'money' => $data['money'],
|
||||
'refund_no' => $refund_no,
|
||||
'item_type' => $data['item_type'],
|
||||
'create_time' => time()
|
||||
]);
|
||||
|
||||
return [
|
||||
'refund_no' => $refund_no,
|
||||
'refund_id' => $create->refund_id
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 退款转账完成
|
||||
* @param string $refund_no
|
||||
* @return void
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function refundComplete(string $refund_no) {
|
||||
$model = $this->model->where([ ['refund_no', '=', $refund_no] ])->find();
|
||||
if ($model->isEmpty()) throw new CommonException('ITEM_REFUND_NOT_EXIST');
|
||||
|
||||
Db::startTrans();
|
||||
try {
|
||||
event('refundComplete', $model->toArray());
|
||||
Db::commit();
|
||||
return true;
|
||||
} catch(\Exception $e) {
|
||||
Db::rollback();
|
||||
throw new CommonException($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,42 +0,0 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\service\core\order;
|
||||
|
||||
use app\model\order\Order;
|
||||
use core\base\BaseCoreService;
|
||||
|
||||
/**
|
||||
* 订单
|
||||
*/
|
||||
class CoreOrderService extends BaseCoreService
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->model = new Order();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单信息
|
||||
* @param int $site_id
|
||||
* @param int $order_id
|
||||
* @return Order|array|mixed|\think\Model
|
||||
*/
|
||||
public function getOrderInfo(int $site_id, int $order_id){
|
||||
return $this->model->where([
|
||||
['site_id', '=', $site_id],
|
||||
['order_id', '=', $order_id]
|
||||
])->field('*')->findOrEmpty()->toArray();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -12,11 +12,15 @@
|
||||
namespace app\service\core\order\recharge;
|
||||
|
||||
use app\dict\order\RechargeOrderDict;
|
||||
use app\model\order\Order;
|
||||
use app\dict\pay\PayDict;
|
||||
use app\model\order\RechargeOrder;
|
||||
use app\model\order\RechargeOrderItem;
|
||||
use app\service\core\member\CoreMemberAccountService;
|
||||
use app\service\core\order\CoreOrderCreateService;
|
||||
use app\service\core\pay\CorePayService;
|
||||
use core\base\BaseCoreService;
|
||||
use core\exception\CommonException;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 充值订单流程
|
||||
@ -25,9 +29,6 @@ use core\exception\CommonException;
|
||||
*/
|
||||
class CoreRechargeOrderService extends BaseCoreService
|
||||
{
|
||||
|
||||
public $order_type = 'recharge';
|
||||
|
||||
/**
|
||||
* 充值订单创建
|
||||
* @param array $data //['site_id' => 1, ‘member_id’ => 1, 'order_from' => 'h5', 'member_message' => '','recharge_money' => 12.00]
|
||||
@ -61,8 +62,52 @@ class CoreRechargeOrderService extends BaseCoreService
|
||||
'is_refund' => 0
|
||||
]
|
||||
];
|
||||
$res = (new CoreOrderCreateService())->create($data['site_id'], $order_data, $order_items);
|
||||
return $res;
|
||||
Db::startTrans();
|
||||
try{
|
||||
//添加订单支付表
|
||||
$order_data['out_trade_no'] = (new CorePayService())->create($data['site_id'], PayDict::MEMBER, $order_data['member_id'], $order_data['order_money'], $order_data['order_type'], get_lang("dict_order.trade_type_recharge"));
|
||||
//添加订单表
|
||||
$order_data['order_no'] = $this->createOrderNo($data['site_id']);
|
||||
$create_order = (new RechargeOrder())->create($order_data);
|
||||
$order_id = $create_order->order_id;
|
||||
//添加订单项目表
|
||||
$order_item_model = new RechargeOrderItem();
|
||||
foreach ($order_items as $k => $order_item)
|
||||
{
|
||||
$order_item['order_id'] = $order_id;
|
||||
$order_item_model->create($order_item);
|
||||
}
|
||||
Db::commit();
|
||||
//返回订单信息
|
||||
return [
|
||||
'order_id' => $order_id,
|
||||
'out_trade_no' => $order_data['out_trade_no']
|
||||
];
|
||||
|
||||
}catch (\Exception $e)
|
||||
{
|
||||
Db::rollback();
|
||||
throw new CommonException($e->getMessage());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 创建订单编号
|
||||
* @param int $site_id
|
||||
* @return string
|
||||
*/
|
||||
public function createOrderNo(int $site_id)
|
||||
{
|
||||
$time_str = date('YmdHi');
|
||||
$max_no = Cache::get("recharge_order_no_".$site_id."_".$time_str);
|
||||
|
||||
if (!isset($max_no) || empty($max_no)) {
|
||||
$max_no = 1;
|
||||
} else {
|
||||
$max_no = $max_no + 1;
|
||||
}
|
||||
$order_no = $time_str . $site_id .sprintf('%03d', $max_no);
|
||||
Cache::set("recharge_order_no_".$site_id."_".$time_str, $max_no);
|
||||
return $order_no;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,7 +117,7 @@ class CoreRechargeOrderService extends BaseCoreService
|
||||
public function pay(array $pay_info)
|
||||
{
|
||||
try {
|
||||
$order_model = new Order();
|
||||
$order_model = new RechargeOrder();
|
||||
$order_info = $order_model->where([['site_id', '=', $pay_info['site_id']], ['out_trade_no', '=', $pay_info['out_trade_no']]])->findOrEmpty()->toArray();
|
||||
if (empty($order_info))
|
||||
throw new CommonException('ORDER_NOT_EXIST');
|
||||
@ -97,12 +142,27 @@ class CoreRechargeOrderService extends BaseCoreService
|
||||
* @return void
|
||||
*/
|
||||
public function close(int $site_id, int $order_id){
|
||||
$order = (new Order())->where([ ['site_id', '=', $site_id ],['order_id', '=', $order_id ], ])->find();
|
||||
$order = (new RechargeOrder())->where([ ['site_id', '=', $site_id ],['order_id', '=', $order_id ], ])->find();
|
||||
if ($order->isEmpty()) throw new CommonException('ORDER_NOT_EXIST');
|
||||
if ($order->order_status == RechargeOrderDict::CLOSE) throw new CommonException('ORDER_CLOSED');
|
||||
|
||||
$order->save(['order_status' => RechargeOrderDict::CLOSE]);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单信息
|
||||
* @param int $site_id
|
||||
* @param int $order_id
|
||||
* @return array
|
||||
*/
|
||||
public function orderInfo(int $site_id, int $order_id)
|
||||
{
|
||||
return (new RechargeOrder())->where([
|
||||
['site_id', '=', $site_id],
|
||||
['order_id', '=', $order_id]
|
||||
])->field('*')->findOrEmpty()->toArray();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -13,11 +13,10 @@ namespace app\service\core\order\recharge;
|
||||
|
||||
use app\dict\order\RechargeOrderDict;
|
||||
use app\model\member\Member;
|
||||
use app\model\order\Order;
|
||||
use app\model\order\OrderItem;
|
||||
use app\model\order\OrderItemRefund;
|
||||
use app\model\order\RechargeOrder;
|
||||
use app\model\order\RechargeOrderItem;
|
||||
use app\model\order\RechargeOrderItemRefund;
|
||||
use app\service\core\member\CoreMemberAccountService;
|
||||
use app\service\core\order\CoreOrderRefundService;
|
||||
use app\service\core\pay\CoreRefundService;
|
||||
use core\base\BaseCoreService;
|
||||
use core\exception\CommonException;
|
||||
@ -39,12 +38,12 @@ class CoreRechargeRefundService extends BaseCoreService
|
||||
* @return void
|
||||
*/
|
||||
public function create(int $site_id, int $order_id) {
|
||||
$order_model = (new OrderItem())->where([ ['site_id', '=', $site_id], ['order_id', '=', $order_id], ['item_type', '=', $this->order_type ] ])->with('ordermain')->find();
|
||||
$order_model = (new RechargeOrderItem())->where([ ['site_id', '=', $site_id], ['order_id', '=', $order_id], ['item_type', '=', $this->order_type ] ])->with('ordermain')->find();
|
||||
$order = $order_model->toArray();
|
||||
$order_info = (new Order())->where([ ['site_id', '=', $site_id], ['order_id', '=', $order_id] ])->field("order_no")->find();
|
||||
$order_info = (new RechargeOrder())->where([ ['site_id', '=', $site_id], ['order_id', '=', $order_id] ])->field("order_no")->find();
|
||||
if (empty($order)) throw new CommonException('ORDER_NOT_EXIST');
|
||||
if (!$order['ordermain']['is_enable_refund']) throw new CommonException('NOT_ALLOW_APPLY_REFUND');
|
||||
if (!in_array($order['ordermain']['order_status'], [RechargeOrderDict::PAY, RechargeOrderDict::FINISH])) throw new CommonException('ORDER_UNPAID_NOT_ALLOW_APPLY_REFUND');
|
||||
if (!in_array($order['ordermain']['order_status'], [RechargeOrderDict::FINISH])) throw new CommonException('ORDER_UNPAID_NOT_ALLOW_APPLY_REFUND');
|
||||
if ($order['refund_status'] != RechargeOrderDict::NOT_APPLAY) throw new CommonException('REFUND_HAD_APPLIED');
|
||||
|
||||
Db::startTrans();
|
||||
@ -60,20 +59,30 @@ class CoreRechargeRefundService extends BaseCoreService
|
||||
$order['out_trade_no'] = $order['ordermain']['out_trade_no'];
|
||||
$order['money'] = $order['item_money'] > $member_info['balance'] ? $member_info['balance'] : $order['item_money'];
|
||||
$order['order_no'] = $order_info['order_no'];
|
||||
$creat_res = (new CoreOrderRefundService())->create($order);
|
||||
|
||||
$refund_no = (new CoreRefundService())->create($order['site_id'], $order['out_trade_no'], $order['money'], $order['reason'] ?? '');
|
||||
(new RechargeOrderItemRefund())->create([
|
||||
'order_item_id' => $order['order_item_id'],
|
||||
'order_id' => $order['order_id'],
|
||||
'site_id' => $order['site_id'],
|
||||
'member_id' => $order['member_id'],
|
||||
'num' => $order['num'],
|
||||
'money' => $order['money'],
|
||||
'refund_no' => $refund_no,
|
||||
'item_type' => $order['item_type'],
|
||||
'create_time' => time()
|
||||
]);
|
||||
$order_model->save([
|
||||
'refund_no' => $creat_res['refund_no'],
|
||||
'refund_no' => $refund_no,
|
||||
'refund_status' => RechargeOrderDict::REFUNDING
|
||||
]);
|
||||
$order_model->ordermain->save([
|
||||
'refund_status' => RechargeOrderDict::REFUNDING
|
||||
]);
|
||||
|
||||
(new OrderItemRefund())->update(['status' => RechargeOrderDict::REFUNDING], [ ['refund_no', '=', $creat_res['refund_no'] ] ]);
|
||||
(new RechargeOrderItemRefund())->update(['status' => RechargeOrderDict::REFUNDING], [ ['refund_no', '=', $refund_no ] ]);
|
||||
|
||||
// 执行退款
|
||||
$this->refund($order, $creat_res['refund_no']);
|
||||
$this->refund($order, $refund_no);
|
||||
|
||||
Db::commit();
|
||||
|
||||
@ -101,7 +110,7 @@ class CoreRechargeRefundService extends BaseCoreService
|
||||
* @return void
|
||||
*/
|
||||
public function refundComplete($refund_no){
|
||||
$model = (new OrderItemRefund())->where([ ['refund_no', '=', $refund_no ] ])->find();
|
||||
$model = (new RechargeOrderItemRefund())->where([ ['refund_no', '=', $refund_no ] ])->find();
|
||||
if ($model->isEmpty()) throw new CommonException('ORDER_NOT_EXIST');
|
||||
if ($model->status != RechargeOrderDict::REFUNDING) throw new CommonException('REFUND_STATUS_ABNORMAL');
|
||||
|
||||
@ -109,7 +118,7 @@ class CoreRechargeRefundService extends BaseCoreService
|
||||
try {
|
||||
$model->save(['status' => RechargeOrderDict::REFUND_COMPLETED]);
|
||||
$model->item()->save([ 'refund_status' => RechargeOrderDict::REFUND_COMPLETED ]);
|
||||
(new Order())->update(['refund_status' => RechargeOrderDict::REFUND_COMPLETED], [ ['order_id', '=', $model->order_id ] ]);
|
||||
(new RechargeOrder())->update(['refund_status' => RechargeOrderDict::REFUND_COMPLETED], [ ['order_id', '=', $model->order_id ] ]);
|
||||
(new CoreRechargeOrderService())->close($model->site_id, $model->order_id);
|
||||
Db::commit();
|
||||
return true;
|
||||
|
||||
@ -14,6 +14,8 @@ namespace app\service\core\pay;
|
||||
|
||||
use app\dict\pay\PayDict;
|
||||
use app\model\pay\PayChannel;
|
||||
use app\service\core\weapp\CoreWeappConfigService;
|
||||
use app\service\core\wechat\CoreWechatConfigService;
|
||||
use core\base\BaseCoreService;
|
||||
use think\Model;
|
||||
|
||||
@ -39,24 +41,28 @@ class CorePayChannelService extends BaseCoreService
|
||||
$where['site_id'] = $site_id;
|
||||
return $this->model->where($where)->findOrEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过渠道获取支持的支付方式(专属用于支付业务)
|
||||
* @param int $site_id
|
||||
* @param string $channel
|
||||
* @param array $pay_type_list 外部业务支付类型限制
|
||||
* @return array
|
||||
* @param string $trade_type
|
||||
* @return array|array[]
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function getAllowPayTypeByCahnnel(int $site_id, string $channel, array $pay_type_limit_list = []){
|
||||
public function getAllowPayTypeByChannel(int $site_id, string $channel, string $trade_type = ''){
|
||||
$channel_pay_list = $this->model->where([['site_id', '=', $site_id], ['channel', '=', $channel], ['status', '=', 1]])->field('type')->order('sort asc')->select()->toArray();
|
||||
|
||||
if(!empty($channel_pay_list)){
|
||||
$temp_channel_pay_list = array_column($channel_pay_list, 'type');
|
||||
if($pay_type_limit_list) $temp_channel_pay_list = array_intersect($temp_channel_pay_list, $pay_type_limit_list);
|
||||
$pay_type_list = PayDict::getPayType($temp_channel_pay_list);
|
||||
}
|
||||
//充值订单不支持余额支付
|
||||
if(!empty($pay_type_list) && $trade_type == 'recharge'){
|
||||
unset($pay_type_list[PayDict::BALANCEPAY]);
|
||||
}
|
||||
return $pay_type_list ?? [];
|
||||
|
||||
}
|
||||
@ -72,10 +78,32 @@ class CorePayChannelService extends BaseCoreService
|
||||
$pay_channel = $this->model->where([['site_id', '=', $site_id], ['channel', '=', $channel], ['type', '=', $type]])->field('config')->findOrEmpty();
|
||||
if(!$pay_channel->isEmpty()){
|
||||
if($type == PayDict::WECHATPAY){
|
||||
$pay_channel->config = array_merge($pay_channel->config, (new CorePayConfigService())->getWechatPayFullConfig($site_id));
|
||||
$pay_channel->config = array_merge($pay_channel->config, $this->getWechatPayFullConfig($site_id));
|
||||
}
|
||||
return $pay_channel->config;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取完整的微信支付配置(根据场景)
|
||||
* @param $site_id
|
||||
* @return void
|
||||
*/
|
||||
public function getWechatPayFullConfig(int $site_id){
|
||||
//TODO 先判断是否是开放平台授权,然后再决定使用什么appid
|
||||
//查询公众号配置
|
||||
$core_wechat_config_service = new CoreWechatConfigService();
|
||||
$mp_app_id = $core_wechat_config_service->getWechatConfig($site_id)['app_id'];//公众号appid
|
||||
//查询公众号配置
|
||||
$core_weapp_config_service = new CoreWeappConfigService();
|
||||
$mini_app_id = $core_weapp_config_service->getWeappConfig($site_id)['app_id'];//小程序appid
|
||||
//todo 查询微信小程序 appid . 应用appid.....
|
||||
return [
|
||||
'mp_app_id' => $mp_app_id,
|
||||
'mini_app_id' => $mini_app_id
|
||||
//............
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -1,287 +0,0 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\service\core\pay;
|
||||
|
||||
use app\dict\pay\PayDict;
|
||||
use app\dict\sys\ConfigKeyDict;
|
||||
use app\model\sys\SysConfig;
|
||||
use app\service\core\sys\CoreConfigService;
|
||||
use app\service\core\weapp\CoreWeappConfigService;
|
||||
use app\service\core\wechat\CoreWechatConfigService;
|
||||
use core\base\BaseCoreService;
|
||||
use core\exception\CommonException;
|
||||
use think\Model;
|
||||
|
||||
|
||||
/**
|
||||
* 支付配置服务层
|
||||
* Class CorePayConfigService
|
||||
* @package app\service\core\pay
|
||||
*/
|
||||
class CorePayConfigService extends BaseCoreService
|
||||
{
|
||||
|
||||
/**
|
||||
* 获取启用的支付方式
|
||||
* @param $site_id
|
||||
* @return void
|
||||
*/
|
||||
public function getPayList(int $site_id, array $allow_type = [])
|
||||
{
|
||||
$pay_list = [];
|
||||
foreach(PayDict::getPayType($allow_type) as $k => $v){
|
||||
switch($k){
|
||||
case PayDict::WECHATPAY:
|
||||
$config = $this->getWechatpayConfig($site_id);
|
||||
break;
|
||||
case PayDict::ALIPAY:
|
||||
$config = $this->getAlipayConfig($site_id);
|
||||
break;
|
||||
case PayDict::OFFLINEPAY:
|
||||
$config = $this->getOfflinepayConfig($site_id);
|
||||
break;
|
||||
}
|
||||
if($config['status'] == PayDict::ON){
|
||||
$pay_list[] = [
|
||||
'key' => $k,
|
||||
'name' => $v['name'],
|
||||
'icon' => $v['icon']
|
||||
];
|
||||
}
|
||||
}
|
||||
return $pay_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付方式列表的配置
|
||||
* @param $site_id
|
||||
* @return void
|
||||
*/
|
||||
public function getPayConfigList(int $site_id)
|
||||
{
|
||||
$pay_config_list = [];
|
||||
foreach(PayDict::getPayType() as $k => $v){
|
||||
switch($k){
|
||||
case PayDict::WECHATPAY:
|
||||
$config = self::getWechatpayConfig($site_id);
|
||||
break;
|
||||
case PayDict::ALIPAY:
|
||||
$config = self::getAlipayConfig($site_id);
|
||||
break;
|
||||
case PayDict::OFFLINEPAY:
|
||||
$config = self::getOfflinepayConfig($site_id);
|
||||
break;
|
||||
}
|
||||
$pay_config_list[] = [
|
||||
'key' => $k,
|
||||
'name' => $v['name'],
|
||||
'icon' => $v['icon'],
|
||||
'config' => $config
|
||||
];
|
||||
}
|
||||
return $pay_config_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信支付配置
|
||||
* @param $site_id
|
||||
* @return array|mixed|string[]
|
||||
*/
|
||||
public function getWechatpayConfig(int $site_id){
|
||||
$config = (new CoreConfigService())->getConfig($site_id, ConfigKeyDict::WECHAT_PAY)['value'] ?? [];
|
||||
if(empty($config)){
|
||||
$config = array(
|
||||
'status' => PayDict::OFF,
|
||||
'icon' => path_to_url(PayDict::WECHATPAY_ICON),
|
||||
'mch_id' => '',//商户号
|
||||
'mch_secret_key' => '',//商户秘钥 现在默认认为是v3版
|
||||
'mch_secret_cert' => '',//商户私钥 字符串或路径
|
||||
'mch_public_cert_path' => '',//商户公钥证书路径
|
||||
);
|
||||
}
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 阿里云支付配置
|
||||
* @param $site_id
|
||||
* @return array|mixed|string[]
|
||||
*/
|
||||
public function getAlipayConfig(int $site_id){
|
||||
$config = (new CoreConfigService())->getConfig($site_id, ConfigKeyDict::ALIPAY)['value'] ?? [];
|
||||
if(empty($config)){
|
||||
$config = array(
|
||||
'status' => PayDict::OFF,
|
||||
'app_id' => path_to_url(PayDict::ALIPAY_ICON),// 必填-支付宝分配的 app_id
|
||||
'app_secret_cert' => '',// 必填-应用私钥 字符串或路径
|
||||
'app_public_cert_path' => '',//必填-应用公钥证书 路径
|
||||
'alipay_public_cert_path' => '',//必填-支付宝公钥证书 路径
|
||||
'alipay_root_cert_path' => '',// 必填-支付宝根证书 路径
|
||||
);
|
||||
}
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 线下支付
|
||||
* @param $site_id
|
||||
* @return array|mixed|string[]
|
||||
*/
|
||||
public function getOfflinepayConfig(int $site_id){
|
||||
$config = (new CoreConfigService())->getConfig($site_id, ConfigKeyDict::OFFLINE_PAY)['value'] ?? [];
|
||||
if(empty($config)){
|
||||
$config = array(
|
||||
'status' => PayDict::OFF,
|
||||
);
|
||||
}
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过支付方式查询支付配置(todo 注意: 用于支付 用于支付 用于支付)
|
||||
* @param $site_id
|
||||
* @param $type
|
||||
* @return void
|
||||
*/
|
||||
public function getPayConfigByType(int $site_id, string $type){
|
||||
switch($type){
|
||||
case PayDict::WECHATPAY:
|
||||
$config = self::getWechatpayConfig($site_id);
|
||||
$config = array_merge($config, $this->getWechatPayFullConfig($site_id));//一般来说,微信支付商户号不能完整的进行支付活动,需要我们主动完善支付信息, 例如公众号appid
|
||||
break;
|
||||
case PayDict::ALIPAY:
|
||||
$config = self::getAlipayConfig($site_id);
|
||||
break;
|
||||
case PayDict::OFFLINEPAY:
|
||||
$config = self::getOfflinepayConfig($site_id);
|
||||
break;
|
||||
}
|
||||
if($config['status'] != PayDict::ON)
|
||||
throw new CommonException('PAYMENT_METHOD_NOT_EXIST');
|
||||
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过支付方式获取配置(用于配置查询)
|
||||
* @param $site_id
|
||||
* @param $type
|
||||
* @return array|array[]|mixed|string[]
|
||||
*/
|
||||
public function getConfigByType(int $site_id, string $type){
|
||||
switch($type){
|
||||
case PayDict::WECHATPAY:
|
||||
$config = self::getWechatpayConfig($site_id);
|
||||
break;
|
||||
case PayDict::ALIPAY:
|
||||
$config = self::getAlipayConfig($site_id);
|
||||
break;
|
||||
case PayDict::OFFLINEPAY:
|
||||
$config = self::getOfflinepayConfig($site_id);
|
||||
break;
|
||||
}
|
||||
return $config;
|
||||
}
|
||||
/**
|
||||
* 获取完整的微信支付配置
|
||||
* @param $site_id
|
||||
* @return void
|
||||
*/
|
||||
public function getWechatPayFullConfig(int $site_id){
|
||||
//TODO 先判断是否是开放平台授权,然后再决定使用什么appid
|
||||
//查询公众号配置
|
||||
$core_wechat_config_service = new CoreWechatConfigService();
|
||||
$mp_app_id = $core_wechat_config_service->getWechatConfig($site_id)['app_id'];//公众号appid
|
||||
|
||||
//查询公众号配置
|
||||
$core_weapp_config_service = new CoreWeappConfigService();
|
||||
$mini_app_id = $core_weapp_config_service->getWeappConfig($site_id)['app_id'];//公众号appid
|
||||
|
||||
//todo 查询微信小程序 appid . 应用appid.....
|
||||
return [
|
||||
'mp_app_id' => $mp_app_id,
|
||||
'mini_app_id' => $mini_app_id
|
||||
//............
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置线下支付
|
||||
* @param $site_id
|
||||
* @param $data
|
||||
* @return SysConfig|bool|Model
|
||||
*/
|
||||
public function setOfflinepayConfig(int $site_id, array $data){
|
||||
|
||||
$config = [
|
||||
'status' => $data['status'],
|
||||
];
|
||||
return (new CoreConfigService())->setConfig($site_id, ConfigKeyDict::OFFLINE_PAY, $config);
|
||||
}
|
||||
/**
|
||||
* 设置线下支付
|
||||
* @param $site_id
|
||||
* @param $data
|
||||
* @return SysConfig|bool|Model
|
||||
*/
|
||||
public function setWechatpayConfig(int $site_id, array $data){
|
||||
|
||||
$config = [
|
||||
'status' => $data['status'],
|
||||
'mch_id' => $data['mch_id'],//商户号
|
||||
'mch_secret_key' => $data['mch_secret_key'],//商户秘钥 现在默认认为是v3版
|
||||
'mch_secret_cert' => $data['mch_secret_cert'],//商户私钥 字符串或路径
|
||||
'mch_public_cert_path' => $data['mch_public_cert_path'],//商户公钥证书路径
|
||||
];
|
||||
return (new CoreConfigService())->setConfig($site_id, ConfigKeyDict::WECHAT_PAY, $config);
|
||||
}
|
||||
/**
|
||||
* 设置线下支付
|
||||
* @param $site_id
|
||||
* @param $data
|
||||
* @return SysConfig|bool|Model
|
||||
*/
|
||||
public function setAlipayConfig(int $site_id, array $data){
|
||||
|
||||
$config = [
|
||||
'status' => $data['status'],
|
||||
'app_id' => $data['app_id'],// 必填-支付宝分配的 app_id
|
||||
'app_secret_cert' => $data['app_secret_cert'],// 必填-应用私钥 字符串或路径
|
||||
'app_public_cert_path' => $data['app_public_cert_path'],//必填-应用公钥证书 路径
|
||||
'alipay_public_cert_path' => $data['alipay_public_cert_path'],//必填-支付宝公钥证书 路径
|
||||
'alipay_root_cert_path' => $data['alipay_root_cert_path'],// 必填-支付宝根证书 路径
|
||||
];
|
||||
return (new CoreConfigService())->setConfig($site_id, ConfigKeyDict::ALIPAY, $config);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过支付方式设置支付配置
|
||||
* @param $site_id
|
||||
* @param $type
|
||||
* @param $data
|
||||
* @return array|mixed|string[]
|
||||
*/
|
||||
public function setConfigByType(int $site_id, string $type, array $data){
|
||||
switch($type){
|
||||
case PayDict::WECHATPAY:
|
||||
$result = $this->setWechatpayConfig($site_id, $data);
|
||||
break;
|
||||
case PayDict::ALIPAY:
|
||||
$result = $this->setAlipayConfig($site_id, $data);
|
||||
break;
|
||||
case PayDict::OFFLINEPAY:
|
||||
$result = $this->setOfflinepayConfig($site_id, $data);
|
||||
break;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@ -11,7 +11,6 @@
|
||||
|
||||
namespace app\service\core\pay;
|
||||
|
||||
use app\dict\order\OrderTypeDict;
|
||||
use app\dict\pay\OnlinePayDict;
|
||||
use app\dict\pay\PayDict;
|
||||
use app\job\pay\PayReturnTo;
|
||||
@ -71,7 +70,7 @@ class CorePayService extends BaseCoreService
|
||||
['site_id', '=', $site_id],
|
||||
['out_trade_no', '=', $out_trade_no]
|
||||
);
|
||||
return $this->model->where($where)->append(['pay_type_list', 'type_name', 'status_name'])->findOrEmpty();
|
||||
return $this->model->where($where)->append([ 'type_name', 'status_name'])->findOrEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -85,10 +84,10 @@ class CorePayService extends BaseCoreService
|
||||
['site_id', '=', $site_id],
|
||||
['out_trade_no', '=', $out_trade_no]
|
||||
);
|
||||
$pay = $this->model->where($where)->append(['pay_type_list', 'type_name', 'status_name'])->findOrEmpty()->toArray();
|
||||
$pay = $this->model->where($where)->append(['type_name', 'status_name'])->findOrEmpty()->toArray();
|
||||
if(!empty($pay)){
|
||||
//todo 校验场景控制支付方式
|
||||
$pay['pay_type_list'] = array_values((new CorePayChannelService())->getAllowPayTypeByCahnnel($site_id, $channel, $pay['pay_type_list']));
|
||||
$pay['pay_type_list'] = array_values((new CorePayChannelService())->getAllowPayTypeByChannel($site_id, $channel, $pay->trade_type));
|
||||
}
|
||||
return $pay;
|
||||
}
|
||||
@ -111,11 +110,9 @@ class CorePayService extends BaseCoreService
|
||||
$money = $pay['money'];
|
||||
$body = $pay['body'];
|
||||
$trade_type = $pay['trade_type'];
|
||||
// $allow_type = OrderTypeDict::getAllowPayType($trade_type);//当前支付允许使用的支付方式
|
||||
// if(!in_array($type, $allow_type)){
|
||||
// throw new PayException('PAYMENT_METHOD_NOT_SUPPORT');//业务不支持
|
||||
// }
|
||||
if(!in_array($type, array_column((new CorePayChannelService())->getAllowPayTypeByCahnnel($site_id, $channel, OrderTypeDict::getAllowPayType($trade_type)), 'key'))) throw new PayException('PAYMENT_METHOD_NOT_SCENE');//场景不支持
|
||||
|
||||
if(!in_array($type, array_column((new CorePayChannelService())->getAllowPayTypeByChannel($site_id, $channel, $trade_type), 'key'))) throw new PayException('PAYMENT_METHOD_NOT_SCENE');//场景不支持
|
||||
|
||||
$pay_result = $this->pay_event->init($site_id, $channel, $type)->pay($out_trade_no, $money, $body, $return_url, $quit_url, $buyer_id, $openid ?? '');
|
||||
//todo 特殊支付方式会直接返回支付状态,状态如果为已支付会直接支付
|
||||
if(!empty($pay_result['status']) && $pay_result['status'] == PayDict::STATUS_ED){
|
||||
|
||||
@ -212,7 +212,6 @@ class CoreRefundService extends BaseCoreService
|
||||
* @return void
|
||||
*/
|
||||
public function refundFail(int $site_id, array $data){
|
||||
$out_trade_no = $data['out_trade_no'];
|
||||
$refund_no = $data['refund_no'];
|
||||
$this->model->where([
|
||||
['site_id', '=', $site_id],
|
||||
|
||||
@ -52,16 +52,6 @@ class CoreSiteService extends BaseCoreService
|
||||
},
|
||||
self::$cache_tag_name.$site_id
|
||||
);
|
||||
// return Cache::tag(self::$cache_tag_name.$site_id)->remember($cache_name.$site_id, function () use ($site_id) {
|
||||
// $where = [
|
||||
// ['site_id', '=', $site_id],
|
||||
// ];
|
||||
// $site = $this->model->where($where)->field('app_type,site_name,logo,group_id, status, expire_time')->findOrEmpty();
|
||||
// if(!$site->isEmpty()){
|
||||
// $site->append(['status_name']);
|
||||
// }
|
||||
// return $site->toArray();
|
||||
// });
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -36,15 +36,19 @@ class CoreFileService extends BaseCoreService
|
||||
*/
|
||||
protected $upload_driver;
|
||||
protected static $storage_type;
|
||||
|
||||
/**
|
||||
* 实例化上传引擎
|
||||
* @param int $site_id
|
||||
* @param bool $is_local
|
||||
* @return FileDriver
|
||||
* @return UploadLoader
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function driver(int $site_id, bool $is_local = false){
|
||||
if($is_local){
|
||||
self::$storage_type = FileDict::LOCAL;
|
||||
public function driver(int $site_id, string $storage_type = ''){
|
||||
if(!empty($storage_type)){
|
||||
self::$storage_type = $storage_type;
|
||||
$core_storage_service = new CoreStorageService();
|
||||
$storage_config = $core_storage_service->getStorageByType($site_id, $storage_type);
|
||||
}else{
|
||||
$core_storage_service = new CoreStorageService();
|
||||
$storage_config = $core_storage_service->getDefaultStorage($this->request->defaultSiteId());
|
||||
|
||||
62
niucloud/app/service/core/upload/CoreImageService.php
Normal file
62
niucloud/app/service/core/upload/CoreImageService.php
Normal file
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud-admin.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\service\core\upload;
|
||||
|
||||
use app\dict\sys\FileDict;
|
||||
use app\dict\sys\StorageDict;
|
||||
use app\service\core\sys\CoreAttachmentService;
|
||||
use core\exception\UploadFileException;
|
||||
|
||||
/**
|
||||
* 图片服务层
|
||||
* Class CoreUploadService
|
||||
* @package app\service\core\file
|
||||
*/
|
||||
class CoreImageService extends CoreFileService
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @param int $site_id
|
||||
* @param string $file_path
|
||||
* @param $thumb_type 裁剪的图片规格
|
||||
* @return mixed
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function thumb(int $site_id, string $file_path, $thumb_type = 'all')
|
||||
{
|
||||
$file_parse = parse_url($file_path);
|
||||
$file_domain = $file_parse['scheme'] . '://' . $file_parse['host'];
|
||||
//判断是哪个云上传的实例
|
||||
$storage_type_list = (new CoreStorageService())->getStorageConfigList();
|
||||
foreach($storage_type_list as $k => $v){
|
||||
$item_params = $v['params'] ?? [];
|
||||
$item_domain = $item_params['domain'] ?? '';
|
||||
if($item_domain == $file_domain){
|
||||
$this->upload_driver = $this->driver($site_id, $v['storage_type']);
|
||||
}
|
||||
}
|
||||
//没有云上传就用本地上传
|
||||
if(empty($this->upload_driver)){
|
||||
$this->upload_driver = $this->driver($site_id, StorageDict::LOCAL);
|
||||
}
|
||||
//如果是网络图片,可以将网络图片拉取到本地
|
||||
try {
|
||||
$thumb_list = $this->upload_driver->thumb($file_path, $thumb_type);
|
||||
return $thumb_list;
|
||||
} catch (\Throwable $e) {
|
||||
throw new UploadFileException($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -38,6 +38,23 @@ class CoreStorageService extends BaseCoreService
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过存储方式获取配置
|
||||
* @param int $site_id
|
||||
* @param string $type
|
||||
* @return array|mixed|void
|
||||
*/
|
||||
public function getStorageByType(int $site_id, string $type){
|
||||
$storage_list = $this->getStorageConfigList($site_id);
|
||||
foreach($storage_list as $k => $v){
|
||||
if($k == $type){
|
||||
$item_storage = $v['params'] ?? [];
|
||||
$item_storage['storage_type'] = $v['storage_type'];
|
||||
return $item_storage;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* 获取存储配置
|
||||
* @param $site_id
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
namespace app\service\core\upload;
|
||||
|
||||
use app\dict\sys\FileDict;
|
||||
use app\dict\sys\StorageDict;
|
||||
use app\service\core\sys\CoreAttachmentService;
|
||||
|
||||
/**
|
||||
@ -29,36 +30,33 @@ class CoreUploadService extends CoreFileService
|
||||
|
||||
/**
|
||||
* 图片上传
|
||||
* @param $site_id
|
||||
* @param $cate_id
|
||||
* @param $app_type
|
||||
* @param $file_path
|
||||
* @param string $file
|
||||
* @param int $site_id
|
||||
* @param string $file_dir
|
||||
* @param int $cate_id
|
||||
* @return array
|
||||
*/
|
||||
public function image(string $file, int $site_id, string $file_dir, int $cate_id = 0)
|
||||
{
|
||||
//校验上传设置
|
||||
// $this->checkFile($site_id, $file, FileDict::IMAGE);
|
||||
//实例化上传引擎
|
||||
$this->upload_driver = $this->driver($site_id);
|
||||
//读取上传附件的信息用于后续得校验和数据写入
|
||||
$this->upload_driver->read($file);
|
||||
//生成缩略图....
|
||||
return $this->after($site_id, $file_dir, FileDict::IMAGE, $cate_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 视频上传
|
||||
* @param $file
|
||||
* @param $site_id
|
||||
* @param $cate_id
|
||||
* @param $file_dir
|
||||
* @param string $file
|
||||
* @param int $site_id
|
||||
* @param string $file_dir
|
||||
* @param int $cate_id
|
||||
* @return array
|
||||
*/
|
||||
public function video(string $file, int $site_id, string $file_dir, int $cate_id)
|
||||
{
|
||||
|
||||
//校验上传设置
|
||||
// $this->checkFile($site_id, $file, FileDict::VIDEO);
|
||||
//实例化上传引擎
|
||||
$this->upload_driver = $this->driver($site_id);
|
||||
//读取上传附件的信息用于后续得校验和数据写入
|
||||
@ -77,13 +75,10 @@ class CoreUploadService extends CoreFileService
|
||||
* @param bool $is_rename 是否重命名
|
||||
* @return array
|
||||
*/
|
||||
public function document(string $file, int $site_id, string $type, string $file_dir, bool $is_local = false, bool $is_rename = true)
|
||||
public function document(string $file, int $site_id, string $type, string $file_dir, bool $storage_type, bool $is_rename = true)
|
||||
{
|
||||
//校验上传设置(todo 文件暂时不校验,后补安全性校验)
|
||||
// $this->checkFile($site_id, $file, $type ?: FileDict::DOCUMENT);
|
||||
|
||||
//实例化上传引擎
|
||||
$this->upload_driver = $this->driver($site_id, $is_local);
|
||||
$this->upload_driver = $this->driver($site_id, $storage_type);
|
||||
|
||||
//读取上传附件的信息用于后续得校验和数据写入
|
||||
$this->upload_driver->read($file, $is_rename);
|
||||
|
||||
@ -11,7 +11,7 @@ return [
|
||||
// 多语言自动侦测变量名
|
||||
'detect_var' => 'lang',
|
||||
// 是否使用Cookie记录
|
||||
'use_cookie' => true,
|
||||
'use_cookie' => false,
|
||||
// 多语言cookie变量
|
||||
'cookie_var' => 'lang',
|
||||
// 多语言header变量
|
||||
|
||||
@ -19,7 +19,7 @@ return [
|
||||
'bucket' => ''
|
||||
],
|
||||
//腾讯云
|
||||
'qcloud' => [
|
||||
'tencent' => [
|
||||
'access_key' => '',
|
||||
'secret_key' => '',
|
||||
'region' => '',
|
||||
@ -54,5 +54,23 @@ return [
|
||||
],
|
||||
'size' => 2097152
|
||||
],
|
||||
],
|
||||
'thumb' => [
|
||||
'thumb_type' => [
|
||||
'big' => [
|
||||
'width' => 400,
|
||||
'height' => 400,
|
||||
],
|
||||
'mid' => [
|
||||
'width' => 100,
|
||||
'height' => 100,
|
||||
],
|
||||
'small' => [
|
||||
'width' => 50,
|
||||
'height' => 50,
|
||||
],
|
||||
]
|
||||
|
||||
|
||||
]
|
||||
];
|
||||
|
||||
@ -44,7 +44,7 @@ class Wechatpay extends BasePay
|
||||
* @return mixed|Collection
|
||||
*/
|
||||
public function mp(array $params){
|
||||
return $this->returnFormat(Pay::wechat()->mp([
|
||||
$result = $this->returnFormat(Pay::wechat()->mp([
|
||||
'out_trade_no' => $params['out_trade_no'],
|
||||
'description' => $params['boby'],
|
||||
'amount' => [
|
||||
@ -54,6 +54,10 @@ class Wechatpay extends BasePay
|
||||
'openid' => $params['openid'],
|
||||
],
|
||||
]));
|
||||
$code = $result['code'] ?? 0;
|
||||
if($code == 0) return $result;
|
||||
//支付错误抛出
|
||||
throw new PayException($result['message']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -19,12 +19,12 @@ class Aliyun extends BaseUpload
|
||||
|
||||
public function client(){
|
||||
// true为开启CNAME。CNAME是指将自定义域名绑定到存储空间上。
|
||||
$is_cname = true;
|
||||
// $is_cname = false;
|
||||
$access_key_id = $this->config['access_key'];
|
||||
$access_key_secret = $this->config['secret_key'];
|
||||
|
||||
$endpoint = $this->config['endpoint'];// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
|
||||
$oss_client = new OssClient($access_key_id, $access_key_secret, $endpoint, $is_cname);
|
||||
$oss_client = new OssClient($access_key_id, $access_key_secret, $endpoint);
|
||||
return $oss_client;
|
||||
}
|
||||
|
||||
@ -90,5 +90,20 @@ class Aliyun extends BaseUpload
|
||||
|
||||
}
|
||||
|
||||
public function thumb($file_path, $thumb_type){
|
||||
$thumb_config = config('upload.thumb.thumb_type');
|
||||
$thumb_data = [];
|
||||
foreach($thumb_config as $k => $v){
|
||||
if($thumb_type == 'all' || $thumb_type == $k){
|
||||
$width = $v['width'];
|
||||
$height = $v['height'];
|
||||
//拼装缩略路径
|
||||
$item_thumb = $file_path. '?x-oss-process=image/resize,h_' . $height . ',w_' . $width;
|
||||
$thumb_data[] = $item_thumb;
|
||||
}
|
||||
}
|
||||
|
||||
return $thumb_data;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -62,8 +62,13 @@ abstract class BaseUpload extends Storage
|
||||
*/
|
||||
abstract protected function delete(string $file_name);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 缩略图
|
||||
* @param string $file_path
|
||||
* @param $type
|
||||
* @return mixed
|
||||
*/
|
||||
abstract protected function thumb(string $file_path, $thumb_type);
|
||||
/**
|
||||
* 读取文件
|
||||
* @param $name
|
||||
|
||||
@ -3,12 +3,28 @@ namespace core\upload;
|
||||
|
||||
use core\exception\UploadFileException;
|
||||
use Exception;
|
||||
use Grafika\Grafika;
|
||||
use Intervention\Image\Image;
|
||||
use Symfony\Component\HttpFoundation\File\Exception\UploadException;
|
||||
|
||||
/**
|
||||
* 文件管理驱动类
|
||||
*/
|
||||
class Local extends BaseUpload
|
||||
{
|
||||
//位置
|
||||
private $position = array(
|
||||
0 => 'top-left',
|
||||
1 => 'op-center',
|
||||
2 => 'top-right',
|
||||
3 => 'center-left',
|
||||
4 => 'center',
|
||||
5 => 'center-right',
|
||||
6 => 'bottom-left',
|
||||
7 => 'bottom-center',
|
||||
8 => 'bottom-right',
|
||||
9 => 'smart'
|
||||
);
|
||||
protected function initialize(array $config = [])
|
||||
{
|
||||
parent::initialize($config);
|
||||
@ -77,4 +93,43 @@ class Local extends BaseUpload
|
||||
}
|
||||
return unlink($file_path);
|
||||
}
|
||||
|
||||
/**
|
||||
* 缩略图
|
||||
* @param $file_path
|
||||
* @param array $type
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function thumb($file_path, $thumb_type){
|
||||
//todo 判断缩略图是否存在
|
||||
$thumb_config = config('upload.thumb.thumb_type');
|
||||
// ……
|
||||
//获取文件原名 获取
|
||||
$file_arr = explode(DIRECTORY_SEPARATOR, $file_path);
|
||||
$file_name = end($file_arr);
|
||||
$thumb_list = [];
|
||||
//获取文件后缀
|
||||
foreach($thumb_config as $k => $v){
|
||||
if($thumb_type == 'all' || $thumb_type == $k){
|
||||
$new_thumb_path = str_replace($file_name, $k.'_'.$file_name, $file_path);
|
||||
if(!file_exists($new_thumb_path)){
|
||||
$editor = Grafika::createEditor();
|
||||
$editor->open( $image, $file_path);
|
||||
$new_width = $v['width'];
|
||||
$new_height = $v['height'];
|
||||
$editor->resizeFit( $image, $new_width,$new_height );
|
||||
//新缩略图文件名称
|
||||
$editor->save($image, $new_thumb_path, null, null, false, 0777);
|
||||
}
|
||||
$thumb_list[$k] = $new_thumb_path;
|
||||
}
|
||||
|
||||
}
|
||||
return $thumb_list;
|
||||
}
|
||||
|
||||
public function water(){
|
||||
|
||||
}
|
||||
}
|
||||
@ -84,4 +84,22 @@ class Qiniu extends BaseUpload
|
||||
throw new UploadFileException($err->message());
|
||||
return true;
|
||||
}
|
||||
|
||||
public function thumb($file_path, $thumb_type){
|
||||
// http://examples-1251000004.cos.ap-shanghai.myqcloud.com/sample.jpeg?imageView2/1/w/400/h/600/q/85
|
||||
$thumb_config = config('upload.thumb.thumb_type');
|
||||
$thumb_data = [];
|
||||
foreach($thumb_config as $k => $v){
|
||||
if($thumb_type == 'all' || $thumb_type == $k){
|
||||
// ?x-oss-process=image/resize,m_fill,w_200,h_600,quality,q_60
|
||||
$width = $v['width'];
|
||||
$height = $v['height'];
|
||||
//拼装缩略路径
|
||||
$item_thumb = $file_path.'?imageView2/2/w/' . $width . '/h/' . $height;
|
||||
$thumb_data[] = $item_thumb;
|
||||
}
|
||||
}
|
||||
|
||||
return $thumb_data;
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace core\upload;
|
||||
|
||||
use core\exception\UploadFileException;
|
||||
@ -8,17 +9,19 @@ use Qcloud\Cos\Client;
|
||||
/**
|
||||
* 腾讯云存储引擎 (COS)
|
||||
*/
|
||||
class Qcloud extends BaseUpload
|
||||
class Tencent extends BaseUpload
|
||||
{
|
||||
protected function initialize(array $config = [])
|
||||
{
|
||||
parent::initialize($config);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取服务主体
|
||||
* @return Client
|
||||
*/
|
||||
public function client(){
|
||||
public function client()
|
||||
{
|
||||
$secret_id = $this->config['access_key']; //替换为用户的 secretId,请登录访问管理控制台进行查看和管理,https://console.tencentcloud.com/cam/capi
|
||||
$secret_key = $this->config['secret_key']; //替换为用户的 secretKey,请登录访问管理控制台进行查看和管理,https://console.tencentcloud.com/cam/capi
|
||||
$region = $this->config['region']; //替换为用户的 region,已创建桶归属的region可以在控制台查看,https://console.tencentcloud.com/cos5/bucket
|
||||
@ -99,4 +102,23 @@ class Qcloud extends BaseUpload
|
||||
}
|
||||
}
|
||||
|
||||
public function thumb($file_path, $thumb_type)
|
||||
{
|
||||
//腾讯云缩略图地址
|
||||
|
||||
$thumb_config = config('upload.thumb.thumb_type');
|
||||
$thumb_data = [];
|
||||
foreach($thumb_config as $k => $v){
|
||||
if($thumb_type == 'all' || $thumb_type == $k){
|
||||
// ?x-oss-process=image/resize,m_fill,w_200,h_600,quality,q_60
|
||||
$width = $v['width'];
|
||||
$height = $v['height'];
|
||||
//拼装缩略路径
|
||||
$item_thumb = $file_path.'?imageMogr2/thumbnail/' . $width . 'x' . $height;
|
||||
$thumb_data[] = $item_thumb;
|
||||
}
|
||||
}
|
||||
|
||||
return $thumb_data;
|
||||
}
|
||||
}
|
||||
@ -20,6 +20,7 @@ use core\loader\Loader;
|
||||
* @method string|null upload(string $dir) 附件上传
|
||||
* @method array fetch(string $url, ?string $key) 抓取远程附件
|
||||
* @method mixed delete(string $file_name) 附件删除
|
||||
* @method mixed thumb(string $file_path, $thumb_type) 附件删除
|
||||
*/
|
||||
class UploadLoader extends Loader
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user