1395 lines
46 KiB
PHP
1395 lines
46 KiB
PHP
<?php
|
||
// +----------------------------------------------------------------------
|
||
// | ShopXO 国内领先企业级B2C免费开源电商系统
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Licensed ( https://opensource.org/licenses/mit-license.php )
|
||
// +----------------------------------------------------------------------
|
||
// | Author: Devil
|
||
// +----------------------------------------------------------------------
|
||
namespace app\plugins\wallet\service;
|
||
|
||
use think\facade\Db;
|
||
use app\service\PluginsService;
|
||
use app\service\UserService;
|
||
use app\service\ResourcesService;
|
||
use app\service\PaymentService;
|
||
|
||
/**
|
||
* 基础服务层
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 0.0.1
|
||
* @datetime 2016-12-01T21:51:08+0800
|
||
*/
|
||
class BaseService
|
||
{
|
||
// 基础私有字段
|
||
public static $base_config_private_field = [
|
||
'wallet_edit_money_password',
|
||
];
|
||
|
||
// 基础数据附件字段
|
||
public static $base_config_attachment_field = [
|
||
'default_center_head_bg_images_app',
|
||
];
|
||
|
||
// 类型名称
|
||
public static $business_type_name = 'wallet';
|
||
|
||
/**
|
||
* 基础配置信息保存
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2021-11-18
|
||
* @desc description
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function BaseConfigSave($params = [])
|
||
{
|
||
return PluginsService::PluginsDataSave(['plugins'=>'wallet', 'data'=>$params], self::$base_config_attachment_field);
|
||
}
|
||
|
||
/**
|
||
* 基础配置信息
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2019-12-24
|
||
* @desc description
|
||
* @param [boolean] $is_cache [是否缓存中读取]
|
||
*/
|
||
public static function BaseConfig($is_cache = true)
|
||
{
|
||
$ret = PluginsService::PluginsData('wallet', '', $is_cache);
|
||
if(!empty($ret['data']))
|
||
{
|
||
// 自定义充值赠送
|
||
if(!empty($ret['data']['custom_recharge_give']))
|
||
{
|
||
$ret['data']['custom_recharge_give'] = explode("\n", $ret['data']['custom_recharge_give']);
|
||
}
|
||
|
||
// 充值规则说明
|
||
if(!empty($ret['data']['recharge_desc']))
|
||
{
|
||
$ret['data']['recharge_desc'] = explode("\n", $ret['data']['recharge_desc']);
|
||
}
|
||
|
||
// 会员中心公告
|
||
if(!empty($ret['data']['user_center_notice']))
|
||
{
|
||
$ret['data']['user_center_notice'] = explode("\n", $ret['data']['user_center_notice']);
|
||
}
|
||
|
||
// 充值可选支付方式
|
||
if(!empty($ret['data']['recharge_can_payment']))
|
||
{
|
||
$ret['data']['recharge_can_payment'] = explode(',', $ret['data']['recharge_can_payment']);
|
||
}
|
||
|
||
// 提现类型
|
||
if(isset($ret['data']['cash_type']))
|
||
{
|
||
$ret['data']['cash_type'] = ($ret['data']['cash_type'] == '') ? [] : explode(',', $ret['data']['cash_type']);
|
||
}
|
||
}
|
||
return $ret;
|
||
}
|
||
|
||
/**
|
||
* 后台权限菜单
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2025-11-21
|
||
* @desc description
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function AdminPowerMenu($params = [])
|
||
{
|
||
return [
|
||
[
|
||
'name' => '基础配置编辑',
|
||
'control' => 'admin',
|
||
'action' => 'saveinfo',
|
||
'item' => [
|
||
['name' => '保存', 'action' => 'save'],
|
||
],
|
||
],
|
||
[
|
||
'name' => '钱包管理',
|
||
'control' => 'wallet',
|
||
'action' => 'index',
|
||
'item' => [
|
||
['name' => '详情', 'action' => 'detail'],
|
||
['name' => '钱包编辑页面', 'action' => 'saveinfo'],
|
||
['name' => '钱包余额修改页面', 'action' => 'changeinfo'],
|
||
['name' => '钱包编辑', 'action' => 'save'],
|
||
['name' => '钱包余额修改', 'action' => 'change'],
|
||
],
|
||
],
|
||
[
|
||
'name' => '账户明细',
|
||
'control' => 'walletlog',
|
||
'action' => 'index',
|
||
'item' => [
|
||
['name' => '详情', 'action' => 'detail'],
|
||
['name' => '删除', 'action' => 'delete'],
|
||
],
|
||
],
|
||
[
|
||
'name' => '充值管理',
|
||
'control' => 'recharge',
|
||
'action' => 'index',
|
||
'item' => [
|
||
['name' => '详情', 'action' => 'detail'],
|
||
['name' => '支付', 'action' => 'pay'],
|
||
['name' => '删除', 'action' => 'delete'],
|
||
],
|
||
],
|
||
[
|
||
'name' => '提现管理',
|
||
'control' => 'cash',
|
||
'action' => 'index',
|
||
'item' => [
|
||
['name' => '详情', 'action' => 'detail'],
|
||
['name' => '审核页面', 'action' => 'auditinfo'],
|
||
['name' => '审核', 'action' => 'audit'],
|
||
['name' => '微信转账', 'action' => 'weixinpay'],
|
||
['name' => '支付宝转账', 'action' => 'alipaypay'],
|
||
['name' => '支付刷新', 'action' => 'payrefresh'],
|
||
],
|
||
],
|
||
[
|
||
'name' => '提现支付日志',
|
||
'control' => 'cashpayment',
|
||
'action' => 'index',
|
||
'item' => [
|
||
['name' => '详情', 'action' => 'detail'],
|
||
['name' => '删除', 'action' => 'delete'],
|
||
],
|
||
],
|
||
[
|
||
'name' => '配置信息',
|
||
'control' => 'config',
|
||
'action' => 'index',
|
||
'item' => [
|
||
['name' => '保存', 'action' => 'save'],
|
||
],
|
||
],
|
||
[
|
||
'name' => '转账记录',
|
||
'control' => 'transfer',
|
||
'action' => 'index',
|
||
'item' => [
|
||
['name' => '详情', 'action' => 'detail'],
|
||
],
|
||
],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 后台导航
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2022-12-06
|
||
* @desc description
|
||
*/
|
||
public static function AdminNavMenuList($config = [])
|
||
{
|
||
return [
|
||
[
|
||
'name' => '基础配置',
|
||
'control' => 'admin',
|
||
'action' => 'index',
|
||
],
|
||
[
|
||
'name' => '钱包管理',
|
||
'control' => 'wallet',
|
||
'action' => 'index',
|
||
],
|
||
[
|
||
'name' => '钱包明细',
|
||
'control' => 'walletlog',
|
||
'action' => 'index',
|
||
],
|
||
[
|
||
'name' => '充值记录',
|
||
'control' => 'recharge',
|
||
'action' => 'index',
|
||
],
|
||
[
|
||
'name' => '提现记录',
|
||
'control' => 'cash',
|
||
'action' => 'index',
|
||
],
|
||
[
|
||
'name' => '转账记录',
|
||
'control' => 'transfer',
|
||
'action' => 'index',
|
||
],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 静态数据
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2023-10-27
|
||
* @desc description
|
||
* @param [string] $key [数据key]
|
||
*/
|
||
public static function ConstData($key)
|
||
{
|
||
$data = [
|
||
// 钱包状态
|
||
'wallet_status_list' => [
|
||
0 => ['value' => 0, 'name' => '正常', 'checked' => true],
|
||
1 => ['value' => 1, 'name' => '异常'],
|
||
2 => ['value' => 2, 'name' => '已注销'],
|
||
],
|
||
|
||
// 业务类型
|
||
'business_type_list' => [
|
||
0 => ['value' => 0, 'name' => '系统', 'checked' => true],
|
||
1 => ['value' => 1, 'name' => '充值'],
|
||
2 => ['value' => 2, 'name' => '提现'],
|
||
3 => ['value' => 3, 'name' => '消费'],
|
||
4 => ['value' => 4, 'name' => '转账'],
|
||
],
|
||
|
||
// 金额类型
|
||
'wallet_money_type_list' => [
|
||
0 => ['value' => 0, 'name' => '有效', 'checked' => true],
|
||
1 => ['value' => 1, 'name' => '冻结'],
|
||
2 => ['value' => 2, 'name' => '赠送'],
|
||
],
|
||
|
||
// 钱包操作类型
|
||
'wallet_operate_type_list' => [
|
||
0 => ['value' => 0, 'name' => '减少', 'checked' => true],
|
||
1 => ['value' => 1, 'name' => '增加'],
|
||
],
|
||
|
||
// 充值赠送类型
|
||
'recharge_give_type_list' => [
|
||
0 => ['value' => 0, 'name' => '固定金额', 'checked' => true],
|
||
1 => ['value' => 1, 'name' => '比例'],
|
||
],
|
||
|
||
// 提现类型
|
||
'cash_type_list' => [
|
||
0 => ['value' => 0, 'name' => '其他方式'],
|
||
1 => ['value' => 1, 'name' => '微信'],
|
||
2 => ['value' => 2, 'name' => '支付宝'],
|
||
],
|
||
|
||
// 提现状态
|
||
'cash_status_list' => [
|
||
0 => ['value' => 0, 'name' => '未打款', 'checked' => true],
|
||
1 => ['value' => 1, 'name' => '待收款'],
|
||
2 => ['value' => 2, 'name' => '已打款'],
|
||
3 => ['value' => 3, 'name' => '打款失败'],
|
||
],
|
||
|
||
// 提现支付方式
|
||
'cash_payment_pay_type_list' => [
|
||
0 => ['value' => 0, 'name' => '微信'],
|
||
1 => ['value' => 1, 'name' => '支付宝'],
|
||
],
|
||
|
||
// 提现支付状态
|
||
'cash_payment_status_list' => [
|
||
0 => ['value' => 0, 'name' => '待处理'],
|
||
1 => ['value' => 1, 'name' => '待收款'],
|
||
2 => ['value' => 2, 'name' => '已支付'],
|
||
3 => ['value' => 3, 'name' => '已失败'],
|
||
4 => ['value' => 4, 'name' => '已关闭'],
|
||
],
|
||
|
||
// 充值支付状态
|
||
'recharge_status_list' => [
|
||
0 => ['value' => 0, 'name' => '未支付', 'checked' => true],
|
||
1 => ['value' => 1, 'name' => '已支付'],
|
||
],
|
||
|
||
// 微信提现场景数据
|
||
'weixin_transfer_scene_report_list' => [
|
||
// 现金营销
|
||
'1000' => [
|
||
'name' => '现金营销',
|
||
'data' => [
|
||
[
|
||
'info_type' => '活动名称',
|
||
'info_content' => '新会员有礼',
|
||
],
|
||
[
|
||
'info_type' => '奖励说明',
|
||
'info_content' => '抽奖一等奖',
|
||
],
|
||
],
|
||
],
|
||
|
||
// 行政补贴
|
||
'1002' => [
|
||
'name' => '行政补贴',
|
||
'data' => [
|
||
[
|
||
'info_type' => '补贴类型',
|
||
'info_content' => '购车补贴',
|
||
],
|
||
],
|
||
],
|
||
|
||
// 保险理赔
|
||
'1004' => [
|
||
'name' => '保险理赔',
|
||
'data' => [
|
||
[
|
||
'info_type' => '保险产品备案编号',
|
||
'info_content' => '01212121212',
|
||
],
|
||
[
|
||
'info_type' => '保险名称',
|
||
'info_content' => '意外险',
|
||
],
|
||
[
|
||
'info_type' => '保险操作单号',
|
||
'info_content' => '12121245442',
|
||
],
|
||
],
|
||
],
|
||
|
||
// 佣金报酬
|
||
'1005' => [
|
||
'name' => '佣金报酬',
|
||
'data' => [
|
||
[
|
||
'info_type' => '岗位类型',
|
||
'info_content' => '外卖员',
|
||
],
|
||
[
|
||
'info_type' => '报酬说明',
|
||
'info_content' => '7月份配送费',
|
||
],
|
||
],
|
||
],
|
||
|
||
// 采购货款
|
||
'1009' => [
|
||
'name' => '采购货款',
|
||
'data' => [
|
||
[
|
||
'info_type' => '采购商品名称',
|
||
'info_content' => '戴尔笔记本电脑',
|
||
],
|
||
],
|
||
],
|
||
|
||
// 二手回收
|
||
'1010' => [
|
||
'name' => '二手回收',
|
||
'data' => [
|
||
[
|
||
'info_type' => '回收商品名称',
|
||
'info_content' => '塑料瓶',
|
||
],
|
||
],
|
||
],
|
||
|
||
// 企业赔付
|
||
'1011' => [
|
||
'name' => '企业赔付',
|
||
'data' => [
|
||
[
|
||
'info_type' => '赔付原因',
|
||
'info_content' => '商品质量问题退款',
|
||
],
|
||
],
|
||
],
|
||
|
||
// 公益补助
|
||
'1013' => [
|
||
'name' => '公益补助',
|
||
'data' => [
|
||
[
|
||
'info_type' => '公益活动名称',
|
||
'info_content' => '在民政部的备案名称',
|
||
],
|
||
[
|
||
'info_type' => '公益活动备案编号',
|
||
'info_content' => '在民政部的备案编号',
|
||
],
|
||
],
|
||
],
|
||
],
|
||
];
|
||
return array_key_exists($key, $data) ? $data[$key] : null;
|
||
}
|
||
|
||
/**
|
||
* 默认图片数据
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2023-07-27
|
||
* @desc description
|
||
* @param [array] $config [配置信息]
|
||
*/
|
||
public static function DefaultImagesData($config = [])
|
||
{
|
||
return [
|
||
'default_center_head_bg_images_app' => empty($config['default_center_head_bg_images_app']) ? StaticAttachmentUrl('app/head-bg.png') : $config['default_center_head_bg_images_app'],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 用户可提现类型列表
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2024-09-19
|
||
* @desc description
|
||
* @param [array] $plugins_config [插件配置]
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function UserCashTypeList($plugins_config = [], $params = [])
|
||
{
|
||
$result = [];
|
||
if(!empty($plugins_config['cash_type']))
|
||
{
|
||
$cash_type_list = self::ConstData('cash_type_list');
|
||
foreach($cash_type_list as $v)
|
||
{
|
||
if(in_array($v['value'], $plugins_config['cash_type']))
|
||
{
|
||
// 非web和微信端,不存在用户openid则不能微信提现方式
|
||
if($v['value'] == 1 && empty($params['user_weixin_openid']) && !in_array(APPLICATION_CLIENT_TYPE, ['web', 'weixin']))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
// 加入列表
|
||
$result[] = $v;
|
||
}
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* 用户openid值
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2024-09-19
|
||
* @desc description
|
||
* @param [int] $user_id [用户id]
|
||
*/
|
||
public static function UserWeixinOpenidValue($user_id)
|
||
{
|
||
$result = [
|
||
'value' => '',
|
||
'type' => '',
|
||
];
|
||
$platform = Db::name('UserPlatform')->where(['user_id'=>$user_id])->column('weixin_openid,weixin_web_openid');
|
||
if(!empty($platform))
|
||
{
|
||
foreach($platform as $v)
|
||
{
|
||
if(!empty($v['weixin_openid']))
|
||
{
|
||
$result['value'] = $v['weixin_openid'];
|
||
$result['type'] = 'mini';
|
||
break;
|
||
}
|
||
if(!empty($v['weixin_web_openid']))
|
||
{
|
||
$result['value'] = $v['weixin_web_openid'];
|
||
$result['type'] = 'web';
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* 钱包列表
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @datetime 2019-04-30T00:13:14+0800
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function WalletList($params = [])
|
||
{
|
||
$where = empty($params['where']) ? [] : $params['where'];
|
||
$m = isset($params['m']) ? intval($params['m']) : 0;
|
||
$n = isset($params['n']) ? intval($params['n']) : 10;
|
||
$field = empty($params['field']) ? '*' : $params['field'];
|
||
$order_by = empty($params['order_by']) ? 'id desc' : $params['order_by'];
|
||
|
||
// 获取数据列表
|
||
$data = self::WalletListHandle(Db::name('PluginsWallet')->field($field)->where($where)->limit($m, $n)->order($order_by)->select()->toArray());
|
||
return DataReturn(MyLang('handle_success'), 0, $data);
|
||
}
|
||
|
||
/**
|
||
* 钱包列表数据处理
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2023-06-28
|
||
* @desc description
|
||
* @param [array] $data [数据列表]
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function WalletListHandle($data, $params = [])
|
||
{
|
||
if(!empty($data))
|
||
{
|
||
$wallet_status_list = self::ConstData('wallet_status_list');
|
||
foreach($data as &$v)
|
||
{
|
||
// 用户信息
|
||
$v['user'] = UserService::GetUserViewInfo($v['user_id']);
|
||
|
||
// 状态
|
||
$v['status_name'] = (isset($v['status']) && isset($wallet_status_list[$v['status']])) ? $wallet_status_list[$v['status']]['name'] : '未知';
|
||
|
||
// 时间
|
||
$v['add_time'] = empty($v['add_time']) ? '' : date('Y-m-d H:i:s', $v['add_time']);
|
||
$v['upd_time'] = empty($v['upd_time']) ? '' : date('Y-m-d H:i:s', $v['upd_time']);
|
||
}
|
||
}
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 钱包总数
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2018-09-29
|
||
* @desc description
|
||
* @param [array] $where [条件]
|
||
*/
|
||
public static function WalletTotal($where = [])
|
||
{
|
||
return (int) Db::name('PluginsWallet')->where($where)->count();
|
||
}
|
||
|
||
/**
|
||
* 钱包条件
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2018-09-29
|
||
* @desc description
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function WalletWhere($params = [])
|
||
{
|
||
$where = [];
|
||
|
||
// 用户
|
||
if(!empty($params['keywords']))
|
||
{
|
||
$user_ids = Db::name('User')->where('number_code|username|nickname|mobile|email', '=', $params['keywords'])->column('id');
|
||
if(!empty($user_ids))
|
||
{
|
||
$where[] = ['user_id', 'in', $user_ids];
|
||
} else {
|
||
// 无数据条件,避免用户搜索条件没有数据造成的错觉
|
||
$where[] = ['id', '=', 0];
|
||
}
|
||
}
|
||
|
||
// 状态
|
||
if(isset($params['status']) && $params['status'] > -1)
|
||
{
|
||
$where[] = ['status', '=', $params['status']];
|
||
}
|
||
|
||
return $where;
|
||
}
|
||
|
||
/**
|
||
* 充值列表
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @datetime 2019-04-30T00:13:14+0800
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function RechargeList($params = [])
|
||
{
|
||
$where = empty($params['where']) ? [] : $params['where'];
|
||
$m = isset($params['m']) ? intval($params['m']) : 0;
|
||
$n = isset($params['n']) ? intval($params['n']) : 10;
|
||
$field = empty($params['field']) ? '*' : $params['field'];
|
||
$order_by = empty($params['order_by']) ? 'id desc' : $params['order_by'];
|
||
|
||
// 获取数据列表
|
||
$data = self::RechargeListHandle(Db::name('PluginsWalletRecharge')->field($field)->where($where)->limit($m, $n)->order($order_by)->select()->toArray());
|
||
return DataReturn(MyLang('handle_success'), 0, $data);
|
||
}
|
||
|
||
/**
|
||
* 充值列表数据处理
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2023-06-28
|
||
* @desc description
|
||
* @param [array] $data [数据列表]
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function RechargeListHandle($data, $params = [])
|
||
{
|
||
if(!empty($data))
|
||
{
|
||
$user_type = isset($params['user_type']) ? $params['user_type'] : 'user';
|
||
$common_gender_list = MyConst('common_gender_list');
|
||
$recharge_status_list = self::ConstData('recharge_status_list');
|
||
foreach($data as &$v)
|
||
{
|
||
// 用户信息
|
||
$v['user'] = ($user_type == 'user') ? null : UserService::GetUserViewInfo($v['user_id']);
|
||
|
||
// 支付状态
|
||
$v['status_name'] = isset($v['status']) ? $recharge_status_list[$v['status']]['name'] : '';
|
||
|
||
// 支付时间
|
||
$v['pay_time'] = empty($v['pay_time']) ? '' : date('Y-m-d H:i:s', $v['pay_time']);
|
||
|
||
// 创建时间
|
||
$v['add_time'] = empty($v['add_time']) ? '' : date('Y-m-d H:i:s', $v['add_time']);
|
||
}
|
||
}
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 充值列表总数
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2018-09-29
|
||
* @desc description
|
||
* @param [array] $where [条件]
|
||
*/
|
||
public static function RechargeTotal($where = [])
|
||
{
|
||
return (int) Db::name('PluginsWalletRecharge')->where($where)->count();
|
||
}
|
||
|
||
/**
|
||
* 充值列表条件
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2018-09-29
|
||
* @desc description
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function RechargeWhere($params = [])
|
||
{
|
||
$where = [];
|
||
|
||
// 用户id
|
||
if(!empty($params['user']))
|
||
{
|
||
$where[] = ['user_id', '=', $params['user']['id']];
|
||
}
|
||
|
||
// 关键字根据用户筛选
|
||
if(!empty($params['keywords']))
|
||
{
|
||
if(empty($params['user']))
|
||
{
|
||
$user_ids = Db::name('User')->where('number_code|username|nickname|mobile|email', '=', $params['keywords'])->column('id');
|
||
if(!empty($user_ids))
|
||
{
|
||
$where[] = ['user_id', 'in', $user_ids];
|
||
} else {
|
||
// 无数据条件,走单号条件
|
||
$where[] = ['recharge_no', '=', $params['keywords']];
|
||
}
|
||
}
|
||
}
|
||
|
||
// id
|
||
if(!empty($params['id']))
|
||
{
|
||
$where[] = ['id', '=', intval($params['id'])];
|
||
}
|
||
// 订单号
|
||
if(!empty($params['orderno']))
|
||
{
|
||
$where[] = ['recharge_no', '=', trim($params['orderno'])];
|
||
}
|
||
|
||
// 状态
|
||
if(isset($params['status']) && $params['status'] > -1)
|
||
{
|
||
$where[] = ['status', '=', $params['status']];
|
||
}
|
||
|
||
return $where;
|
||
}
|
||
|
||
/**
|
||
* 钱包明细列表
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @datetime 2019-04-30T00:13:14+0800
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function WalletLogList($params = [])
|
||
{
|
||
$where = empty($params['where']) ? [] : $params['where'];
|
||
$m = isset($params['m']) ? intval($params['m']) : 0;
|
||
$n = isset($params['n']) ? intval($params['n']) : 10;
|
||
$field = empty($params['field']) ? '*' : $params['field'];
|
||
$order_by = empty($params['order_by']) ? 'id desc' : $params['order_by'];
|
||
|
||
// 获取数据列表
|
||
$data = self::WalletLogListHandle(Db::name('PluginsWalletLog')->field($field)->where($where)->limit($m, $n)->order($order_by)->select()->toArray(), $params);
|
||
return DataReturn(MyLang('handle_success'), 0, $data);
|
||
}
|
||
|
||
/**
|
||
* 钱包明细列表数据处理
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2023-06-28
|
||
* @desc description
|
||
* @param [array] $data [数据列表]
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function WalletLogListHandle($data, $params = [])
|
||
{
|
||
if(!empty($data))
|
||
{
|
||
$is_user = (!isset($params['is_user']) || $params['is_user'] == 1);
|
||
$business_type_list = self::ConstData('business_type_list');
|
||
$wallet_operate_type_list = self::ConstData('wallet_operate_type_list');
|
||
$wallet_money_type_list = self::ConstData('wallet_money_type_list');
|
||
foreach($data as &$v)
|
||
{
|
||
// 用户信息
|
||
if($is_user)
|
||
{
|
||
$v['user'] = UserService::GetUserViewInfo($v['user_id']);
|
||
}
|
||
|
||
// 业务类型
|
||
$v['business_type_name'] = (isset($v['business_type']) && isset($business_type_list[$v['business_type']])) ? $business_type_list[$v['business_type']]['name'] : '未知';
|
||
|
||
// 操作类型
|
||
$v['operation_type_name'] = (isset($v['operation_type']) && isset($wallet_operate_type_list[$v['operation_type']])) ? $wallet_operate_type_list[$v['operation_type']]['name'] : '未知';
|
||
|
||
// 金额类型
|
||
$v['money_type_name'] = (isset($v['money_type']) && isset($wallet_money_type_list[$v['money_type']])) ? $wallet_money_type_list[$v['money_type']]['name'] : '未知';
|
||
|
||
// 操作原因
|
||
$v['msg'] = empty($v['msg']) ? '' : str_replace("\n", '<br />', $v['msg']);
|
||
|
||
// 创建时间
|
||
$v['add_time'] = empty($v['add_time']) ? '' : date('Y-m-d H:i:s', $v['add_time']);
|
||
}
|
||
}
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 钱包明细总数
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2018-09-29
|
||
* @desc description
|
||
* @param [array] $where [条件]
|
||
*/
|
||
public static function WalletLogTotal($where = [])
|
||
{
|
||
return (int) Db::name('PluginsWalletLog')->where($where)->count();
|
||
}
|
||
|
||
/**
|
||
* 钱包明细条件
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2018-09-29
|
||
* @desc description
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function WalletLogWhere($params = [])
|
||
{
|
||
$where = [];
|
||
|
||
// id
|
||
if(!empty($params['id']))
|
||
{
|
||
$where[] = ['id', '=', intval($params['id'])];
|
||
}
|
||
|
||
// 用户id
|
||
if(!empty($params['user']))
|
||
{
|
||
$where[] = ['user_id', '=', $params['user']['id']];
|
||
}
|
||
|
||
// 用户
|
||
if(!empty($params['keywords']))
|
||
{
|
||
$user_ids = Db::name('User')->where('number_code|username|nickname|mobile|email', '=', $params['keywords'])->column('id');
|
||
if(!empty($user_ids))
|
||
{
|
||
$where[] = ['user_id', 'in', $user_ids];
|
||
} else {
|
||
// 无数据条件,避免用户搜索条件没有数据造成的错觉
|
||
$where[] = ['id', '=', 0];
|
||
}
|
||
}
|
||
|
||
// 业务类型
|
||
if(isset($params['business_type']) && $params['business_type'] > -1)
|
||
{
|
||
$where[] = ['business_type', '=', $params['business_type']];
|
||
}
|
||
|
||
// 操作类型
|
||
if(isset($params['operation_type']) && $params['operation_type'] > -1)
|
||
{
|
||
$where[] = ['operation_type', '=', $params['operation_type']];
|
||
}
|
||
|
||
// 金额类型
|
||
if(isset($params['money_type']) && $params['money_type'] > -1)
|
||
{
|
||
$where[] = ['money_type', '=', $params['money_type']];
|
||
}
|
||
|
||
return $where;
|
||
}
|
||
|
||
/**
|
||
* 提现列表
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @datetime 2019-04-30T00:13:14+0800
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function CashList($params = [])
|
||
{
|
||
$where = empty($params['where']) ? [] : $params['where'];
|
||
$m = isset($params['m']) ? intval($params['m']) : 0;
|
||
$n = isset($params['n']) ? intval($params['n']) : 10;
|
||
$field = empty($params['field']) ? '*' : $params['field'];
|
||
$order_by = empty($params['order_by']) ? 'id desc' : $params['order_by'];
|
||
|
||
// 获取数据列表
|
||
$data = self::CashListHandle(Db::name('PluginsWalletCash')->field($field)->where($where)->limit($m, $n)->order($order_by)->select()->toArray());
|
||
return DataReturn(MyLang('handle_success'), 0, $data);
|
||
}
|
||
|
||
/**
|
||
* 钱包明细列表数据处理
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2023-06-28
|
||
* @desc description
|
||
* @param [array] $data [数据列表]
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function CashListHandle($data, $params = [])
|
||
{
|
||
if(!empty($data))
|
||
{
|
||
$common_gender_list = MyConst('common_gender_list');
|
||
$cash_status_list = self::ConstData('cash_status_list');
|
||
$cash_type_list = self::ConstData('cash_type_list');
|
||
foreach($data as &$v)
|
||
{
|
||
// 用户信息
|
||
$v['user'] = UserService::GetUserViewInfo($v['user_id']);
|
||
|
||
// 提现状态
|
||
$v['status_name'] = isset($v['status']) ? $cash_status_list[$v['status']]['name'] : '';
|
||
|
||
// 提现方式
|
||
$v['cash_type_name'] = isset($v['cash_type']) ? $cash_type_list[$v['cash_type']]['name'] : '';
|
||
|
||
// 备注
|
||
$v['msg'] = empty($v['msg']) ? '' : str_replace("\n", '<br />', $v['msg']);
|
||
|
||
// 手续费
|
||
if($v['commission'] <= 0)
|
||
{
|
||
$v['commission'] = '';
|
||
}
|
||
|
||
// 打款金额
|
||
if($v['pay_money'] <= 0)
|
||
{
|
||
$v['pay_money'] = '';
|
||
}
|
||
|
||
// 时间
|
||
$v['pay_time'] = empty($v['pay_time']) ? '' : date('Y-m-d H:i:s', $v['pay_time']);
|
||
$v['add_time'] = empty($v['add_time']) ? '' : date('Y-m-d H:i:s', $v['add_time']);
|
||
$v['upd_time'] = empty($v['upd_time']) ? '' : date('Y-m-d H:i:s', $v['upd_time']);
|
||
}
|
||
}
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 提现列表总数
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2018-09-29
|
||
* @desc description
|
||
* @param [array] $where [条件]
|
||
*/
|
||
public static function CashTotal($where = [])
|
||
{
|
||
return (int) Db::name('PluginsWalletCash')->where($where)->count();
|
||
}
|
||
|
||
/**
|
||
* 提现列表条件
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2018-09-29
|
||
* @desc description
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function CashWhere($params = [])
|
||
{
|
||
$where = [];
|
||
|
||
// 用户id
|
||
if(!empty($params['user']))
|
||
{
|
||
$where[] = ['user_id', '=', $params['user']['id']];
|
||
}
|
||
|
||
// id
|
||
if(!empty($params['id']))
|
||
{
|
||
$where[] = ['id', '=', intval($params['id'])];
|
||
}
|
||
// 订单号
|
||
if(!empty($params['orderno']))
|
||
{
|
||
$where[] = ['cash_no', '=', trim($params['orderno'])];
|
||
}
|
||
|
||
// 关键字根据用户筛选
|
||
if(!empty($params['keywords']))
|
||
{
|
||
if(empty($params['user']))
|
||
{
|
||
$user_ids = Db::name('User')->where('number_code|username|nickname|mobile|email', '=', $params['keywords'])->column('id');
|
||
if(!empty($user_ids))
|
||
{
|
||
$where[] = ['user_id', 'in', $user_ids];
|
||
} else {
|
||
// 无数据条件,走单号条件
|
||
$where[] = ['cash_no', '=', $params['keywords']];
|
||
}
|
||
}
|
||
}
|
||
|
||
// 状态
|
||
if(isset($params['status']) && $params['status'] > -1)
|
||
{
|
||
$where[] = ['status', '=', $params['status']];
|
||
}
|
||
|
||
return $where;
|
||
}
|
||
|
||
/**
|
||
* 用户提现审核数据
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2024-05-27
|
||
* @desc description
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function UserCashAuditData($params = [])
|
||
{
|
||
$data = null;
|
||
$id = empty($params['id']) ? (empty($params['value']) ? '' : $params['value']) : $params['id'];
|
||
if(!empty($id))
|
||
{
|
||
$data_params = [
|
||
'm' => 0,
|
||
'n' => 1,
|
||
'where' => [
|
||
'id' => intval($id),
|
||
],
|
||
];
|
||
$ret = BaseService::CashList($data_params);
|
||
if(!empty($ret['data']) && !empty($ret['data'][0]))
|
||
{
|
||
$data = $ret['data'][0];
|
||
// 申请金额
|
||
$data['apply_money'] = $data['money'];
|
||
// 是否存在手续费
|
||
if(isset($data['commission']) && $data['commission'] > 0)
|
||
{
|
||
$data['money'] = PriceNumberFormat($data['money']-$data['commission']);
|
||
}
|
||
}
|
||
}
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 转账列表
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @datetime 2019-04-30T00:13:14+0800
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function TransferList($params = [])
|
||
{
|
||
$where = empty($params['where']) ? [] : $params['where'];
|
||
$m = isset($params['m']) ? intval($params['m']) : 0;
|
||
$n = isset($params['n']) ? intval($params['n']) : 10;
|
||
$field = empty($params['field']) ? '*' : $params['field'];
|
||
$order_by = empty($params['order_by']) ? 'id desc' : $params['order_by'];
|
||
|
||
// 获取数据列表
|
||
$data = self::TransferListHandle(Db::name('PluginsWalletTransfer')->field($field)->where($where)->limit($m, $n)->order($order_by)->select()->toArray());
|
||
return DataReturn(MyLang('handle_success'), 0, $data);
|
||
}
|
||
|
||
/**
|
||
* 钱包明细列表数据处理
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2023-06-28
|
||
* @desc description
|
||
* @param [array] $data [数据列表]
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function TransferListHandle($data, $params = [])
|
||
{
|
||
if(!empty($data))
|
||
{
|
||
$user_ids = array_unique(array_merge(array_filter(array_column($data, 'send_user_id')), array_filter(array_column($data, 'receive_user_id'))));
|
||
$user_data = UserService::GetUserViewInfo($user_ids);
|
||
foreach($data as &$v)
|
||
{
|
||
// 用户信息
|
||
$v['send_user'] = (empty($user_data) || empty($user_data[$v['send_user_id']])) ? null : $user_data[$v['send_user_id']];
|
||
$v['receive_user'] = (empty($user_data) || empty($user_data[$v['receive_user_id']])) ? null : $user_data[$v['receive_user_id']];
|
||
|
||
// 时间
|
||
$v['add_time'] = empty($v['add_time']) ? '' : date('Y-m-d H:i:s', $v['add_time']);
|
||
}
|
||
}
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 转账列表总数
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2018-09-29
|
||
* @desc description
|
||
* @param [array] $where [条件]
|
||
*/
|
||
public static function TransferTotal($where = [])
|
||
{
|
||
return (int) Db::name('PluginsWalletTransfer')->where($where)->count();
|
||
}
|
||
|
||
/**
|
||
* 转账列表条件
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2018-09-29
|
||
* @desc description
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function TransferWhere($params = [])
|
||
{
|
||
$where = [];
|
||
|
||
// 用户id
|
||
if(!empty($params['user']))
|
||
{
|
||
$user_field = empty($params['user_field']) ? 'user_id' : $params['user_field'];
|
||
$where[] = [$user_field, '=', $params['user']['id']];
|
||
}
|
||
|
||
// id
|
||
if(!empty($params['id']))
|
||
{
|
||
$where[] = ['id', '=', intval($params['id'])];
|
||
}
|
||
// 订单号
|
||
if(!empty($params['orderno']))
|
||
{
|
||
$where[] = ['transfer_no', '=', trim($params['orderno'])];
|
||
}
|
||
|
||
// 关键字根据用户筛选
|
||
if(!empty($params['keywords']))
|
||
{
|
||
if(empty($params['user']))
|
||
{
|
||
$user_ids = Db::name('User')->where('number_code|username|nickname|mobile|email', '=', $params['keywords'])->column('id');
|
||
if(!empty($user_ids))
|
||
{
|
||
$where[] = ['user_id', 'in', $user_ids];
|
||
} else {
|
||
// 无数据条件,走单号条件
|
||
$where[] = ['transfer_no', '=', $params['keywords']];
|
||
}
|
||
}
|
||
}
|
||
|
||
return $where;
|
||
}
|
||
|
||
/**
|
||
* 支付方式获取
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2019-12-19
|
||
* @desc description
|
||
* @param [string] $config [插件配置]
|
||
*/
|
||
public static function BuyPaymentList($config = null)
|
||
{
|
||
// 未指定配置则读取
|
||
if($config === null)
|
||
{
|
||
$base = self::BaseConfig();
|
||
$config = $base['data'];
|
||
}
|
||
|
||
// 排除钱包支付并获取当前终端可使用的支付方式
|
||
$not = ['WalletPay'];
|
||
$where = [
|
||
['is_enable', '=', 1],
|
||
['is_open_user', '=', 1],
|
||
['payment', 'not in', $not],
|
||
];
|
||
$data = PaymentService::BuyPaymentList(['where'=>$where]);
|
||
|
||
// 是否存在支付方式限制
|
||
if(!empty($data) && !empty($config['recharge_can_payment']) && is_array($config['recharge_can_payment']))
|
||
{
|
||
foreach($data as $k=>$v)
|
||
{
|
||
if(!in_array($v['payment'], $config['recharge_can_payment']))
|
||
{
|
||
unset($data[$k]);
|
||
}
|
||
}
|
||
}
|
||
|
||
return empty($data) ? [] : array_values($data);
|
||
}
|
||
|
||
/**
|
||
* 钱包余额修改密码
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2020-10-10
|
||
* @desc description
|
||
* @param [string] $password [密码]
|
||
*/
|
||
public static function WalletMoneyEditPassword($password)
|
||
{
|
||
return md5(strrev(md5($password)));
|
||
}
|
||
|
||
/**
|
||
* 用户中心菜单
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2021-10-18
|
||
* @desc description
|
||
* @param [array] $base [配置信息]
|
||
*/
|
||
public static function UserCenterNav($base)
|
||
{
|
||
// 不同平台url
|
||
$url_arr = [];
|
||
if(APPLICATION == 'app')
|
||
{
|
||
$url_arr['wallet'] = '/pages/plugins/wallet/wallet-log/wallet-log';
|
||
$url_arr['recharge'] = '/pages/plugins/wallet/user-recharge/user-recharge';
|
||
$url_arr['cash'] = '/pages/plugins/wallet/user-cash/user-cash';
|
||
$url_arr['transfer'] = '/pages/plugins/wallet/user-transfer/user-transfer';
|
||
} else {
|
||
$url_arr['wallet'] = PluginsHomeUrl('wallet', 'wallet', 'index');
|
||
$url_arr['recharge'] = PluginsHomeUrl('wallet', 'recharge', 'index');
|
||
$url_arr['cash'] = PluginsHomeUrl('wallet', 'cash', 'index');
|
||
$url_arr['transfer'] = PluginsHomeUrl('wallet', 'transfer', 'index');
|
||
}
|
||
|
||
// 导航数据
|
||
$data = [
|
||
[
|
||
'title' => '账户明细',
|
||
'control' => 'wallet',
|
||
'action' => 'index',
|
||
'url' => $url_arr['wallet'],
|
||
],
|
||
];
|
||
// 是否开启充值
|
||
if(isset($base['is_enable_recharge']) && $base['is_enable_recharge'] == 1)
|
||
{
|
||
$data[] = [
|
||
'title' => '充值记录',
|
||
'control' => 'recharge',
|
||
'action' => 'index',
|
||
'url' => $url_arr['recharge'],
|
||
];
|
||
}
|
||
// 是否开启提现
|
||
if(isset($base['is_enable_cash']) && $base['is_enable_cash'] == 1)
|
||
{
|
||
$data[] = [
|
||
'title' => '提现记录',
|
||
'control' => 'cash',
|
||
'action' => 'index',
|
||
'url' => $url_arr['cash'],
|
||
];
|
||
}
|
||
// 是否开启转账
|
||
if(isset($base['is_enable_transfer']) && $base['is_enable_transfer'] == 1)
|
||
{
|
||
$data[] = [
|
||
'title' => '转账记录',
|
||
'control' => 'transfer',
|
||
'action' => 'index',
|
||
'url' => $url_arr['transfer'],
|
||
];
|
||
}
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 充值配置数据
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2023-10-10
|
||
* @desc description
|
||
* @param [array] $config [插件配置]
|
||
*/
|
||
public static function RechargeConfigData($config)
|
||
{
|
||
$preset_data = [];
|
||
if(!empty($config['custom_recharge_give']) && is_array($config['custom_recharge_give']))
|
||
{
|
||
$currency_symbol = ResourcesService::CurrencyDataSymbol(['is_only_currency_default'=>1]);
|
||
foreach($config['custom_recharge_give'] as $v)
|
||
{
|
||
if(!empty($v))
|
||
{
|
||
$temp = explode('+', $v);
|
||
$val = floatval($temp[0]);
|
||
if($val > 0)
|
||
{
|
||
$preset_data[] = [
|
||
'value' => $val,
|
||
'tips' => empty($temp[1]) ? '' : '送'.$currency_symbol.$temp[1],
|
||
];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return [
|
||
'preset_data' => $preset_data,
|
||
'recharge_desc' => empty($config['recharge_desc']) ? null : $config['recharge_desc'],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 用户查询
|
||
* @author Devil
|
||
* @blog http://gong.gg/
|
||
* @version 1.0.0
|
||
* @date 2023-10-23
|
||
* @desc description
|
||
* @param [array] $params [输入参数]
|
||
*/
|
||
public static function UserQuery($params = [])
|
||
{
|
||
// 数据验证
|
||
$p = [
|
||
[
|
||
'checked_type' => 'empty',
|
||
'key_name' => 'keywords',
|
||
'error_msg' => '请输入用户信息',
|
||
],
|
||
[
|
||
'checked_type' => 'empty',
|
||
'key_name' => 'plugins_config',
|
||
'error_msg' => MyLang('plugins_config_error_tips'),
|
||
],
|
||
];
|
||
$ret = ParamsChecked($params, $p);
|
||
if($ret !== true)
|
||
{
|
||
return DataReturn($ret, -1);
|
||
}
|
||
// 是否已开启转账
|
||
if(!isset($params['plugins_config']['is_enable_transfer']) || $params['plugins_config']['is_enable_transfer'] != 1)
|
||
{
|
||
return DataReturn('管理员未开启转账功能', -1);
|
||
}
|
||
|
||
// 查询用户、整数则加上id字段
|
||
$id_field = is_numeric($params['keywords']) ? 'id|' : '';
|
||
$where = [
|
||
[$id_field.'number_code|username|nickname|mobile|email', '=', $params['keywords']],
|
||
['status', '=', 0],
|
||
['is_delete_time', '=', 0],
|
||
['is_logout_time', '=', 0],
|
||
];
|
||
$user = Db::name('User')->where($where)->find();
|
||
if(empty($user))
|
||
{
|
||
return DataReturn('用户不存在', -1);
|
||
}
|
||
// 移除用户敏感数据
|
||
unset($user['mobile'], $user['email']);
|
||
return DataReturn('success', 0, UserService::UserHandle($user));
|
||
}
|
||
}
|
||
?>
|