Procházet zdrojové kódy

修复:订单导出目录不存在时报错

Yahoo před 4 roky
rodič
revize
1595e6d14c

+ 6 - 5
app/store/controller/order/Export.php

@@ -12,10 +12,11 @@ declare (strict_types=1);
 
 namespace app\store\controller\order;
 
+use think\response\Json;
 use app\store\controller\Controller;
 use app\store\model\order\Export as ExportModel;
 use app\store\service\order\Export as ExportService;
-use app\common\exception\BaseException;
+use cores\exception\BaseException;
 
 /**
  * 订单导出记录控制器
@@ -26,10 +27,10 @@ class Export extends Controller
 {
     /**
      * 执行订单导出excel
-     * @return array|\think\response\Json
+     * @return Json
      * @throws BaseException
      */
-    public function exportOrder()
+    public function exportOrder(): Json
     {
         $model = new ExportService;
         if (!$model->exportOrder($this->request->param())) {
@@ -40,10 +41,10 @@ class Export extends Controller
 
     /**
      * 订单导出记录
-     * @return array|\think\response\Json
+     * @return Json
      * @throws \think\db\exception\DbException
      */
-    public function list()
+    public function list(): Json
     {
         $model = new ExportModel;
         $list = $model->getList();

+ 5 - 4
app/store/model/order/Export.php

@@ -13,6 +13,7 @@ declare (strict_types=1);
 namespace app\store\model\order;
 
 use app\common\model\order\Export as ExportModel;
+use think\db\exception\DbException;
 
 /**
  * 订单导出Excel记录模型
@@ -23,10 +24,10 @@ class Export extends ExportModel
 {
     /**
      * 获取导出记录
-     * @return mixed
-     * @throws \think\db\exception\DbException
+     * @return \think\Paginator
+     * @throws DbException
      */
-    public function getList()
+    public function getList(): \think\Paginator
     {
         // 获取列表记录
         $list = $this->order(['create_time' => 'desc'])->paginate(10);
@@ -42,7 +43,7 @@ class Export extends ExportModel
      * @param $data
      * @return bool
      */
-    public function add($data)
+    public function add($data): bool
     {
         return $this->save($data);
     }

+ 38 - 22
app/store/service/order/Export.php

@@ -14,20 +14,20 @@ namespace app\store\service\order;
 
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
-use app\store\model\Order as OrderModel;
-use app\store\model\order\Export as ExportModel;
-use app\store\model\OrderAddress as OrderAddressModel;
+use app\store\model\{Order as OrderModel, order\Export as ExportModel, OrderAddress as OrderAddressModel};
 use app\common\library\helper;
 use app\common\service\BaseService;
-use app\common\enum\order\PayType as PayTypeEnum;
-use app\common\enum\order\PayStatus as PayStatusEnum;
-use app\common\enum\order\OrderSource as OrderSourceEnum;
-use app\common\enum\order\OrderStatus as OrderStatusEnum;
-use app\common\enum\order\DeliveryType as DeliveryTypeEnum;
-use app\common\enum\order\ReceiptStatus as ReceiptStatusEnum;
-use app\common\enum\order\DeliveryStatus as DeliveryStatusEnum;
-use app\common\enum\order\export\ExportStatus as ExportStatusEnum;
-use app\common\exception\BaseException;
+use app\common\enum\order\{
+    PayType as PayTypeEnum,
+    PayStatus as PayStatusEnum,
+    OrderSource as OrderSourceEnum,
+    OrderStatus as OrderStatusEnum,
+    DeliveryType as DeliveryTypeEnum,
+    ReceiptStatus as ReceiptStatusEnum,
+    DeliveryStatus as DeliveryStatusEnum,
+    export\ExportStatus as ExportStatusEnum
+};
+use cores\exception\BaseException;
 
 /**
  * 服务层:订单导出Excel
@@ -81,10 +81,10 @@ class Export extends BaseService
      * 输出并写入到excel文件
      * @param array $columns 列名
      * @param array $excelList 表格内容
-     * @return bool
+     * @return string
      * @throws BaseException
      */
-    private function outputExcel(array $columns, array $excelList)
+    private function outputExcel(array $columns, array $excelList): string
     {
         // 生成工作表
         $spreadsheet = new Spreadsheet();
@@ -108,7 +108,7 @@ class Export extends BaseService
         }
         // 生成文件路径
         $fileName = 'order-' . time() . '.xlsx';
-        $filePath = 'temp/' . $this->getStoreId() . '/';
+        $filePath = $this->getExportPath();
         // 保存到文件
         try {
             $writer = new Xlsx($spreadsheet);
@@ -119,8 +119,24 @@ class Export extends BaseService
         return $filePath . $fileName;
     }
 
-    // 记录导出记录
-    private function record(array $param, string $filePath)
+    /**
+     * 获取导出的文件夹路径
+     * @return string
+     */
+    private function getExportPath(): string
+    {
+        $filePath = 'temp/' . $this->getStoreId() . '/';
+        !is_dir($filePath) && mkdir($filePath, 0755, true);
+        return $filePath;
+    }
+
+    /**
+     * 写入订单导出记录
+     * @param array $param
+     * @param string $filePath
+     * @return void
+     */
+    private function record(array $param, string $filePath): void
     {
         // 生成记录数据
         $data = [
@@ -136,7 +152,7 @@ class Export extends BaseService
         }
         // 新增记录
         $model = new ExportModel;
-        return $model->add($data);
+        $model->add($data);
     }
 
     /**
@@ -144,7 +160,7 @@ class Export extends BaseService
      * @param array $onlyFields
      * @return array
      */
-    private function getColumns(array $onlyFields)
+    private function getColumns(array $onlyFields): array
     {
         return array_values(helper::pick($this->dictionary(), $onlyFields));
     }
@@ -153,7 +169,7 @@ class Export extends BaseService
      * 订单记录字典
      * @return string[]
      */
-    private function dictionary()
+    private function dictionary(): array
     {
         return [
             'order_id' => '订单ID',
@@ -260,7 +276,7 @@ class Export extends BaseService
      * @param $order
      * @return string
      */
-    private function filterGoodsInfo($order)
+    private function filterGoodsInfo($order): string
     {
         $content = '';
         foreach ($order['goods'] as $key => $goods) {
@@ -277,7 +293,7 @@ class Export extends BaseService
      * @param $value
      * @return string
      */
-    private function filterValue($value)
+    private function filterValue($value): string
     {
         return $value;
         //return "\t" . $value . "\t";