Pārlūkot izejas kodu

Merge branch 'dev_wf' of wugg/phpstock into version1.5

wufeng 2 gadi atpakaļ
vecāks
revīzija
5806e2f4e1
3 mainītis faili ar 204 papildinājumiem un 2 dzēšanām
  1. 99 0
      app/admin/controller/Report.php
  2. 10 2
      app/admin/route/app.php
  3. 95 0
      app/common.php

+ 99 - 0
app/admin/controller/Report.php

@@ -9,6 +9,105 @@ use think\facade\Validate;
 class Report extends Base
 {
 
+    //产品价格和产品导出
+    public function exportGood()
+    {
+
+        $param = $this->request->only(['date', 'platform_id', 'status'], 'post', 'trim');
+
+        $val = Validate::rule([
+            'date|筛选时间' => 'require|date',
+            'platform_id|筛选平台ID' => 'require|number|gt:0',
+            'status|状态' => 'require|number|between:1,8',
+        ]);
+
+        if (!$val->check($param)) return error_show(1004, $val->getError());
+
+        $where_ladder = [['gl.is_del', '=', 0]];
+        $where_good = [['g.is_del', '=', 0]];
+        if (!empty($param['date'])) {
+            $where_ladder[] = ['gl.addtime', 'between', [$param['date'] . ' 00:00:00', $param['date'] . ' 23:59:59']];
+            $where_good[] = ['g.addtime', 'between', [$param['date'] . ' 00:00:00', $param['date'] . ' 23:59:59']];
+        }
+        if (!empty($param['platform_id'])) {
+            $where_ladder[] = ['gp.platform_code', '=', $param['platform_id']];
+            $where_good[] = ['gp.platform_code', '=', $param['platform_id']];
+        }
+        if (!empty($param['status'])) {
+            $where_ladder[] = ['g.status', '=', $param['status']];
+            $where_good[] = ['g.status', '=', $param['status']];
+        }
+
+        $data = [];
+
+        //产品价格
+        $rs_ladder = Db::name('good_ladder')
+            ->alias('gl')
+            ->field('g.good_name 商品名称,gl.market_price 市场价,gl.origin_rate 税率,g.moq 起订量,gl.sale_price 售价,gl.skuCode 商品编码,gl.cost_fee 工艺费,gl.market_platform 对比平台')
+            ->where($where_ladder)
+            ->leftJoin('good_platform gp', 'gp.skuCode=gl.skuCode AND gp.is_del=0')
+            ->leftJoin('good g', 'g.spuCode=gp.spuCode AND g.is_del=0')
+            ->select()
+            ->toArray();
+
+        if (!empty($rs_ladder)) {
+            $data[] = [
+                'head' => array_keys($rs_ladder[0]),
+                'list' => $rs_ladder,
+                'filename' => '产品价格' . date('YmdHis'),
+            ];
+        }
+
+        //产品
+        $rs_temp_good = Db::name('good')
+            ->alias('g')
+            ->field('"" 一级分类,"" 二级分类, g.cat_id 三级分类,g.good_name 商品名称,g.good_type 商品类型,g.brand_id 商品品牌,\'\' 型号,g.origin_place 产地,g.good_unit 计量单位,g.weight 重量g,\'\' 响应时间,g.lead_time 供货周期,g.good_size 商品尺寸,g.packing_size 装箱尺寸,g.packing_way 包装方式,g.packing_spec 装箱规格,g.packing_list 包装清单,g.delivery_place 发货地,g.delivery_day 物流时间,gp.skuCode 商品编码,g.spuCode')
+            ->where($where_good)
+            ->leftJoin('good_platform gp', 'gp.spuCode=g.spuCode AND gp.is_del=0')
+            ->select()
+            ->toArray();
+
+        $all_good_type = [1 => '定制商品', 2 => '常规商品'];
+        $all_brand = Db::name('brand')->whereIn('id', array_column($rs_temp_good, '商品品牌'))->where('is_del', 0)->column('brand_name', 'id');
+        $all_cat = Db::name('cat')
+            ->alias('c3')
+            ->whereIn('c3.id', array_column($rs_temp_good, '三级分类'))
+            ->where('c3.is_del', 0)
+            ->leftJoin('cat c2', 'c2.id=c3.pid AND c2.is_del=0')
+            ->leftJoin('cat c1', 'c1.id=c2.pid AND c1.is_del=0')
+            ->column('c3.cat_name cat_name_3,c2.cat_name cat_name_2,c1.cat_name cat_name_1', 'c3.id');
+
+        $all_unit = Db::name('unit')->whereIn('id', array_column($rs_temp_good, '计量单位'))->where('is_del', 0)->column('unit', 'id');
+
+        foreach ($rs_temp_good as &$value) {
+            $value['商品品牌'] = isset($all_brand[$value['商品品牌']]) ? $all_brand[$value['商品品牌']] : '';
+            $value['商品类型'] = isset($all_good_type[$value['商品类型']]) ? $all_good_type[$value['商品类型']] : '';
+            $value['一级分类'] = isset($all_cat[$value['三级分类']]['cat_name_1']) ? $all_cat[$value['三级分类']]['cat_name_1'] : '';
+            $value['二级分类'] = isset($all_cat[$value['三级分类']]['cat_name_2']) ? $all_cat[$value['三级分类']]['cat_name_2'] : '';
+            $value['三级分类'] = isset($all_cat[$value['三级分类']]['cat_name_3']) ? $all_cat[$value['三级分类']]['cat_name_3'] : '';
+
+            $temp = explode(',', $value['产地']);
+            $value['产地'] = GetAddr(json_encode(['provice_code' => $temp[0], 'city_code' => $temp[1], 'area_code' => $temp[2]]));
+            $value['计量单位'] = isset($all_unit[$value['计量单位']]) ? $all_unit[$value['计量单位']] : '';
+            $temp_2 = explode(',', $value['发货地']);
+            $value['发货地'] = GetAddr(json_encode(['provice_code' => $temp_2[0], 'city_code' => $temp_2[1], 'area_code' => $temp_2[2]]));
+
+            unset($value['spuCode']);
+        }
+
+        if (!empty($rs_temp_good)) {
+            $data[] = [
+                'head' => array_keys($rs_temp_good[0]),
+                'list' => $rs_temp_good,
+                'filename' => '产品' . date('YmdHis'),
+            ];
+        }
+
+        if (empty($data)) return error_show(1005, '没有可供导出的数据');
+        else excelSaveBatch($data);
+
+    }
+
     //【一、采购日报表】1.咨询单总数
     public function zixunTotal()
     {

+ 10 - 2
app/admin/route/app.php

@@ -472,7 +472,6 @@ Route::rule("projectshareplan","admin/Version/project_plan");
 Route::rule("projectsharecheck","admin/Version/feedCheck");
 Route::rule("plancheck","admin/Version/planCheck");
 
-Route::rule('getdata','admin/Data/index');//数据看板,获取相关统计数据
 Route::rule('orderimport','admin/OrderImport/import');//C端订单导入
 Route::rule('orderimportlist','admin/OrderImport/getImportList');//C端订单列表
 Route::rule('orderimportinfo','admin/OrderImport/getImportInfo');//C端订单详情
@@ -482,8 +481,17 @@ Route::rule('confirmimportdata','admin/OrderImport/confirmImportData');//用户
 Route::rule('relationstockbatch','admin/OrderImport/relationStockBatch');//用户批量关联库存
 Route::rule('delimportorder','admin/OrderImport/delImportData');//删除【待用户确认】的订单
 
+Route::rule('exportgood','admin/Report/exportGood');//报表-产品价格和产品
 Route::rule('reportzixuntotal','admin/Report/zixunTotal');//报表-采购日报表-咨询单总数
 Route::rule('reportpurcheaseordersum','admin/Report/purcheaseOrderSum');//报表-采购日报表-采购订单总金额
 Route::rule('reportconsultbidssum','admin/Report/consultBidsSum');//报表-采购日报表-采购员回复咨询单数
 Route::rule('reportpurcheaseordersumbyuser','admin/Report/purcheaseOrderSumByUser');//报表-采购日报表-采购员订单金额
-Route::rule('reportconsultinfobidssum','admin/Report/consultInfoBidsSum');//报表-咨询单报表-已采反报价信息
+Route::rule('reportconsultinfobidssum','admin/Report/consultInfoBidsSum');//报表-咨询单报表-已采反报价信息
+
+//数据看板
+Route::rule('datatodaysalesvolume','admin/Data/todaySalesVolume');//1.今日销量
+Route::rule('datatodaysaleschampion','admin/Data/todaySalesChampion');//2.今日销冠
+Route::rule('datatodaypurchase','admin/Data/todayPurchase');//3.今日采购
+Route::rule('datatotalzixunpurchease','admin/Data/totalZixunPurchease');//5.竞价单和采购单
+Route::rule('datawaitsendtotal','admin/Data/waitSendTotal');//6.未发货
+Route::rule('datatodaysale','admin/Data/todaySale');//7.今日订单

+ 95 - 0
app/common.php

@@ -801,4 +801,99 @@ if (!function_exists('get_address')) {
         ];
     }
 
+}
+
+/**
+ * 批量生成多个文件excel,生成压缩包
+ */
+if (!function_exists('excelSaveBatch')) {
+    function excelSaveBatch(array $datas = [])
+    {
+
+        $urls = [];
+        foreach ($datas as $item) {
+
+            $objPHPExcel = new PHPExcel();
+            $objPHPExcel->getProperties();
+            $keyA = 0; // 设置表头
+            foreach ($item['head'] as $v) {
+                $colum = PHPExcel_Cell::stringFromColumnIndex($keyA);
+                $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
+                $keyA += 1;
+            }
+
+            $column = 2;
+            $objActSheet = $objPHPExcel->getActiveSheet();
+
+            foreach ($item['list'] as $key => $rows) { // 行写入
+                $span = 0;
+                foreach ($rows as $keyName => $value) { // 列写入
+                    //判断数据是否有数组,如果有数组,转换成字符串
+
+                    if (is_array($value)) {
+                        $value = implode("、", $value);
+                    }
+                    $objActSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($span) . $column, $value);
+                    $span++;
+                }
+                $column++;
+            }
+            //  var_dump($objActSheet->getActiveCell());
+            $file = $item['filename'] . ".xls";
+            //$fileName .= "_" . date("Y_m_d", Request()->instance()->time()) . ".xls";
+            //$fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表
+            $dir = root_path() . 'public/storage/report/' . date("YmdHis") . "/";
+            if (!is_dir($dir)) {
+                mkdir($dir, 0777, true);
+            }
+            $objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表
+            $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
+            $objWriter->save($dir . $file); // 文件通过浏览器下载
+            $url = $dir . $file;
+            if (!file_exists($url)) {
+                echo "文件生成失败";
+            } else {
+                $urls[] = $url;
+            }
+        }
+
+
+        $saveDir = root_path() . "public/storage/zip/";
+        if (!is_dir($saveDir)) {
+            mkdir($saveDir, 0777, true);
+        }
+
+        $datetime = date("Y-m-d H:i:s");
+        $file_dir = $saveDir . $datetime . ".zip";
+        # 5.1 文件打包,提示:使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
+        $zip = new \ZipArchive ();
+        # 5.2 文件不存在则生成一个新的文件 用CREATE打开文件会追加内容至zip
+        if ($zip->open($file_dir, \ZipArchive::OVERWRITE) !== true && $zip->open($file_dir, \ZipArchive::CREATE) !==
+            true) echo '无法打开文件或者文件创建失败';
+
+        # 5.3 批量写入压缩包
+        foreach ($urls as $fileName) {
+            $zip->addEmptyDir($fileName);
+        }
+        // @$zip->addFile($v['file_path'], 'resume'.DIRECTORY_SEPARATOR.basename($headername));
+        @$zip->addFile($url, $fileName . DIRECTORY_SEPARATOR . basename($url));
+        # 5.4 关闭压缩包写入
+        $zip->close();
+
+        @deldir($dir);
+        # 6. 检查文件是否存在,并输出文件
+        if (!file_exists($file_dir)) echo '压缩包文件不存在';
+
+        ob_clean();
+        flush();
+        header("Cache-Control: max-age=0");
+        header("Content-Description: File Transfer");
+        header('Content-disposition: attachment; filename=' . basename($file_dir)); # 处理文件名
+        header("Content-Type: application/octet-stream");                           # 流文件输出
+        header("Content-Transfer-Encoding: binary");                                # 告诉浏览器,这是二进制文件
+        header('Content-Length: ' . filesize($file_dir));                           # 告诉浏览器,文件大小
+        readfile($file_dir);                                                        # 输出文件
+        @ unlink($file_dir);
+        exit();
+    }
 }