<?php namespace app\api\controller; use app\common\controller\Algorithm; use app\common\controller\Api; use app\common\exception\UploadException; use app\common\library\Upload; use app\common\model\Area; use app\common\model\Version; use fast\Random; use think\Config; use think\Hook; use think\Db; use app\common\model\Attachment; use Qiniu\Auth; /** * 公共接口 */ class Common extends Api { protected $noNeedLogin = ['*']; protected $noNeedRight = '*'; /** * 加载初始化 * * @param string $version 版本号 * @param string $lng 经度 * @param string $lat 纬度 */ public function init() { if ($version = $this->request->request('version')) { $lng = $this->request->request('lng'); $lat = $this->request->request('lat'); //配置信息 $upload = Config::get('upload'); //如果非服务端中转模式需要修改为中转 if ($upload['storage'] != 'local' && isset($upload['uploadmode']) && $upload['uploadmode'] != 'server') { //临时修改上传模式为服务端中转 set_addon_config($upload['storage'], ["uploadmode" => "server"], false); $upload = \app\common\model\Config::upload(); // 上传信息配置后 Hook::listen("upload_config_init", $upload); $upload = Config::set('upload', array_merge(Config::get('upload'), $upload)); } $upload['cdnurl'] = $upload['cdnurl'] ? $upload['cdnurl'] : cdnurl('', true); $upload['uploadurl'] = preg_match("/^((?:[a-z]+:)?\/\/)(.*)/i", $upload['uploadurl']) ? $upload['uploadurl'] : url($upload['storage'] == 'local' ? '/api/common/upload' : $upload['uploadurl'], '', false, true); $content = [ 'citydata' => Area::getCityFromLngLat($lng, $lat), 'versiondata' => Version::check($version), 'uploaddata' => $upload, 'coverdata' => Config::get("cover"), ]; $this->success('', $content); } else { $this->error(__('Invalid parameters')); } } /** * 上传文件-七牛 * * @ApiTitle (上传文件-七牛) * @ApiSummary (测试描述信息) * @ApiMethod (POST) * @ApiParams (name="file", type="file", required=true, description="用户名") */ public function uploadQiniu() { $config = get_addon_config('qiniu'); $file = $this->request->file('file'); if (!$file || !$file->isValid()) { $this->error("请上传有效的文件"); } $fileInfo = $file->getInfo(); $filePath = $file->getRealPath() ?: $file->getPathname(); preg_match('/(\d+)(\w+)/', $config['maxsize'], $matches); $type = strtolower($matches[2]); $typeDict = ['b' => 0, 'k' => 1, 'kb' => 1, 'm' => 2, 'mb' => 2, 'gb' => 3, 'g' => 3]; $size = (int)$config['maxsize'] * pow(1024000, isset($typeDict[$type]) ? $typeDict[$type] : 0); $suffix = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION)); $suffix = $suffix ? $suffix : 'file'; $md5 = md5_file($filePath); $search = ['$(year)', '$(mon)', '$(day)', '$(etag)', '$(ext)']; $replace = [date("Y"), date("m"), date("d"), $md5, '.' . $suffix]; $object = ltrim(str_replace($search, $replace, $config['savekey']), '/'); $mimetypeArr = explode(',', strtolower($config['mimetype'])); $typeArr = explode('/', $fileInfo['type']); //检查文件大小 if (!$file->checkSize($size)) { $this->error("起过最大可上传文件限制"); } //验证文件后缀 if ($config['mimetype'] !== '*' && ( !in_array($suffix, $mimetypeArr) || (stripos($typeArr[0] . '/', $config['mimetype']) !== false && (!in_array($fileInfo['type'], $mimetypeArr) && !in_array($typeArr[0] . '/*', $mimetypeArr))) ) ) { $this->error(__('上传格式限制')); } $savekey = '/' . $object; $uploadDir = substr($savekey, 0, strripos($savekey, '/') + 1); $fileName = substr($savekey, strripos($savekey, '/') + 1); //先上传到本地 $splInfo = $file->move(ROOT_PATH . '/public' . $uploadDir, $fileName); if ($splInfo) { $extparam = $this->request->post(); $filePath = $splInfo->getRealPath() ?: $splInfo->getPathname(); $sha1 = sha1_file($filePath); $imagewidth = $imageheight = 0; if (in_array($suffix, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'swf', 'pdf'])) { $imgInfo = getimagesize($splInfo->getPathname()); $imagewidth = isset($imgInfo[0]) ? $imgInfo[0] : $imagewidth; $imageheight = isset($imgInfo[1]) ? $imgInfo[1] : $imageheight; } $params = array( 'admin_id' => session('admin.id'), 'user_id' => $this->auth->id, 'filesize' => $fileInfo['size'], 'imagewidth' => $imagewidth, 'imageheight' => $imageheight, 'imagetype' => $suffix, 'imageframes' => 0, 'mimetype' => $fileInfo['type'], 'url' => $uploadDir . $splInfo->getSaveName(), 'uploadtime' => time(), 'storage' => 'local', 'sha1' => $sha1, 'extparam' => json_encode($extparam), ); $attachment = Attachment::create(array_filter($params), true); $policy = array( 'saveKey' => ltrim($savekey, '/'), ); $auth = new Auth($config['accessKey'], $config['secretKey']); $token = $auth->uploadToken($config['bucket'], null, $config['expire'], $policy); $multipart = [ ['name' => 'token', 'contents' => $token], [ 'name' => 'file', 'contents' => fopen($filePath, 'r'), 'filename' => $fileName, ] ]; try { $client = new \GuzzleHttp\Client(); $res = $client->request('POST', $config['uploadurl'], [ 'multipart' => $multipart ]); $code = $res->getStatusCode(); //成功不做任何操作 } catch (\GuzzleHttp\Exception\ClientException $e) { $attachment->delete(); unlink($filePath); $this->error("上传失败"); } $url = '/' . $object; //上传成功后将存储变更为qiniu $attachment->storage = 'qiniu'; $attachment->save(); $this->success("上传成功", $url); } else { $this->error('上传失败'); } return; } //清除Sleep表 public function DeleteSllep() { $Arr = Db::name('sleep')->select(); if (!empty($Arr)) { foreach ($Arr as $k => $v) { Db::name('sleep')->where('id', $v['id'])->delete(); } } } //活动定时任务 public function Controb() { Db::name('huodong_money')->where('id', 'NEQ', 0)->update( [ 'tixian_money' => 200, 'type' => 0 ] ); } //拉取新订单 public function PullOrder() { $GuanYiCloud = new GuanYiCloud(); //查询所有待发货订单 $OrderInfoArray = Db::name('order')->where('status', 1)->select(); if (!empty($OrderInfoArray)) { foreach ($OrderInfoArray as $k => $v) { $Josn = json_decode($GuanYiCloud->getOrders($v['OrderSn'])); if ($Josn['delivery_state'] == 2) { //已发货 $res = Db::name('order')->where('OrderSn', $v['OrderSn'])->update( [ 'status' => 2, 'ems_order' => $Josn['mail_no'], 'ems_company' => $Josn['express_name'], 'updatetime' => time() ] ); if (!$res) { $this->error('物流信息更新失败,订单编号:' . $v['OrderSn']); } } } } else { $this->success('无更新'); } } public function CurrentInnateEnergyTendency() { $Api = new Algorithm(); //取出风水火能量 $CurrentInnateEnergyTendencyArray = Db::name('sleep')->where('id', 1)->find(); if (empty($CurrentInnateEnergyTendencyArray)) { $this->error('天生能量倾向取出失败', 0); } //$InnateEnergyTendency 定义一维数组 $CurrentInnateEnergyTendency[0] = $CurrentInnateEnergyTendencyArray['current_wind']; $CurrentInnateEnergyTendency[1] = $CurrentInnateEnergyTendencyArray['current_water']; $CurrentInnateEnergyTendency[2] = $CurrentInnateEnergyTendencyArray['current_fire']; //rsort排序 rsort($CurrentInnateEnergyTendency); //判断用户近期能量倾向 $Innate 能量标签 //单一体质:A >=7或B >=7分,且C >=14 //双能体质:A >=7或B >=7分,且C <14 //三能体质:A <7分且B <7分 dump($CurrentInnateEnergyTendency); $A = $CurrentInnateEnergyTendency[0] - $CurrentInnateEnergyTendency[2]; $B = $CurrentInnateEnergyTendency[1] - $CurrentInnateEnergyTendency[2]; $C = $CurrentInnateEnergyTendency[0] - $CurrentInnateEnergyTendency[1]; dump($A); dump($B); dump($C); //出现两个相同分值的特殊情况,判断方法如下: //出现两个相同的最高分值,为“排名1能量+排名2能量 主导” //出现两个相同的最低分值,为“排名1能量 主导” // if ($CurrentInnateEnergyTendency[0] == $CurrentInnateEnergyTendency[1]) { // //两个相同的最高分值,为“排名1能量+排名2能量 主导” // $CurrentInnate = $this->CurrentInnateName($CurrentInnateEnergyTendency[0], $CurrentInnateEnergyTendencyArray) . '+' . $this->CurrentInnateName($CurrentInnateEnergyTendency[1], $CurrentInnateEnergyTendencyArray) . '能主导'; if ($CurrentInnateEnergyTendency[0] == $CurrentInnateEnergyTendency[1] || $CurrentInnateEnergyTendency[1] == $CurrentInnateEnergyTendency[2]) { //出现两个相同分值的特殊情况 if ($CurrentInnateEnergyTendency[0] == $CurrentInnateEnergyTendency[1]) { //出现两个相同的最高分值,为“排名1能量($First)+排名2($Second)能量 主导” $First = $Api->CurrentInnateName2($CurrentInnateEnergyTendency[0], $CurrentInnateEnergyTendencyArray, 0, ''); $Second = $Api->CurrentInnateName2($CurrentInnateEnergyTendency[1], $CurrentInnateEnergyTendencyArray, 1, $First); $CurrentInnate = $First . '+' . $Second . '能主导'; } if ($CurrentInnateEnergyTendency[1] == $CurrentInnateEnergyTendency[2]) { //出现两个相同的最低分值,为“排名1能量 主导” $First = $Api->CurrentInnateName2($CurrentInnateEnergyTendency[0], $CurrentInnateEnergyTendencyArray, 0, ''); $CurrentInnate = $First . '能主导'; } } elseif (($A >= 7 && $C >= 14) || ($B >= 7 && $C >= 14)) { //两个相同的最低分值,为“排名1能量 主导” $CurrentInnate = $Api->CurrentInnateName($CurrentInnateEnergyTendency[0], $CurrentInnateEnergyTendencyArray) . '能主导'; } elseif (($A >= 7 && $C < 14) || ($B >= 7 && $C < 14)) { //双能体质 $CurrentInnate = $Api->CurrentInnateName($CurrentInnateEnergyTendency[0], $CurrentInnateEnergyTendencyArray) . '+' . $Api->CurrentInnateName($CurrentInnateEnergyTendency[1], $CurrentInnateEnergyTendencyArray) . '能主导'; } elseif ($CurrentInnateEnergyTendency[0] < 7 && $CurrentInnateEnergyTendency[1] < 7) { //三能体质 $CurrentInnate = '三能量平衡'; } if (empty($CurrentInnate) || $CurrentInnate == '' || $CurrentInnate == "" || $CurrentInnate == null) { $this->error('天生能量倾向获取失败', 0); } dump($CurrentInnate); } }