| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 | <?php/** * Created by PhpStorm. * User:  NODELOG * Date: 2017/4/14 * Time: 下午10:49 */namespace api\modules\v1\controllers;use api\common\controllers\Controller;use api\modules\v1\models\Category;use api\modules\v1\models\Team;use api\modules\v1\models\TeamMember;use common\enums\CodeEnum;use common\helpers\Regexp;use common\helpers\Util;use common\models\Article;use common\models\Page;use common\modules\attachment\components\UploadedFile;use common\modules\attachment\models\Attachment;use common\modules\config\models\Config;use PhpOffice\PhpSpreadsheet\Cell\Coordinate;use PhpOffice\PhpSpreadsheet\IOFactory;use Yii;use yii\captcha\Captcha;use yii\helpers\ArrayHelper;use yii\helpers\StringHelper;use yii\web\Response;class CommonController extends Controller{    /**     * 单页内容     * @return array     */    public function actionPage()    {        $slug = request('slug');        if (!$slug) {            return ['errcode' => CodeEnum::CODE_ERROR, 'errmsg' => '页面未找到'];        }        $page = Page::findOne(['slug' => $slug]);        if (empty($page)) {            return ['errcode' => CodeEnum::CODE_ERROR, 'errmsg' => '页面未找到'];        }        return ['data' => $page];    }    /**     * @return array     * @api {get} /v1/common/configs 平台配置     * @apiGroup 通用接口     * @apiVersion 1.0.0     *     * @apiSuccess {Number} errcode    状态码,0:请求成功     * @apiSuccess {String} errmsg   提示信息     * @apiSuccess {Object} data    配置信息     *     * @apiError {Number} errcode    状态码,500:请求失败     * @apiError {String} errmsg   提示信息     *     * @apiSuccessExample {json} 成功响应:     * {"errcode":0,"errmsg":"ok","data":{}}     *     * @apiErrorExample {json} 失败响应:     * {"errcode":500,"errmsg":"请求失败"}     *     * @author nodelog     */    public function actionConfig()    {        $config = ArrayHelper::map(Config::find()->where(['group' => ['site', 'mobile', 'pc']])->select(['name', 'value'])->all(), 'name', 'value');        //自动判断数组        $config['hot_search'] = Yii::$app->config->get('hot_search');        return ['data' => $config];    }    /**     * @return array     * @throws \yii\db\Exception     * @api {post} /v1/common/upload 上传文件     * @apiGroup 通用接口     * @apiVersion 1.0.0     *     * @apiHeader {String} Content-Type 内容类型.     * @apiHeader {String} accept 传输方式.     * @apiHeaderExample {json} Header-Example:     *     {     *       "Content-Type": "multipart/form-data",     *       'accept': 'application/json',     *     }     *     * @apiParam  {String} file 上传文件表单名     *     * @apiSuccess {Number} errcode    状态码,0:请求成功     * @apiSuccess {String} errmsg   提示信息     * @apiSuccess {Object} data    服务器上文件信息     *     * @apiError {Number} errcode    状态码,500:请求失败     * @apiError {String} errmsg   提示信息     *     * @apiSuccessExample {json} 成功响应:     * {"errcode":0,"errmsg":"ok","data":{}}     *     * @apiErrorExample {json} 失败响应:     * {"errcode":500,"errmsg":"请求失败"}     *     * @author nodelog     */    public function actionUpload()    {        $transaction = Yii::$app->db->beginTransaction();        try {            $files = UploadedFile::getInstancesByName('file');            $attachment = Attachment::uploadFromPost(date('Ymd'), $files[0]);            $transaction->commit();            return ['data' => $attachment];        } catch (\Exception $e) {            $transaction->rollback();            return ['errcode' => CodeEnum::CODE_ERROR, 'errmsg' => $e->getMessage()];        }    }    /**     * 平台版本号     * @return array|mixed     * @author nodelog     */    public function actionVersion()    {        return ['data' => Yii::$app->config->get('version')];    }    /**     * @return array     * @throws \yii\web\ServerErrorHttpException     * @author nodelog     */    public function actionTest()    {        $list = \common\models\Category::find()->where([])->select('title')->column();        Yii::$app->response->format = Response::FORMAT_JSON;        return ['data' => $list];        //分类        /* @var $cateList \common\models\Category[] */        $cateList = Category::find()->where(['like', 'title', '表%', false])->orderBy(['id' => SORT_ASC])->all();        /* 读取excel */        $fileName = \Yii::getAlias('@storagePath/upload/data.xlsx');//path        $inputFileType = IOFactory::identify($fileName);        $reader = IOFactory::createReader($inputFileType);        $spreadsheet = $reader->load($fileName);        $reader->setReadDataOnly(true); // 设置后无法获取excel中的图片        $worksheetList = $spreadsheet->getAllSheets();        $excelData = [];        foreach ($worksheetList as $index => $worksheet) {            $highestRow = $worksheet->getHighestRow(); // 取得总行数            $highestColumn = $worksheet->getHighestColumn(); // 取得总列数            $highestColumnIndex = Coordinate::columnIndexFromString($highestColumn); // 取得总列数            $category = $cateList[$index];            for ($row = 1; $row <= $highestRow; $row++) {                //一行一条数据                $data = [];                for ($col = 1; $col <= $highestColumnIndex; $col++) {                    $val = (string)$worksheet->getCellByColumnAndRow($col, $row)->getValue();                    //第一行初始化                    if ($row == 1 && $col == 1) {                        $attr = [];                    }                    if ($row == 1) {                        $attr[$col] = $this->getAttrByTitle($val);                    } else {                        if (!$data[$attr[$col]]) {                            $data[$attr[$col]] = $val;                        } else {                            $data[$attr[$col]] = $data[$attr[$col]] . $val;                        }                    }                }                //一行完整数据取完                if ($row != 1) {                    if ($data['sort'] != "") {                        $excelData[] = [                            'sort' => $data['sort'],                            'title' => $data['title'],                            'company' => $data['company'] ? $data['company'] : '',                            'position' => $data['position'] ? $data['position'] : '',                            'chain' => $data['chain'] ? $data['chain'] : '',                            'principal' => $data['principal'] ? $data['principal'] : '',                            'intro' => $data['intro'] ? $data['intro'] : '',                            'description' => $this->generateDesc($data['intro']),                            'city' => $data['city'] ? $data['city'] : '',                            'address' => $data['address'] ? $data['address'] : '',                            'tel' => $data['tel'] ? $data['tel'] : '',                            'category_id' => $category->id,                            'category' => $category->title,                            'module' => $category->module,                        ];                    } else {                        //合并数据                        foreach ($data as $key => $value) {                            $excelData[count($excelData) - 1][$key] .= $value;                        }                    }                }            }        }        Yii::$app->db->createCommand()->batchInsert(Article::tableName(), ['sort', 'title', 'company', 'position', 'chain', 'principal', 'intro', 'description', 'city', 'address', 'tel', 'category_id', 'category', 'module'], $excelData)->execute();        return ['data' => ['count' => count($excelData), 'list' => $excelData]];    }    private function getAttrByTitle($title)    {        switch ($title) {            //基本信息            case '序号':                return 'sort';            case '姓名':            case '名称':            case '基地名称':            case '产业集群':            case '企业名称':            case '商会名称':                return 'title';            case '城市':            case '区域':            case '国内城市分布':            case '常住地':                return 'city';            case '地址':                return 'address';            case '联系方式':            case '商会电话':                return 'tel';            //扩展信息            case '公司':            case '企业':            case '单位':            case '单位名称':                return 'company';            case '职务':                return 'position';            case '专长方向':            case '研究领域':            case '研究方向':            case '简介':            case '基地特色':            case '科室/研究方向':            case '专长方向/荣誉':            case '投资产业领域':            case '主要产品':            case '个人简介':                return 'intro';            case '产业领域':            case '产业类别':            case '产业链':            case '细分方向':            case '细分领域':            case '重点投资行业/研究领域':                return 'chain';            case '负责人':            case '秘书长':            case '法人':                return 'principal';        }    }    // 摘要生成方式    private function generateDesc($intro)    {        if (empty($intro)) {            return '';        }        return StringHelper::truncate(preg_replace('/\s+/', ' ', strip_tags($intro)), 150);    }}
 |