瀏覽代碼

add - 通用导出

liugc 1 年之前
父節點
當前提交
2bac96e267

+ 20 - 1
app/adminapi/controller/master_worker/MasterWorkerServiceOrderController.php

@@ -3,6 +3,8 @@ namespace app\adminapi\controller\master_worker;
 
 use app\adminapi\controller\BaseAdminController;
 use app\adminapi\lists\master_worker\MasterWorkerServiceOrderLists;
+use app\adminapi\logic\export\ExportLogic;
+use app\common\service\ExcelExportService;
 
 /**
  * MasterWorkerServiceOrder控制器
@@ -18,5 +20,22 @@ class MasterWorkerServiceOrderController extends BaseAdminController
     {
         return $this->dataLists(new MasterWorkerServiceOrderLists());
     }
-
+    public function download()
+    {
+        $params = $this->request->get();
+        $filename = date('Y-m-d',strtotime($params['start_time']))."-至-".date('Y-m-d',strtotime($params['end_time']))."工单统计";
+        $result = ExportLogic::add([
+            'download_type' => 2,
+            'download_fun' => 'MasterWorkerServiceOrderDownload',
+            'params' => $params,
+            'name' => $filename,
+            'admin_id' => $this->adminId,
+        ]);
+        if (false === $result) {
+            return $this->fail(ExportLogic::getError());
+        }
+        // 暂时 - 立即生成导出文件
+        (new ExcelExportService)->download($result);
+        return $this->success('添加成功-'.$result, [], 1, 1);
+    }
 }

+ 34 - 4
app/adminapi/lists/master_worker/MasterWorkerServiceOrderLists.php

@@ -14,6 +14,7 @@ use think\facade\Db;
 class MasterWorkerServiceOrderLists extends BaseAdminDataLists implements ListsSearchInterface
 {
 
+    public $sqlJoin = '';
 
     /**
      * @notes 设置搜索条件
@@ -26,6 +27,29 @@ class MasterWorkerServiceOrderLists extends BaseAdminDataLists implements ListsS
         return [];
     }
 
+    public function queryWhere()
+    {
+        $where = [];
+        if (isset($this->params['real_name']) && !empty($this->params['real_name'])) {
+            $where[] = ['a.real_name','like' ,"%".$this->params['real_name']."%"];
+        }
+        if (isset($this->params['worker_number']) && !empty($this->params['worker_number'])) {
+            $where[] = ['a.worker_number','like' ,"%".$this->params['worker_number']."%"];
+        }
+        if (isset($this->params['recruiting_behalf']) && !empty($this->params['recruiting_behalf'])) {
+            $where[] = ['a.recruiting_behalf','like' ,"%".$this->params['recruiting_behalf']."%"];
+        }
+        if (!empty($this->params['start_time'])) {
+            //$where[] = ['b.update_time', '>=', strtotime($this->params['start_time'])];
+            $this->sqlJoin .= '    AND  b.update_time >= '.strtotime($this->params['start_time']);
+        }
+        if (!empty($this->params['end_time'])) {
+            //$where[] = ['b.update_time', '<=', strtotime($this->params['end_time'])];
+            $this->sqlJoin .= '    AND  b.update_time <= '.strtotime($this->params['end_time']);
+        }
+        return $where;
+    }
+
 
     /**
      * @notes 获取列表
@@ -38,15 +62,19 @@ class MasterWorkerServiceOrderLists extends BaseAdminDataLists implements ListsS
      */
     public function lists(): array
     {
+        $queryWhere = $this->queryWhere();
         return Db::name('master_worker')->alias('a')->field([
                 'a.id','a.real_name','a.nickname','a.worker_number','a.recruiting_behalf',
                 Db::raw("SUM(CASE WHEN b.service_status = 3 THEN 1 ELSE 0 END) AS success_count"),
                 Db::raw("SUM(CASE WHEN b.service_status = 4 OR b.service_status = 5 THEN 1 ELSE 0 END) AS fail_count"),
                 Db::raw("SUM(b.work_total) work_total"),
+                Db::raw("SUM(b.worker_price) worker_price"),
             ])
-            ->leftJoin('service_work b', 'a.id = b.master_worker_id')
-            //->where('a.left_amount', '>', 0)
+            ->leftJoin('service_work b', 'a.id = b.master_worker_id'.$this->sqlJoin)
+            ->where($queryWhere)
             ->group('a.id')
+            ->order('a.id desc')
+            ->limit($this->limitOffset, $this->limitLength)
             ->select()->toArray();
     }
 
@@ -59,14 +87,16 @@ class MasterWorkerServiceOrderLists extends BaseAdminDataLists implements ListsS
      */
     public function count(): int
     {
+        $queryWhere = $this->queryWhere();
         return Db::name('master_worker')->alias('a')->field([
                 'a.id','a.real_name','a.nickname','a.worker_number','a.recruiting_behalf',
                 Db::raw("SUM(CASE WHEN b.service_status = 3 THEN 1 ELSE 0 END) AS success_count"),
                 Db::raw("SUM(CASE WHEN b.service_status = 4 OR b.service_status = 5 THEN 1 ELSE 0 END) AS fail_count"),
                 Db::raw("SUM(b.work_total) work_total"),
+                Db::raw("SUM(b.worker_price) worker_price"),
             ])
-            ->leftJoin('service_work b', 'a.id = b.master_worker_id')
-            //->where('a.left_amount', '>', 0)
+            ->leftJoin('service_work b', 'a.id = b.master_worker_id'.$this->sqlJoin)
+            ->where($queryWhere)
             ->group('a.id')
             ->count();
     }

+ 51 - 0
app/common/service/ExcelExportService.php

@@ -92,5 +92,56 @@ class ExcelExportService
             throw new Exception($e->getMessage());
         }
     }
+    /**
+     * @notes 工程师 -工单统计 导出
+     */
+    public function MasterWorkerServiceOrderDownload($infoExport,$filename,$params)
+    {
+        try{
+            $where = [];
+            $sqlJoin = '';
+            if($params){
+                if (isset($params['real_name']) && !empty($params['real_name'])) {
+                    $where[] = ['a.real_name','like' ,"%".$params['real_name']."%"];
+                }
+                if (isset($params['worker_number']) && !empty($params['worker_number'])) {
+                    $where[] = ['a.worker_number','like' ,"%".$params['worker_number']."%"];
+                }
+                if (isset($params['recruiting_behalf']) && !empty($params['recruiting_behalf'])) {
+                    $where[] = ['a.recruiting_behalf','like' ,"%".$params['recruiting_behalf']."%"];
+                }
+                if (!empty($params['start_time'])) {
+                    $sqlJoin .= '    AND  b.update_time >= '.strtotime($params['start_time']);
+                }
+                if (!empty($params['end_time'])) {
+                    $sqlJoin .= '    AND  b.update_time <= '.strtotime($params['end_time']);
+                }
+            }
+            $lists =   Db::name('master_worker')->alias('a')->field([
+                'a.id','a.real_name','a.nickname','a.worker_number','a.recruiting_behalf',
+                Db::raw("SUM(CASE WHEN b.service_status = 3 THEN 1 ELSE 0 END) AS success_count"),
+                Db::raw("SUM(CASE WHEN b.service_status = 4 OR b.service_status = 5 THEN 1 ELSE 0 END) AS fail_count"),
+                Db::raw("SUM(b.work_total) work_total"),
+                Db::raw("SUM(b.worker_price) worker_price"),
+            ])
+                ->leftJoin('service_work b', 'a.id = b.master_worker_id'.$sqlJoin)
+                ->where($where)
+                ->group('a.id')
+                ->select()->toArray();
+            $filename = ($filename?:'').('-'.date('YmdHis').'-'.$infoExport->id);
+            $this->sheet->generateExcelFile([
+                '工程师ID', '工程师编号', '工程师姓名', '代招人姓名', '工程师成功单','工程师失败单','工程师成交金额','工程师提成金额'
+            ], $lists,$filename, ['id','worker_number','nickname','recruiting_behalf','success_count','fail_count','work_total','worker_price']);
+            $infoExport->file_url = $this->sheet->fileUrl();
+            $infoExport->generate_status = 1;
+            $infoExport->updatetime = time();
+            $infoExport->save();
+            return $infoExport->file_url;
+        }catch (\Exception $e){
+            throw new Exception($e->getMessage());
+        }
+    }
+
+
 
 }