Files
fast_response/front/application/common.php
Your Name dce091da91 t
2025-03-27 07:52:44 +00:00

1382 lines
36 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// 公共助手函数
use app\apidata\Config;
use app\common\model\TabConf;
use app\index\model\OrderGoodsModel;
use Symfony\Component\VarExporter\VarExporter;
use think\Db;
use think\Exception;
use wanghua\general_utility_tools_php\tool\Tools;
if (!function_exists('__')) {
/**
* 获取语言变量值
* @param string $name 语言变量名
* @param array $vars 动态变量值
* @param string $lang 语言
* @return mixed
*/
function __($name, $vars = [], $lang = '')
{
if (is_numeric($name) || !$name) {
return $name;
}
if (!is_array($vars)) {
$vars = func_get_args();
array_shift($vars);
$lang = '';
}
return \think\Lang::get($name, $vars, $lang);
}
}
if (!function_exists('format_bytes')) {
/**
* 将字节转换为可读文本
* @param int $size 大小
* @param string $delimiter 分隔符
* @return string
*/
function format_bytes($size, $delimiter = '')
{
$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
for ($i = 0; $size >= 1024 && $i < 6; $i++) {
$size /= 1024;
}
return round($size, 2) . $delimiter . $units[$i];
}
}
if (!function_exists('datetime')) {
/**
* 将时间戳转换为日期时间
* @param int $time 时间戳
* @param string $format 日期时间格式
* @return string
*/
function datetime($time, $format = 'Y-m-d H:i:s')
{
$time = is_numeric($time) ? $time : strtotime($time);
return date($format, $time);
}
}
if (!function_exists('human_date')) {
/**
* 获取语义化时间
* @param int $time 时间
* @param int $local 本地时间
* @return string
*/
function human_date($time, $local = null)
{
return \fast\Date::human($time, $local);
}
}
if (!function_exists('cdnurl')) {
/**
* 获取上传资源的CDN的地址
* @param string $url 资源相对地址
* @param boolean $domain 是否显示域名 或者直接传入域名
* @return string
*/
function cdnurl($url, $domain = false)
{
$regex = "/^((?:[a-z]+:)?\/\/|data:image\/)(.*)/i";
$url = preg_match($regex, $url) ? $url : \think\Config::get('upload.cdnurl') . $url;
if ($domain && !preg_match($regex, $url)) {
$domain = is_bool($domain) ? request()->domain() : $domain;
$url = $domain . $url;
}
return $url;
}
}
if (!function_exists('is_really_writable')) {
/**
* 判断文件或文件夹是否可写
* @param string $file 文件或目录
* @return bool
*/
function is_really_writable($file)
{
if (DIRECTORY_SEPARATOR === '/') {
return is_writable($file);
}
if (is_dir($file)) {
$file = rtrim($file, '/') . '/' . md5(mt_rand());
if (($fp = @fopen($file, 'ab')) === false) {
return false;
}
fclose($fp);
@chmod($file, 0777);
@unlink($file);
return true;
} elseif (!is_file($file) or ($fp = @fopen($file, 'ab')) === false) {
return false;
}
fclose($fp);
return true;
}
}
if (!function_exists('rmdirs')) {
/**
* 删除文件夹
* @param string $dirname 目录
* @param bool $withself 是否删除自身
* @return boolean
*/
function rmdirs($dirname, $withself = true)
{
if (!is_dir($dirname)) {
return false;
}
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dirname, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($files as $fileinfo) {
$todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
$todo($fileinfo->getRealPath());
}
if ($withself) {
@rmdir($dirname);
}
return true;
}
}
if (!function_exists('copydirs')) {
/**
* 复制文件夹
* @param string $source 源文件夹
* @param string $dest 目标文件夹
*/
function copydirs($source, $dest)
{
if (!is_dir($dest)) {
mkdir($dest, 0755, true);
}
foreach (
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
) as $item
) {
if ($item->isDir()) {
$sontDir = $dest . DS . $iterator->getSubPathName();
if (!is_dir($sontDir)) {
mkdir($sontDir, 0755, true);
}
} else {
copy($item, $dest . DS . $iterator->getSubPathName());
}
}
}
}
if (!function_exists('mb_ucfirst')) {
function mb_ucfirst($string)
{
return mb_strtoupper(mb_substr($string, 0, 1)) . mb_strtolower(mb_substr($string, 1));
}
}
if (!function_exists('addtion')) {
/**
* 附加关联字段数据
* @param array $items 数据列表
* @param mixed $fields 渲染的来源字段
* @return array
*/
function addtion($items, $fields)
{
if (!$items || !$fields) {
return $items;
}
$fieldsArr = [];
if (!is_array($fields)) {
$arr = explode(',', $fields);
foreach ($arr as $k => $v) {
$fieldsArr[$v] = ['field' => $v];
}
} else {
foreach ($fields as $k => $v) {
if (is_array($v)) {
$v['field'] = isset($v['field']) ? $v['field'] : $k;
} else {
$v = ['field' => $v];
}
$fieldsArr[$v['field']] = $v;
}
}
foreach ($fieldsArr as $k => &$v) {
$v = is_array($v) ? $v : ['field' => $v];
$v['display'] = isset($v['display']) ? $v['display'] : str_replace(['_ids', '_id'], ['_names', '_name'], $v['field']);
$v['primary'] = isset($v['primary']) ? $v['primary'] : '';
$v['column'] = isset($v['column']) ? $v['column'] : 'name';
$v['model'] = isset($v['model']) ? $v['model'] : '';
$v['table'] = isset($v['table']) ? $v['table'] : '';
$v['name'] = isset($v['name']) ? $v['name'] : str_replace(['_ids', '_id'], '', $v['field']);
}
unset($v);
$ids = [];
$fields = array_keys($fieldsArr);
foreach ($items as $k => $v) {
foreach ($fields as $m => $n) {
if (isset($v[$n])) {
$ids[$n] = array_merge(isset($ids[$n]) && is_array($ids[$n]) ? $ids[$n] : [], explode(',', $v[$n]));
}
}
}
$result = [];
foreach ($fieldsArr as $k => $v) {
if ($v['model']) {
$model = new $v['model'];
} else {
$model = $v['name'] ? \think\Db::name($v['name']) : \think\Db::table($v['table']);
}
$primary = $v['primary'] ? $v['primary'] : $model->getPk();
$result[$v['field']] = $model->where($primary, 'in', $ids[$v['field']])->column("{$primary},{$v['column']}");
}
foreach ($items as $k => &$v) {
foreach ($fields as $m => $n) {
if (isset($v[$n])) {
$curr = array_flip(explode(',', $v[$n]));
$v[$fieldsArr[$n]['display']] = implode(',', array_intersect_key($result[$n], $curr));
}
}
}
return $items;
}
}
if (!function_exists('var_export_short')) {
/**
* 返回打印数组结构
* @param string $var 数组
* @return string
*/
function var_export_short($var)
{
return VarExporter::export($var);
}
}
if (!function_exists('letter_avatar')) {
/**
* 首字母头像
* @param $text
* @return string
*/
function letter_avatar($text)
{
$total = unpack('L', hash('adler32', $text, true))[1];
$hue = $total % 360;
list($r, $g, $b) = hsv2rgb($hue / 360, 0.3, 0.9);
$bg = "rgb({$r},{$g},{$b})";
$color = "#ffffff";
$first = mb_strtoupper(mb_substr($text, 0, 1));
$src = base64_encode('<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="100" width="100"><rect fill="' . $bg . '" x="0" y="0" width="100" height="100"></rect><text x="50" y="50" font-size="50" text-copy="fast" fill="' . $color . '" text-anchor="middle" text-rights="admin" alignment-baseline="central">' . $first . '</text></svg>');
$value = 'data:image/svg+xml;base64,' . $src;
return $value;
}
}
if (!function_exists('hsv2rgb')) {
function hsv2rgb($h, $s, $v)
{
$r = $g = $b = 0;
$i = floor($h * 6);
$f = $h * 6 - $i;
$p = $v * (1 - $s);
$q = $v * (1 - $f * $s);
$t = $v * (1 - (1 - $f) * $s);
switch ($i % 6) {
case 0:
$r = $v;
$g = $t;
$b = $p;
break;
case 1:
$r = $q;
$g = $v;
$b = $p;
break;
case 2:
$r = $p;
$g = $v;
$b = $t;
break;
case 3:
$r = $p;
$g = $q;
$b = $v;
break;
case 4:
$r = $t;
$g = $p;
$b = $v;
break;
case 5:
$r = $v;
$g = $p;
$b = $q;
break;
}
return [
floor($r * 255),
floor($g * 255),
floor($b * 255)
];
}
}
if (!function_exists('check_nav_active')) {
/**
* 检测会员中心导航是否高亮
*/
function check_nav_active($url, $classname = 'active')
{
$auth = \app\common\library\Auth::instance();
$requestUrl = $auth->getRequestUri();
$url = ltrim($url, '/');
return $requestUrl === str_replace(".", "/", $url) ? $classname : '';
}
}
if (!function_exists('check_cors_request')) {
/**
* 跨域检测
*/
function check_cors_request()
{
if (isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN']) {
$info = parse_url($_SERVER['HTTP_ORIGIN']);
$domainArr = explode(',', config('fastadmin.cors_request_domain'));
$domainArr[] = request()->host(true);
if (in_array("*", $domainArr) || in_array($_SERVER['HTTP_ORIGIN'], $domainArr) || (isset($info['host']) && in_array($info['host'], $domainArr))) {
header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']);
} else {
header('HTTP/1.1 403 Forbidden');
exit;
}
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) {
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
}
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
}
exit;
}
}
}
}
if (!function_exists('xss_clean')) {
/**
* 清理XSS
*/
function xss_clean($content, $is_image = false)
{
return \app\common\library\Security::instance()->xss_clean($content, $is_image);
}
}
if (!function_exists('set_result')) {
/**
* @deprecated 以后的开发中禁止使用
*
*
* desc
* authorwh
* @param int $code
* @param string $message
* @param array $data
* @return array|\think\response\Json
*/
function set_result(int $code, string $message='', $data=[]){
//$data_packet = [
// 'code'=>$code,
// 'msg'=>$message,
// 'data'=>$data,
//];
//return request()->isAjax()?json_encode($data_packet, JSON_UNESCAPED_UNICODE):$data_packet;
return [
'code'=>$code,
'msg'=>$message,
'data'=>$data,
];
}
}
/**
* 注tp5.0不支持大写
* desccdn
* authorwh
* @return string
*/
function __cdn__(){
//这里后续可以扩展到数据配置
return '';
}
if(!function_exists('wxConfDefaultByDomain')){
/**
* description获取公众号配置
* authorwanghua
* @param $key
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
function wxConfDefaultByDomain($field){
$config = config('pay_config.wechat');
$conf = \think\Db::table(\app\common\model\TabConf::$fa_wechat_pay_public_acc_domain)->select();
$arr = \wanghua\general_utility_tools_php\tool\Tools::key_val_arr($conf,'domain','public_acc');
$domain = request()->host();
$pay_firm = isset($arr[$domain])?$arr[$domain]:'';
return isset($config[$pay_firm][$field])?$config[$pay_firm][$field]:'';
}
}
if(!function_exists('wxConfPublicAcc')){
/**
* description获取公众号信息
* authorwanghua
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
function wxConfPublicAcc(){
$config = config('pay_config.wechat');
$conf = \think\Db::table(\app\common\model\TabConf::$fa_wechat_pay_public_acc_domain)->select();
$arr = \wanghua\general_utility_tools_php\tool\Tools::key_val_arr($conf,'domain','public_acc');
$domain = request()->host();
$pay_firm = isset($arr[$domain])?$arr[$domain]:'';
if(empty($config[$pay_firm])) throw new Exception('wx public acc conf error.');
return isset($config[$pay_firm])?$config[$pay_firm]:'';
}
}
if(!function_exists('wxConfOrderPayFirm')){
/**
* description获取订单支付主体对应的公众号信息
* authorwanghua
* @param $key
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
function wxConfOrderPayFirm(){
$config = config('pay_config.wechat');
$pay_firm = 'origin_fruits';
return $config[$pay_firm];
}
}
if(!function_exists('pay_firm')){
/**
* 【当前系统,支付主体要根据域名切换,掌驰和小白菜商城支付域名分别独立】
*
* description支付主体
*
*
* authorwanghua
* @param $key
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
function pay_firm(){
return \app\common\tools\ServerTools::getPayFirmForDomain();
}
}
if(!function_exists('admin_username')) {
/**
* desc管理员账号
* authorwh
* @return mixed
*/
function admin_username()
{
return session('admin.username');
}
}
if(!function_exists('admin_openid')) {
/**
* desc管理员账号
* authorwh
* @return mixed
*/
function admin_openid()
{
return session('admin.openid');
}
}
if(!function_exists('admin_nickname')) {
/**
* desc管理员昵称
* authorwh
* @return mixed
*/
function admin_nickname()
{
return session('admin.nickname');
}
}
if(!function_exists('index_user')) {
/**
* desc用户的微信信息
* authorwh
* @return mixed
*/
function index_user()
{
return session('wx_user_info');
}
}
if(!function_exists('index_user_info')) {
/**
* desc用户表用户信息
* authorwh
* @return mixed
*/
function index_user_info($key = '')
{
$openid = session('wx_user_info.openid');
$info = Db::table(TabConf::$fa_wechatuser)
->where('openid',$openid)
->find();
if($key){
return $info[$key];
}
return $info;
}
}
if(!function_exists('index_user_openid')) {
/**
* desc
* authorwh
* @return mixed
*/
function index_user_openid()
{
return session('wx_user_info.openid');
}
}
if(!function_exists('index_user_unionid')) {
/**
* desc
* authorwh
* @return mixed
*/
function index_user_unionid()
{
return session('wx_user_info.unionid');
}
}
if(!function_exists('index_user_card_phone')) {
/**
* desc会员卡手机号
* authorwh
* @return mixed
*/
function index_user_card_phone()
{
$openid = session('wx_user_info.openid');
$phone = Db::table(TabConf::$fa_platformmembercard)
->where('openid',$openid)
->value('phone');
return $phone;
}
}
if(!function_exists('index_user_nickname')) {
/**
* desc
* authorwh
* @return mixed
*/
function index_user_nickname()
{
return session('wx_user_info.nickname');
}
}
if(!function_exists('index_user_headimg')) {
/**
* desc头像
* authorwh
* @return mixed
*/
function index_user_headimg()
{
return session('wx_user_info.headimgurl');
}
}
if(!function_exists('index_user_member_type')) {
/**
* desc会员类型
* authorwh
* @return mixed
*/
function index_user_member_type()
{
$type = \think\Db::table(\app\common\model\TabConf::$fa_platformmembercard)
->where('openid',session('wx_user_info.openid'))
->cache(3600)
->value('type');
if(empty($type)){
return '普通会员';
}
$arr = [
1=>'省钱宝会员',
2=>'赚钱宝会员',
];
return $arr[$type];
}
}
if(!function_exists('index_user_shop_member_card_balance')) {
/**
* desc店铺会员水果卡余额
* authorwh
* @return mixed
*/
function index_user_shop_member_card_balance()
{
$card = \app\index\model\ShopMemberFruitsCardModel::getCard(session('wx_user_info.openid'));
//$wx_user = \app\index\model\Shop::getWxUserByOpenid(session('wx_user_info.openid'));
return $card['balance'];
}
}
if(!function_exists('index_user_shop_member_card_discount')) {
/**
* desc店铺会员水果卡实际折扣固定折扣-活跃折扣)
* authorwh
* @return mixed
*/
function index_user_shop_member_card_discount()
{
$card = \app\index\model\ShopMemberFruitsCardModel::getCard(session('wx_user_info.openid'));
if(empty($card)){
return 1;//无会员卡,不打折
}
if(empty(1*$card['discount'])){
return 1;
}
$disc = $card['discount']-$card['active_discount'];//折扣过于低视为异常
if($disc < 0.85){
throw new \Exception('该顾客折扣异常');
}
return $disc;
}
}
if(!function_exists('index_user_phone')) {
/**
* desc
* authorwh
* @return mixed
*/
function index_user_phone()
{
return session('wx_user_info.phone');
}
}
/**
* desc目标用户所属分组
* authorwh
*/
function index_user_arm_group(){
return session('wx_user_info.arm_group');
}
/**
* desc实时获取用户身上的积分
* authorwh
* @return float|mixed|string
*/
function index_user_score(){
return \app\index\model\WechatUserModel::getUserScore();
}
/**
* desc实时获取用户身上的水滴
* authorwh
* @return float|mixed|string
*/
function index_user_water(){
return \app\index\model\WechatUserModel::getUserWater();
}
/**
* desc实时获取用户身上的微信拼团收益
* authorwh
* @return float|mixed|string
*/
function index_user_group_buy_earnings(){
return \app\index\model\WechatUserModel::getUserEarnings();
}
/**
* desc统计我的邀请数量
*
* authorwh
* @return int|string
* @throws Exception
*/
function index_user_invite_num(){
//统计我的邀请数量
$invite_num = Db::table(TabConf::$fa_platformmember_invite_relation)
->where('father_openid',index_user_openid())
->count('id');
return $invite_num;
}
/**
* desc获取当前用户用户类型
*
* 商户merchant或者个人(person)
*
* authorwh
* @return float|mixed|string
*/
function index_user_type($openid=''){
return \app\index\model\WechatUserModel::getUserTypeByOpenid($openid?$openid:index_user_openid());
}
/**
* desc根据当前用户类型获取商品售价
*
* 商户 | 普通用户
*
* authorwh
*/
function get_goods_price_by_user_type(array $goods){
$user_type = \app\index\model\WechatUserModel::getUserTypeByOpenid(index_user_openid());
if($user_type == 'merchant'){
return isset($goods['merchant_price'])?$goods['merchant_price']:0;
}
return $goods['sale_price'];
}
if(!function_exists('is_super_admin')) {
/**
* desc是否是超级管理员
* authorwh
* @return mixed
*/
function is_super_admin()
{
$obj = \think\Db::table(\app\common\model\TabConf::$fa_auth_group_access);
$access = $obj
->where('uid',session('admin.id'))
->value('group_id');
return $access==1;
}
}
if(!function_exists('is_login')) {
/**
* desc是否是超级管理员
* authorwh
* @return mixed
*/
function is_login()
{
return !empty(session('wx_user_info'));
}
}
if(!function_exists('get_brand_byid')) {
/**
* desc根据id查询品牌名称
* authorwh
* @param $id
* @return float|mixed|string
*/
function get_brand_byid($id){
return (new \app\admin\model\Brand())->where('id',$id)->cache(3600)->value('name');
}
}
/**
* desc实时统计销量
* authorwh
*/
function count_sale_num($goods_id){
return (new \app\admin\model\Settle())->where('goods_id',$goods_id)->cache(3600)->count('id');
}
/**
* desc规格
* authorwh
* @param $id
* @return float|mixed|string
*/
function get_specification_name($id){
return (new \app\admin\model\Specification())->where('id',$id)->cache(3600)->value('name');
}
/**
* desc平台范围名称
* authorwh
* @param int $id
* @return array|bool|PDOStatement|string|\think\Model|null
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
function get_scope_name_by_id(int $id){
return \app\index\model\PlatformscopeModel::getNameById($id);
}
/**
* desc验证优惠券用户归属
*
* true 属于当前用户
*
* false 不属于
*
* authorwh
*/
function check_coupon_user_affiliation($coupon_openid=''){
return $coupon_openid&&index_user_openid()==$coupon_openid;//优惠券目标用户openid和当前登录用户openid比较
}
/**
* desc验证优惠券用户分组归属
*
* true 属于当前用户分组
*
* false 不属于
*
* authorwh
* @param string $coupon_arm_group
* @return bool
*/
function check_coupon_user_group_affiliation($coupon_arm_group=''){
return $coupon_arm_group&&in_array(index_user_arm_group(),explode(',',$coupon_arm_group));
}
/**
* desc根据配送范围id获取名称
* authorwh
* @param int $id
* @return float|mixed|string
*/
function get_platformscope_name_by_id(int $id){
return \think\Db::table(\app\common\model\TabConf::$fa_platformscope)
->where('id',$id)
->value('name');
}
/**
* desc获取商品预定的商品单位
* authorwh
* @param string $key
* @return string
*/
function get_goods_buy_unit_text(string $key){
//单位:j
$arr = ['jin'=>'斤',
'gen'=>'根',
'liang'=>'两',
'jie'=>'节',
'ge'=>'个'];
return isset($arr[$key])?$arr[$key]:'';
}
/**
* desc获取商品预订单配送状态
* authorwh
* @param $key
* @return string
*/
function get_goods_buy_send_status_text($key){
//配送状态:
$arr = [
'0'=>'待支付',
'1'=>'待配送',
'2'=>'配送中',
'3'=>'已送达'
];
return $arr[$key];
}
/**
* desc订单状态
* authorwh
* @param int $key
* @return string
*/
function get_order_status_text(int $key,string $orderid){
//订单状态:0=待支付,200=支付成功,500=支付失败,600=取消订单
$arr = [
'0'=>'待支付',
'200'=>'支付成功',
'500'=>'支付失败',
'3'=>'已送达'
];
//追加配送状态
//配送状态:new=待接单,sending=已接单,配送中,sended=已送达,error=配送异常,complaint=投诉订单,cancel=取消配送
$order = \app\index\model\OrderSendedModel::getSendOrderByOrderid($orderid);
$status_arr = [
'new'=>'待接单',
'sending'=>'配送中',
'sended'=>'已送达',
'error'=>'配送异常',
'complaint'=>'投诉订单',
'cancel'=>'取消配送'
];
$str = empty($status_arr[$order['status']])?'':','.$status_arr[$order['status']];
return $arr[$key].$str;
}
/**
* desc获取平台配送费
* authorwh
* @return float|mixed|string
*/
function get_platform_ship_fee(){
$fee = Config::sundryConfigVal('platform_ship_fee');
return sprintf('%.2f',$fee);
}
/**
* desc金钱保留2位小数
* authorwh
* @param int $money
* @return string
*/
function money_float_two($money=0){
return sprintf('%.2f',$money);
}
/**
* desc商品封面图片
* authorwh
* @param int $goods_id
* @return float|mixed|string
*/
function get_goods_cover_img(int $goods_id){
return \app\index\model\GoodsModel::getGoodsCoverImg($goods_id);
}
/**
* desc根据订单号查询订单商品
*
* authorwh
* @param array $order
* @return bool|PDOStatement|string|\think\Collection
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
function get_order_goods_by_orderid(array $order){
return OrderGoodsModel::getUserOrderGoodsByOrderid($order['orderid']);
}
/**
* desc获取门店-店铺名称
* authorwh
* @return float|mixed|string
*/
function get_shop_name_origin_fruits_sir(){
return Config::sundryConfigVal('shop_name_origin_fruits_sir');
}
/**
* desc验证是否允许退款
*
* authorwh
* @param $time
* @return bool
*/
function is_can_refund($time){
$dateObj = new \wanghua\general_utility_tools_php\Date();
$store_allow_refund_hours = Config::sundryConfigVal('store_allow_refund_hours');
$now = Tools::get_now_date();
$hours = $dateObj->timeReduceTime($now,$time,'h');
return $hours>$store_allow_refund_hours?false:true;
}
/**
* desc获取公众号名称
*
* authorwh
* @return float|mixed|string
*/
function wechat_public_no_name(){
return Config::sundryConfigVal('wechat_public_no_name');
}
/**
* descn时间以前
* 例如1分钟以前20分钟以前3小时以前1天以前3天以前18天以前1个月以前
*
* $date 2021-02-13 12:33:43
* authorwh
*/
function nTimeBefore($date){
if(empty($date)){
return '';
}
$time = time()-strtotime($date);
//一个月默认30天
$day_time = 86400;
//月
if($time >= 30*$day_time){
return floor($time/30*$day_time).'月以前';
}
//半个月
if($time >= 15*$day_time){
return '半个月以前';
}
//天
if($time >= $day_time){
return floor($time/$day_time).'天以前';
}
$hour_time = 3600;
//小时
if($time >= $hour_time){
return floor($time/$hour_time).'小时以前';
}
$min_hour = 60;
//分钟
if($time >= $min_hour){
return floor($time/$min_hour).'分钟以前';
}
//秒
return (floor($time/$day_time)?:1).'秒以前';
}
/**
* desc随机取一个搜索词
*
* authorwh
*/
function wechat_gtoupbuy_list_search_words(){
$wechat_gtoupbuy_list_search_words = Config::sundryConfigVal('wechat_gtoupbuy_list_search_words');
$arr = explode(',',$wechat_gtoupbuy_list_search_words);
if(empty($arr)){
return '';
}
$len = count($arr);
$mt_rand = mt_rand(0,$len-1);
return $arr[$mt_rand];
}
/**
* desc获取收银台商品单位
*
* authorwh
*/
function get_checkstandgoodsbasicunit_by_id($id){
return Db::table(TabConf::$fa_checkstandgoodsbasicunit)
->cache(true)
->where('id',$id)
->value('name');
}
/**
* desc获取计价方式
*
* authorwh
* @param string $key
* @return string
*/
function get_count_price_method($key=''){
$arr = ['weight'=>'计重','num'=>'计数'];
return empty($arr[$key])?'':$arr[$key];
}
/**
* desc收银台获取商品会员价
*
* authorwh
* @param $goods_id
* @return float|mixed|string
*/
function check_stand_get_goods_member_price($goods_id,$phone){
//是秒杀则返回秒杀价
$goods = Db::table(TabConf::$fa_checkstandgoods)
->where('id',$goods_id)
->find();
$card = Db::table(TabConf::$fa_platformmembercard)
->where('phone',$phone)
->find();
if($goods['is_seckill']=='yes'){
$check_res = \app\index\logic\CheckstandLogic::is_join_seckill($goods,$card);
if($check_res['code'] == 200){
return $goods['seckill_price'];
}
}
return $goods['member_price'];
}
/**
* desc该用户当前商品在商品秒杀活动的周期内是否参与了活动
*
* authorwh
* @param $goods_id 商品ID
* @param $phone 会员手机号
* @return mixed|string
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
function check_stand_is_join_seckill_before($goods_id,$phone){
//是秒杀则返回秒杀价
$goods = Db::table(TabConf::$fa_checkstandgoods)
->where('id',$goods_id)
->find();
$card = Db::table(TabConf::$fa_platformmembercard)
->where('phone',$phone)
->find();
$check_res = \app\index\logic\CheckstandLogic::is_join_seckill($goods,$card);
if($check_res['code'] == 200){
return $goods['seckill_price'];
}
//200 未参与500 已参与
return $check_res['code'] == 200?'no':'yes';
}
/**
* desc订单支付类型
*
* authorwh
* @param $code
* @return string
*/
function order_pay_type($code){
//支付类型:0=微信,1=支付宝,2=现金,3=数字人民币,4=银行卡,5=信用卡
$arr = [
'微信',
'支付宝',
'现金',
'数字人民币',
'银行卡',
'信用卡',
];
return empty($arr[$code])?'':$arr[$code];
}
/**
* desc订单支付状态
*
* authorwh
*/
function get_order_pay_status_txt($code){
//支付状态:new=待支付,success=成功,fail=失败,close=关闭
$arr = [
'new'=>'待支付',
'success'=>'成功',
'fail'=>'失败',
'close'=>'关闭',
];
return empty($arr[$code])?'':$arr[$code];
}
/**
* desc获取小白菜商城微信支付配置
*
* authorwh
*/
function get_origin_fruits_wechat_config(){
$wxconfig = config('app.pay_config.wechat');
$wxconfig = $wxconfig['origin_fruits'];
return $wxconfig;
}
/**
* desc获取爆品联盟微信支付配置
*
* authorwh
*/
function get_boom_union_wechat_config(){
$wxconfig = config('app.pay_config.wechat');
$wxconfig = $wxconfig['boom_union'];
return $wxconfig;
}
/**
* 是否移动端访问访问
*
* @return bool
*/
function is_mobile_client()
{
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
return true;
}
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset($_SERVER['HTTP_VIA'])) {
//找不到为flase,否则为true
return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
}
//判断手机发送的客户端标志
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = [
'nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp',
'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu',
'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi',
'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile','alipay'
];
// 从HTTP_USER_AGENT中查找手机浏览器的关键字
if (preg_match("/(".implode('|', $clientkeywords).")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
return true;
}
}
//协议法,因为有可能不准确,放到最后判断
if (isset($_SERVER['HTTP_ACCEPT'])) {
// 如果只支持wml并且不支持html那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
return true;
}
}
return false;
}
/**
* 判断是否微信内置浏览器访问
* @return bool
*/
function is_wx_client()
{
return strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false;
}
/**
* 判断是否支付宝内置浏览器访问
* @return bool
*/
function is_ali_client()
{
return strpos($_SERVER['HTTP_USER_AGENT'], 'Alipay') !== false;
}
/**
* desc获取爆品联盟微信支付配置
*
* authorwh
*/
function get_wechat_config()
{
$wxconfig = config('pay_config.wechat');
$wx_mini_game_defaul_acc_conf = \wanghua\general_utility_tools_php\SundryConfig::val('wx_mini_game_defaul_acc_conf');
if (empty($wx_mini_game_defaul_acc_conf)) {
throw new \Exception('小游戏默认账户配置错误');
}
$wxconfig = $wxconfig[$wx_mini_game_defaul_acc_conf];
return $wxconfig;
}
function api_user_openid()
{
$openid = session('api_user_info.openid');
$openid2 = input('openid');
if(empty($openid) && empty($openid2)){
throw new \Exception('openid不能为空');
}
return $openid?:$openid2;
}
function api_user_info($field = '')
{
$ticket = input('ticket');
if(empty($ticket)){
throw new \Exception('ticket必须');
}
$api_user_info = Db::table(TabConf::$fa_hdrusersh5)->where('ticket',$ticket)->cache(3600)->find();
if(empty($api_user_info)){
throw new \Exception('请登陆');
}
//验证有效期
if(time() > strtotime($api_user_info['expire_time'])){
throw new \Exception('登录已过期,请重新授权登录');
}
return $field?$api_user_info[$field]:$api_user_info;
}
//听译医生登录
function api_user_info_doctor($field = '')
{
$ticket = input('ticket');
if(empty($ticket)){
throw new \Exception('ticket必须');
}
$api_user_info = Db::table(TabConf::$fa_hdrdoctorusers)->where('ticket',$ticket)->cache(3600)->find();
if(empty($api_user_info)){
throw new \Exception('请登陆');
}
//验证有效期
if(time() > $api_user_info['expires']){
throw new \Exception('登录已过期,请重新授权登录');
}
return $field?$api_user_info[$field]:$api_user_info;
}