文件

567 行
19 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
/**
* Created by PhpStorm.
* User: yang
* Date: 2021/3/23
* Time: 14:48
*/
namespace Blessing\Business;
use Blessing\Model\BlessingModel;
use Common\Business\Plug;
vendor('qiniu_sdk.autoload');
vendor('Tencent.vendor.autoload');
vendor('OSS.autoload');
use Qiniu\Auth;
use Qiniu\Config;
use Qiniu\Storage\UploadManager;
use Qiniu\Storage\BucketManager;
use Qcloud\Cos\Client;
use OSS\OssClient;
use OSS\Core\OssException;
use Super\Business\PlugSet;
class Index{
//验证参数
public function validationParameters($param,$post){
foreach ($param as $value){
$isData = array_key_exists($value,$post);
if($isData === false){
$message = "缺少参数 '".$value."'";
$res = callBack(statusCode()['error'],$message);
return $res;
}
}
return true;
}
//提取码生成(判重)
public function extractionCode($storeId){
$plugBlessingModel = new BlessingModel();
do{
$data = $this->getRand();
$where = [
'store_id'=>$storeId,
'extraction_code'=>$data,
];
$field = [
'extraction_code'
];
$dataOne = $plugBlessingModel->getFind($where,$field);
}while(count($dataOne) >= 1);
return $data;
}
//随机提取码
public function getRand($length = 8){
// 密码字符集,可任意添加你需要的字符:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
$chars = '0123456789';
$str = "";
for ( $i = 0; $i < $length; $i++ )
{
$str .= $chars[ mt_rand(0, strlen($chars) - 1) ];
}
return $str ;
}
/**
* 判断门店插件是否有权限
* @param $param
* [
* store_id
* identification
* ]
* @return mixed
*/
public function storeBlessingPlug($param){
$plugClass = new Plug();
$plug_info = $plugClass->plugStore([
'store_id' => $param['store_id'],
'identification_arr' => [
$param['identification']//插件唯一标识符
]
]);
if ($plug_info === false) {
return callBack(statusCode()['error'], "暂无插件权限");
}else{
return callBack(statusCode()['success'], "成功");
}
}
/**
* 判断门店是否开启插件权限
* @param $param
* [
* store_id
* identification
* ]
* @return mixed
*/
public function storePlugStatus($param){
$plugClass = new Plug();
$plug_info = $plugClass->plugStoreStatus([
'store_id' => $param['store_id'],
'identification_arr' => [
$param['identification']//插件唯一标识符
]
]);
if ($plug_info === false) {
return callBack(statusCode()['error'], "暂无插件权限");
}else{
return callBack(statusCode()['success'], "成功");
}
}
/**
* 判断商户插件是否有权限
* @param $param
* [
* merchant_id
* identification
* ]
* @return mixed
*/
public function merchantIdBlessingPlug($param){
$plugClass = new Plug();
$plug_info = $plugClass->PlugPermissions([
'merchant_id' => $param['merchant_id'],
'identification_arr' => [
$param['identification']//插件唯一标识符
]
]);
if (empty($plug_info['data']['plug']['blessing'])) {
return callBack(statusCode()['error'], "暂无插件权限");
}else{
return callBack(statusCode()['success'], "成功");
}
}
/**
* 音视频上传:MP3、MP4
* @param $param
* [
* storage_type 1本地,2七牛云,3腾讯云,4阿里云
* limit_size 大小:B
* catalog 子目录地址
* ]
* @return mixed
*/
public function videoUpload($param){
//判断存储模式:storage_type:1本地,2七牛云,3腾讯云,4阿里云
if (empty($param['storage_type'])) {
$admin = M('retail_admin')->order('id asc')->find();
} else {
$admin['storage_type'] = $param['storage_type'];
}
//文件子目录$param['catalog']
switch ($admin['storage_type']) {
case 1:
$param['storage_type'] = 1;
if (isset($param['limit_size']) && $param['limit_size'] !== '' && $param['limit_size'] > 0) {
$uploads = $this->localVideoUpload($param,$param['limit_size']);
} else {
$uploads = $this->localVideoUpload($param);
}
break;
case 2:
case 3:
case 4:
$uploads = $this->externalVideoUpload($param, $admin['storage_type']);
break;
default:
$uploads = callBack(statusCode()['error'],'参数有误');
break;
}
return $uploads;
}
//本地上传(默认 10M)
//视频:Mp4,mp4,avi,rm ,rmvb ,flv ,mpg ,mov,mkv .音频:mp3,MP3,m4a,wma,
public function localVideoUpload($param,$limit_size = '10'){
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = $limit_size*1024*1024 ;// 设置附件上传大小,单位:B
$upload->exts = array('MP4','MP3','mp4','mp3','m4a','wma','avi','rm','rmvb','flv','mpg','mov','mkv');// 设置附件上传类型
$upload->rootPath = './Uploads/'; // 设置附件上传根目录
$upload->savePath = $param['catalog'].'/'; // 设置附件上传(子)目录'blessing/'
// 上传文件
$info = $upload->upload();
if(!$info) {// 上传错误提示错误信息
// $this->error($upload->getError());
$res = callBack(statusCode()['error'],$upload->getError());
return $res;
}else{// 上传成功
// $this->success('上传成功!');
// $name = 'Uploads/'.$info['file']['savepath'].$info['file']['savename'];//文件路径
$info['file']['storage_type'] = '1';
$entrance_style = getServerUrl();
$info['file']['path_name'] = 'Uploads/'.$info['file']['savepath'].$info['file']['savename'];
$info['file']['access_path'] = $entrance_style.'/Uploads/'.$info['file']['savepath'].$info['file']['savename'];
return $info;
}
/*文件详情
"name": "mmexport1616228590123.mp4",
"type": "video/mp4",
"size": 702380,
"key": "file",
"ext": "mp4",
"md5": "08c781edd4b471f1a5cf5c475a2e1187",
"sha1": "28280d02d78c03f2b253478808084a89dba0c560",
"savename": "605edeeb997075724.mp4",
"savepath": "blessing/mp4/2021-03-27/"
*/
}
//外部上传
public function externalVideoUpload($param, $storage_type){
$config = M('upload_config')->where(array('id' => 1))->find();
if (empty($config)) {
$arr = callBack(statusCode()['error'],'未配置外部存储参数');
return $arr;
}
if (!empty($config)) {
$arr = array();
foreach ($_FILES as $key => $value) {
if ($value['error'] == 0) {
if (isset($param['limit_size']) && $param['limit_size'] !== '' && $param['limit_size'] > 0) {
// 大小需要限制
$param['limit_size'] = $param['limit_size']*1024*1024;//单位:B
if (filesize($_FILES[$key]['tmp_name']) > $param['limit_size']) {
$res = callBack(statusCode()['error'],'上传文件大小不符');
return $res;
}
}else{
// 大小需要限制(默认10M)
$param['limit_size'] = 10*1024*1024;//单位:B
if (filesize($_FILES[$key]['tmp_name']) > $param['limit_size']) {
$res = callBack(statusCode()['error'],'上传文件大小不符');
return $res;
}
}
$ext = pathinfo($_FILES[$key]['name']);
//视频:Mp4,mp4,avi,rm ,rmvb ,flv ,mpg ,mov,mkv .音频:mp3,MP3,m4a,wma,
if (in_array($ext['extension'], array('MP4','MP3','mp4','mp3','m4a','wma','avi','rm','rmvb','flv','mpg','mov','mkv'))) {
switch ($storage_type) {
case '2':
//七牛云
$res = toUploadQiNiuYun($_FILES[$key]['tmp_name'], $ext['extension'], $config, $param['catalog']);
break;
case '3':
//腾讯云
$res = uploadFilesToTencent($_FILES[$key]['tmp_name'], $ext['extension'], $config, $param['catalog']);
$res['name'] = $param['catalog'].'/'.$res['name'];
break;
case '4':
//阿里云
$res = uploadFilesToOSS($_FILES[$key]['tmp_name'], $ext['extension'], $config, $param['catalog']);
$res['name'] = $param['catalog'].'/'.$res['name'];
break;
}
if ($res) {
$type = explode('/', $value['type']);
$arr[$key]['savePath'] = $res['path'];
$arr[$key]['path'] = $res['path'];
$arr[$key]['size'] = $value['size'];
$arr[$key]['ext'] = $ext['extension'];
$arr[$key]['type'] = $value['type'];
$arr[$key]['name'] = $value['name'];
$arr[$key]['key'] = $type[0];
$arr[$key]['saveName'] = $res['name'];
$arr[$key]['storage_type'] = $storage_type;
$arr[$key]['original_name'] = $value['name'];
$arr[$key]['access_path'] = $res['path']; //当前能访问的地址
}
}else{
$res = callBack(statusCode()['error'],'上传文件格式错误');
return $res;
}
}
}
return $arr;
} else {
return false;
}
}
/**
* 音视频删除:MP3、MP4
* @param $storage_type 1本地,2七牛云,3腾讯云,4阿里云
* @param $url 目录地址
* @return mixed
*/
public function videoDelete($url,$storage_type){
switch ($storage_type) {
case 1:
$data = $this->localVideoDelete($url);
break;
case 2:
case 3:
case 4:
$data = $this->externalVideoDelete($url,$storage_type);
break;
default:
$data = callBack(statusCode()['error'],'参数有误');
break;
}
return $data;
}
//本地删除(返回true)
public function localVideoDelete($url){
//本地删除
$voiceUrl = $_SERVER['DOCUMENT_ROOT'].'/'.$url;//路径
if(file_exists($voiceUrl)){
//文件存在,删除
unlink($voiceUrl);//删除文件,服务器删除
}
$res = callBack(statusCode()['success'],'成功');
return $res;
}
//外部删除
public function externalVideoDelete($url,$storage_type){
$config = M('upload_config')->where(array('id' => 1))->find();
switch ($storage_type) {
case '2':
//七牛云
$del = $this->delQiNiuFile($url, $config);
if (!$del) {
$res['status'] = 0;
$res['msg'] = '文件已被删除';
} else {
$res['status'] = 1;
$res['msg'] = '删除成功';
}
break;
case '3':
//腾讯云
$del = $this->delTencentFile($url, $config);
if ($del) {
$res['status'] = 1;
$res['msg'] = '删除成功';
} else {
$res['status'] = 0;
$res['msg'] = '删除出错';
}
break;
case '4':
//阿里云
$del = $this->delOSSFile($url, $config);
if ($del) {
$res['status'] = 1;
$res['msg'] = '删除成功';
} else {
$res['status'] = 0;
$res['msg'] = '文件已被删除或检查配置';
}
break;
}
return $res;
}
/**
* 删除七牛云图片
* @param $url
* @param $config
* @return bool
*/
public function delQiNiuFile($url, $config)
{
$auth = new Auth($config['qiniu_access_key'], $config['qiniu_secret_key']);
$Qiniuconfig = new Config();
$bucketManager = new BucketManager($auth, $Qiniuconfig); //每次最多不能超过1000个
$keys[] = $url;
$ops = $bucketManager->buildBatchDelete($config['qiniu_storage_space'], $keys);
list($ret, $err) = $bucketManager->batch($ops);
if ($err) {
return false;
} else {
return true;
}
}
/**
* 删除腾讯云图片
* @param $url
* @param $config
* @return bool
*/
public function delTencentFile($url, $config)
{
$cosClient = new Client(
array(
'region' => $config['tencent_region'],
'schema' => 'https', //协议头部,默认为http
'credentials' => array(
'secretId' => $config['tencent_secret_id'],
'secretKey' => $config['tencent_secret_key']
)
)
);
$delData[]['Key'] = $url;
try {
$result = $cosClient->deleteObjects(array(
'Bucket' => $config['tencent_storage_space'],
'Objects' => $delData
));
return true;
} catch (\Exception $e) {
return false;
}
}
/**
* 删除阿里云OSS图片
* @param $url
* @param $config
* @return bool
*/
public function delOSSFile($url, $config)
{
$objects[] = $url;
try {
$ossClient = new OssClient($config['oss_access_key_id'], $config['oss_access_key_secret'], $config['oss_region']);
$result = $ossClient->deleteObjects($config['oss_storage_space'], $objects);
return true;
} catch (OssException $e) {
return false;
}
}
/**
* 根据订单id获取祝福码
* @param $orderId
* @return bool
*/
public function obtainExtractionCode($orderId){
if($orderId == ''){
return null;
}
$blessingModel = new BlessingModel();
$where = [
'order_id'=>$orderId,
];
$field = [
'extraction_code',
'validity_time'
];
$data = $blessingModel->getFind($where,$field);
if($data){
if(empty($data['validity_time']) || $data['validity_time'] == 1 || $data['validity_time'] > time())
return $data['extraction_code'];
}else{
return null;
}
}
/**
* 获取插件设置
* @param $identification
* @return bool
*/
public function plugSetInfo($identification){
$data['identification'] = $identification;//标识
$PlugSetClass = new PlugSet();
$result = $PlugSetClass->setInfo($data);
if($result){
if($result['status'] == 1){
return $result['data'];
}else{
return null;
}
}
return null;
}
/**
* 修改祝福语记录有效期
* @param $id
* @param $type 1:首次扫码(id = 门店id),2:确认订单(id = 订单id)
* @param $extractionCode = '' 祝福码为空,订单没有祝福语
* @return bool
*/
public function validityTimeSave($id,$type,$extractionCode = ''){
if($id == '' || $type == ''){
return false;
}
$plugBlessingModel = new BlessingModel();
if($type == 2 && $extractionCode == ''){
//确认订单
$where = [
'order_id'=>$id,//订单id
];
$field = [
'extraction_code',//提取码
];
$getFind = $plugBlessingModel->getFind($where,$field);
if($getFind){
//存在,返回祝福码
$extractionCode = $getFind['extraction_code'];
}else{
//不存在,该订单不存在祝福语
return false;
}
}
$identification = 'blessing';//祝福语标识
$set = $this->plugSetInfo($identification);
if($set['duration_type'] == 1){
//永久有效
$save = [
'validity_time'=>1,//1永久有效,有效期:时间戳
];
if($type == 1){
//首次扫码
$where = [
'store_id'=>$id,//门店id
'extraction_code'=>$extractionCode,//祝福码
];
$plugBlessingModel->updateOrder($where,$save);
}else if($type == 2){
//确认订单
$where = [
'order_id'=>$id,//订单id
'extraction_code'=>$extractionCode,//祝福码
];
$plugBlessingModel->updateOrder($where,$save);
}
return $save['validity_time'];
}else if($set['duration_type'] == 2){
//固定时长
$time = time()+($set['duration_time'] * 86400);//固定时长的时间
$save = [
'validity_time'=>$time,//1永久有效,有效期:时间戳
];
if($set['duration_start_type'] == 2 && $type == 1){
//开始计时的时候 1确认收货后 2首次扫码后:首次扫码
$where = [
'store_id'=>$id,//门店id
'extraction_code'=>$extractionCode,//祝福码
];
$plugBlessingModel->updateOrder($where,$save);
}else if($set['duration_start_type'] == 1 && $type == 2){
//开始计时的时候 1确认收货后 2首次扫码后:确认订单
$where = [
'order_id'=>$id,//订单id
'extraction_code'=>$extractionCode,//祝福码
];
$plugBlessingModel->updateOrder($where,$save);
}
return $save['validity_time'];
}else{
return false;
}
}
}