cqp 7 kuukautta sitten
vanhempi
sitoutus
9eb0648358

+ 2 - 98
app/Http/Controllers/Api/StatisticsController.php

@@ -7,106 +7,10 @@ use Illuminate\Http\Request;
 
 class StatisticsController extends BaseController
 {
-    public function statisticsRevenueCost(Request $request){
+    public function valueStatistics(Request $request){
         $service = new StatisticsService();
         $userData = $request->userData;
-        list($status,$data) = $service->statisticsRevenueCost($request->all(),$userData);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function statisticsRevenueCostOne(Request $request){
-        $service = new StatisticsService();
-        $userData = $request->userData;
-        list($status,$data) = $service->statisticsRevenueCostOneAndTwo($request->all(),$userData);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function statisticsRevenueCostTwo(Request $request){
-        $service = new StatisticsService();
-        $userData = $request->userData;
-        list($status,$data) = $service->statisticsRevenueCostOneAndTwo($request->all(),$userData);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function statisticsRevenueCostThree(Request $request){
-        $service = new StatisticsService();
-        $userData = $request->userData;
-        list($status,$data) = $service->statisticsRevenueCostThree($request->all(),$userData);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function statisticsRevenueCostThreeDetail(Request $request){
-        $service = new StatisticsService();
-        $userData = $request->userData;
-        list($status,$data) = $service->statisticsRevenueCostThreeDetail($request->all(),$userData);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function statisticsProfit(Request $request){
-        $service = new StatisticsService();
-        $userData = $request->userData;
-        list($status,$data) = $service->statisticsProfit($request->all(),$userData);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function statisticsEmployeeSalary(Request $request){
-        $service = new StatisticsService();
-        $userData = $request->userData;
-        list($status,$data) = $service->statisticsEmployeeSalary($request->all(),$userData);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function statisticsFreightFee(Request $request){
-        $service = new StatisticsService();
-        $userData = $request->userData;
-        list($status,$data) = $service->statisticsFreightFee($request->all(),$userData);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function statisticsFreightFeeDetail(Request $request){
-        $service = new StatisticsService();
-        $userData = $request->userData;
-        list($status,$data) = $service->statisticsFreightFeeDetail($request->all(),$userData);
+        list($status,$data) = $service->valueStatistics($request->all(),$userData);
 
         if($status){
             return $this->json_return(200,'',$data);

+ 1 - 1
app/Model/Dimension.php

@@ -9,7 +9,7 @@ class Dimension extends UseScopeBaseModel
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
 
-    public static $field = ['title','id','code','type','crt_time','is_use','crt_id','score'];
+    public static $field = ['title','id','code','type','crt_time','is_use','crt_id','rate'];
 
     const type_one = 1;
     const type_two = 2;

+ 3 - 1
app/Model/Reminder.php

@@ -10,7 +10,9 @@ class Reminder extends UseScopeBaseModel
     protected $dateFormat = 'U';
     const employee_column = "crt_id";
 
-    public static $field = ['order_number','id','order_no','crt_id','crt_time','product_code','product_title','product_size','product_size','quantity','order_time','lt_arrived_time','tl_arrived_time','tl_quantity','df_type','rule','status'];
+    public static $field = ['order_number','id','order_no','crt_id','crt_time','product_code','product_title','product_size','quantity','order_time','lt_arrived_time','tl_arrived_time','tl_quantity','df_type','rule','status'];
+
+    public static $a_field = ['a.id as reminder_id','a.order_number','a.order_no','a.product_code','a.product_title','a.product_size','a.product_unit','a.tl_arrived_time','a.tl_quantity','a.status','b.tl_result','b.tl_ways','b.id','b.crt_id as supply_id','c.quantity as result_quantity','c.tl_time'];
 
     const status_zero = 0;
     const status_one = 1;

+ 3 - 1
app/Model/UseScopeBaseModel.php

@@ -14,7 +14,7 @@ class UseScopeBaseModel extends Model
         parent::__construct($attributes);
     }
 
-    public function scopeClear($query, $user, $search)
+    public function scopeClear($query, $user, $search, $alias = '')
     {
         //权限范围内的部门
         $depart_range = $user['depart_range'] ?? [];
@@ -28,6 +28,8 @@ class UseScopeBaseModel extends Model
         // 人员字段
         $column = defined($className . '::employee_column') ? constant($className . '::employee_column') : '';
 
+        if(! empty($alias)) $column = $alias . '.' . $column;
+
         $this->makeModel($query, $auth_type, $user, $depart_range,$column);
     }
 

+ 5 - 5
app/Service/DimensionService.php

@@ -20,7 +20,7 @@ class DimensionService extends Service
             $model->code = $data['code'] ?? '';
 //            $model->type = $data['type'] ?? 0;
             $model->is_use = $data['is_use'] ?? 0;
-            $model->score = $data['score'] ?? 0;
+            $model->rate = $data['rate'] ?? 0;
             $model->save();
 
             DB::commit();
@@ -44,7 +44,7 @@ class DimensionService extends Service
             $model->code = $data['code'] ?? '';
             $model->type = $data['type'] ?? 0;
             $model->is_use = $data['is_use'] ?? 0;
-            $model->score = $data['score'] ?? 0;
+            $model->rate = $data['rate'] ?? 0;
             $model->crt_id = $user['id'];
             $model->save();
 
@@ -125,9 +125,9 @@ class DimensionService extends Service
         if(empty($data['code'])) return [false, '维度编码不能为空'];
         if(empty($data['type'])) return [false, '类型不能为空'];
         if(! isset(Dimension::$type_name[$data['type']])) return [false, '类型不能不存在'];
-        if(! isset($data['score'])) return [false, '分数不存在'];
-        $res = $this->checkNumber($data['score']);
-        if(! $res['valid']) return [false,'分数:' . $res['error']];
+        if(! isset($data['rate'])) return [false, '打分比例不存在'];
+        $res = $this->checkNumber($data['rate'],2,'positive');
+        if(! $res['valid']) return [false,'比例:' . $res['error']];
 
         if($is_add){
             $bool = Dimension::where('code',$data['code'])

+ 40 - 31
app/Service/QuantizationService.php

@@ -76,7 +76,7 @@ class QuantizationService extends Service
             $parent = QuantizationDetails::create([
                 'quantization_id' => $id,
                 'title'           => $value['title'],
-                'rate'            => $value['rate'],
+                'score'            => $value['score'],
                 'parent_id'       => 0, // 顶层 parent_id = 0
                 'crt_time'        => $time,
             ]);
@@ -87,6 +87,7 @@ class QuantizationService extends Service
                     $detailsSonData[] = [
                         'quantization_id' => $id,
                         'title'           => $son['title'],
+                        'score'            => $value['score'],
                         'parent_id'       => $parent->id, // 子级关联父级 id
                         'crt_time'        => $time,
                     ];
@@ -215,30 +216,32 @@ class QuantizationService extends Service
             }
             $titleSet[] = $value['title'];
 
-            // 校验占比
-            if (empty($value['rate']) || ! is_numeric($value['rate']) || floatval($value['rate']) <= 0.0) {
-                return [false, "第{$rowNum}行的占比填写错误"];
+            // 校验维度总分
+            if (empty($value['score']) || ! is_numeric($value['score']) || floatval($value['score']) <= 0.0) {
+                return [false, "第{$rowNum}行的维度总分错误"];
             }
 
-            // 明细不能为空
-            if (! empty($value['details_son'])) {
-                // 校验明细中 title 不重复
-                $sonTitleSet = [];
-                foreach ($value['details_son'] as $sonKey => $val) {
-                    $sonRowNum = $sonKey + 1;
-                    if (empty($val['title'])) {
-                        return [false, "第{$rowNum}行下的第{$sonRowNum}个明细名称不能为空"];
-                    }
-                    if (in_array($val['title'], $sonTitleSet)) {
-                        return [false, "第{$rowNum}行下的明细名称 [{$val['title']}] 重复"];
-                    }
-                    $sonTitleSet[] = $val['title'];
+            if(empty($value['details_son'])) return [false, '维度明细不能为空'];
+
+            // 校验明细中 title 不重复
+            $sonTitleSet = [];
+            foreach ($value['details_son'] as $sonKey => $val) {
+                $sonRowNum = $sonKey + 1;
+                if (empty($val['title'])) {
+                    return [false, "第{$rowNum}行下的第{$sonRowNum}个明细名称不能为空"];
+                }
+                if (in_array($val['title'], $sonTitleSet)) {
+                    return [false, "第{$rowNum}行下的明细名称 [{$val['title']}] 重复"];
+                }
+                if (empty($val['score']) || ! is_numeric($val['score']) || floatval($val['score']) <= 0.0) {
+                    return [false, "第{$rowNum}行下的第{$sonRowNum}个明细赋分错误"];
                 }
+                $sonTitleSet[] = $val['title'];
             }
         }
 
-        $rate_total = floatval(array_sum(array_column($data['details'],'rate')));
-        if($rate_total != 100.0) return [false, '占比之和必须等于100'];
+        $rate_total = floatval(array_sum(array_column($data['details'],'score')));
+        if($rate_total != 100.0) return [false, '维度总分之和必须等于100'];
 
         if($is_add){
             $bool = Quantization::where('code',$data['code'])
@@ -341,7 +344,7 @@ class QuantizationService extends Service
             $parent = QuantizationCreateDetails::create([
                 'quantization_create_id' => $id,
                 'title'           => $value['title'],
-                'rate'            => $value['rate'],
+                'quantization_score'            => $value['quantization_score'],
                 'parent_id'       => 0, // 顶层 parent_id = 0
                 'crt_time'        => $time,
                 'dimension_id' => $value['dimension_id'] ?? 0,
@@ -358,6 +361,7 @@ class QuantizationService extends Service
                         'crt_time'        => $time,
                         'dimension_id' => $son['dimension_id'] ?? 0,
                         'score' => $son['score'] ?? 0,
+                        'rate' => $son['rate'] ?? 0,
                     ];
                 }
             }
@@ -519,20 +523,25 @@ class QuantizationService extends Service
             // 校验外层 title 不能为空
             if (empty($value['title'])) return [false, "第{$rowNum}行的评价名称不能为空"];
 
-            // 校验占比
-            if (empty($value['rate']) || ! is_numeric($value['rate']) || floatval($value['rate']) <= 0.0) {
-                return [false, "第{$rowNum}行的占比错误"];
+            // 校验维度总分
+            if (empty($value['quantization_score']) || ! is_numeric($value['quantization_score']) || floatval($value['quantization_score']) <= 0.0) {
+                return [false, "第{$rowNum}行的维度总分错误"];
+            }
+            if (empty($value['score']) || ! is_numeric($value['score']) || floatval($value['score']) <= 0.0) {
+                return [false, "第{$rowNum}行的总得分错误"];
             }
 
-            // 明细不能为空
-            if (! empty($value['details_son'])) {
-                foreach ($value['details_son'] as $sonKey => $val) {
-                    $sonRowNum = $sonKey + 1;
-                    if (empty($val['title'])) return [false, "第{$rowNum}行下的第{$sonRowNum}个明细名称不能为空"];
-                    if (empty($val['dimension_id'])) return [false, "第{$rowNum}行下的第{$sonRowNum}个明细的维度选项不能为空"];
+            if(empty($value['details_son'])) return [false, '维度明细不能为空'];
+            foreach ($value['details_son'] as $sonKey => $val) {
+                $sonRowNum = $sonKey + 1;
+                if (empty($val['title'])) return [false, "第{$rowNum}行下的第{$sonRowNum}个明细名称不能为空"];
+                if (empty($val['dimension_id'])) return [false, "第{$rowNum}行下的第{$sonRowNum}个明细的维度选项不能为空"];
+                if (empty($val['score']) || ! is_numeric($val['score']) || floatval($val['score']) <= 0.0) {
+                    return [false, "第{$rowNum}行下的第{$sonRowNum}个明细的维度选项赋分不能为空"];
+                }
+                if (empty($val['rate']) || ! is_numeric($val['rate']) || floatval($val['rate']) <= 0.0) {
+                    return [false, "第{$rowNum}行下的第{$sonRowNum}个明细的维度选项打分比例不能为空"];
                 }
-            }else{
-                if(empty($value['dimension_id'])) return [false, "第{$rowNum}行的维度选项不能为空"];
             }
         }
 

+ 39 - 819
app/Service/StatisticsService.php

@@ -2,845 +2,65 @@
 
 namespace App\Service;
 
-use App\Model\EmployeeIndex;
-use App\Model\FreightFee;
-use App\Model\GiveOut;
-use App\Model\RevenueCost;
-use App\Model\RevenueCostTotal;
-use App\Model\SalaryEmployee;
+use App\Model\Reminder;
+use App\Model\ReminderRecord;
 use Illuminate\Support\Facades\DB;
 
 class StatisticsService extends Service
 {
-    public function statisticsRevenueCostCommon($data,$user, $field = []){
-        if(empty($field)) $field = RevenueCostTotal::$field;
-        $model = RevenueCostTotal::Clear($user,$data);
-
-        $model = $model->where('del_time',0)
-            ->select($field)
-            ->orderby('id', 'desc');
-
-        if(! empty($data['employee_id_1_title'])) $model->where('employee_id_1_title', 'LIKE', '%'.$data['employee_id_1_title'].'%');
-        if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])){
-            list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($data['order_time'],false);
-            if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, "单据日期的区间无效"];
-            $model->where('order_time', '>=', $start_time)
-                ->where('order_time', '<', $end_time);
-        }
-        if(! empty($data['order_type'])) $model->where('order_type',$data['order_type']);
-        if(! empty($data['id'])) $model->whereIn('id',$data['id']);
-
-        return [true, $model];
-    }
-
-    public function statisticsRevenueCost($data,$user){
-        list($status, $model) = $this->statisticsRevenueCostCommon($data, $user);
-        if(! $status) return [false, $model];
-        $list = $this->limit($model,'',$data);
-        $list = $this->statisticsRevenueCostFillData($list);
-
-        $list['count'] = $this->countTotal($list['data'], $user['header_default']);
-        return [true, $list];
-    }
-
-    public function statisticsRevenueCostFillData($data){
-        if(empty($data['data'])) return $data;
-
-        foreach ($data['data'] as $key => $value){
-            $time = date("Y-m", $value['order_time']);
-            $data['data'][$key]['order_time'] = $time;
-            $data['data'][$key]['order_type_title'] = RevenueCost::$order_type[$value['order_type']] ?? "";
-            $data['data'][$key]['profit_rate'] = bcmul($value['profit_rate'], 100,2);
-        }
-
-        return $data;
-    }
-
-    public function statisticsRevenueCostOneAndTwoCommon($data,$user, $field = []){
-        if(empty($data['order_type']) || ! isset(RevenueCost::$order_type[$data['order_type']])) return [false, '单据类型不存在或错误'];
-
-        if(empty($field)) {
-            if($data['order_type'] == 1){
-                $field = RevenueCost::$field_xhd;
-            }else{
-                $field = RevenueCost::$field_xsfp;
-            }
-        }
-        $model = RevenueCost::Clear($user,$data);
-
-        $model = $model->where('del_time',0)
-            ->where('order_type',$data['order_type'])
-            ->select($field)
-            ->orderby('id', 'desc');
-        if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])){
-            list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($data['order_time'],false);
-            if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, "单据日期的区间无效"];
-            $model->where('order_time', '>=', $start_time)
-                ->where('order_time', '<=', $end_time);
-        }
-        if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
-        if(! empty($data['customer_title'])) $model->where('customer_title', 'LIKE', '%'.$data['customer_title'].'%');
-        if(! empty($data['employee_id_1_title'])) $model->where('employee_id_1_title', 'LIKE', '%'.$data['employee_id_1_title'].'%');
-        if(! empty($data['id'])) $model->whereIn('id',$data['id']);
-
-        return [true, $model];
-    }
-
-    public function statisticsRevenueCostOneAndTwo($data,$user){
-        list($status, $model) = $this->statisticsRevenueCostOneAndTwoCommon($data, $user);
-        if(! $status) return [false, $model];
-        $list = $this->limit($model,'',$data);
-        $list = $this->statisticsRevenueCostOneAndTwoFillData($list);
-
-        $list['count'] = $this->countTotal($list['data'], $user['header_default']);
-
-        return [true, $list];
-    }
-
-    public function statisticsRevenueCostOneAndTwoFillData($data){
-        if(empty($data['data'])) return $data;
-
-        foreach ($data['data'] as $key => $value){
-            $data['data'][$key]['profit_rate'] = bcmul($value['profit_rate'], 100,2);
-            $data['data'][$key]['order_time'] = $value['order_time'] ? date("Y-m-d", $value['order_time']) : "";
-        }
-
-        return $data;
-    }
-
-    public function statisticsRevenueCostThreeCommon($data,$user, $field = []){
-        if(empty($field)) {
-            $field = RevenueCost::$field_hkd_salary_main;
-            $field[] = DB::raw('sum(payment_amount) as payment_amount');
-            $field[] = DB::raw('sum(price_4_total) as price_4_total');
-            $field[] = DB::raw('sum(profit) as profit');
-            $field[] = DB::raw('max(employee_id_2) as employee_id_2');
-            $field[] = DB::raw("MAX(COALESCE(employee_id_2_title, '')) as employee_id_2_title");
-        }
-        $model = RevenueCost::Clear($user,$data);
-
-        $model = $model->where('del_time',0)
-            ->where('order_type',RevenueCost::ORDER_THREE)
-            ->select($field)
-            ->groupby('order_id')
-            ->orderby('id', 'desc');
-        if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])){
-            list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($data['order_time'],false);
-            if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, "单据日期的区间无效"];
-            $model->where('order_time', '>=', $start_time)
-                ->where('order_time', '<=', $end_time);
-        }
-        if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
-        if(! empty($data['employee_id_1_title'])) $model->where('employee_id_1_title', 'LIKE', '%'.$data['employee_id_1_title'].'%');
-        if(! empty($data['employee_id_1'])) $model->where('employee_id_1', 'LIKE', $data['employee_id_1']);
-        if(! empty($data['employee_id_2'])) $model->where('employee_id_2', 'LIKE', $data['employee_id_2']);
-        if(! empty($data['employee_id_2_title'])) $model->where('employee_id_2_title', 'LIKE', '%'.$data['employee_id_2_title'].'%');
-        if(! empty($data['channel_finance_array'])) {
-            $array = explode("\n", str_replace(["\r\n", "\r"], "\n", $data['channel_finance_array']));
-            $model->whereIn('channel_finance', $array);
-        }
-        if(! empty($data['id'])) $model->whereIn('order_id',$data['id']);
-
-        return [true, $model];
-    }
-
-    public function statisticsRevenueCostThree($data,$user){
-        list($status, $model) = $this->statisticsRevenueCostThreeCommon($data, $user);
-        if(! $status) return [false, $model];
-        $list = $this->limit($model,'',$data);
-        $list = $this->statisticsRevenueCostThreeFillData($list);
-
-        $list['count'] = $this->countTotal($list['data'], $user['header_default']);
-
-        return [true, $list];
-    }
-
-    public function statisticsRevenueCostThreeFillData($data){
-        if(empty($data['data'])) return $data;
-
-        foreach ($data['data'] as $key => $value){
-            $profit_rate = $value['payment_amount'] > 0 ? bcdiv($value['profit'], $value['payment_amount'],8) : 0;
-            $data['data'][$key]['profit_rate'] = bcmul($profit_rate, 100,2);
-            $data['data'][$key]['order_time'] = $value['order_time'] ? date("Y-m-d", $value['order_time']) : "";
-        }
-
-        return $data;
-    }
-
-    public function statisticsRevenueCostThreeDetail($data,$user){
-        if(empty($data['order_number'])) return [false, '回款单号不能为空'];
-        $result = RevenueCost::where('del_time',0)
-            ->where('order_type',RevenueCost::ORDER_THREE)
-            ->where('order_number',$data['order_number'])
-            ->select(RevenueCost::$field_hkd_detail)
-            ->get()->toArray();
-        if(empty($result)) return [false, "回款单不存在或已被删除"];
-
-        $detail = [];
-        foreach ($result as $value){
-            $detail[] = [
-                'order_number' => $value['order_number_upstream'],
-                'customer_code' => $value['customer_code'],
-                'customer_title' => $value['customer_title'],
-                'channel_finance' => $value['channel_finance'],
-                'product_code' => $value['product_code'],
-                'product_title' => $value['product_title'],
-                'product_size' => $value['product_size'],
-                'unit' => $value['unit'],
-                'quantity' => $value['quantity'],
-                'payment_amount' => $value['payment_amount'],
-                'price_1' => $value['price_1'],
-                'price_1_total' => $value['price_1_total'],
-                'price_4' => $value['price_4'],
-                'price_4_total' => $value['price_4_total'],
-                'profit' => $value['profit'],
-                'profit_rate' => bcmul($value['profit_rate'],100,2) . '%',
-                'customer_profit_rate' => bcmul($value['customer_profit_rate'],100,2) . '%',
-                'voucher_type_title' => RevenueCost::$voucher_type[$value['voucher_type']] ?? "",
-            ];
-        }
-        $footer = $this->countTotal($result, $user['header_default']);
-        $footer['profit_rate'] = $footer['profit_rate'] . "%";
-        $footer = array_merge( [
-            'order_number'        => '',
-            'customer_code'       => '',
-            'customer_title'      => '',
-            'channel_finance'     => '',
-            'product_code'        => '',
-            'product_title'       => '',
-            'product_size'        => '',
-            'unit'                => '',
-            'quantity'            => '',
-            'payment_amount'      => '',
-            'price_1'             => '',
-            'price_1_total'       => '',
-            'price_4'             => '',
-            'price_4_total'       => '',
-            'profit'              => '',
-            'profit_rate'         => '',
-            'customer_profit_rate'=> '',
-            'voucher_type_title'  => '',
-        ], $footer);
-        $detail[] = $footer;
-
-        $first = $result[0];
-        $order = [
-            'order_number' => $data['order_number'],
-            'order_time' => date("Y-m-d",$first['order_time']),
-            'employee_id_1_title' => $first['employee_id_1_title'],
-            'detail' => $detail
-        ];
-
-        return [true, $order];
-    }
-
-    public function statisticsProfitCommon($data,$user, $field = []){
-        if(empty($field)) {
-            $field = RevenueCost::$field_hkd_profit_main;
-            $field[] = DB::raw('COALESCE(SUM(rc.payment_amount), 0) AS payment_amount');
-        }
-
-        $type = RevenueCost::ORDER_THREE;
-        $model = EmployeeIndex::Clear($user, $data)
-            ->where('employee_index.del_time', 0)
-            ->where('employee_index.type', EmployeeIndex::TYPE_THREE)
-
-            ->leftJoin(DB::raw('revenue_cost as rc'), function ($join) use ($type) {
-                $join->on('rc.employee_id_2', '=', 'employee_index.employee_id')
-                    ->where('rc.del_time', 0)
-                    ->where('rc.order_type', $type)
-                    ->whereNotNull('rc.employee_id_2')
-                    ->where('rc.employee_id_2', '<>', '')
-                    ->whereRaw('rc.order_time >= employee_index.start_time')
-                    ->whereRaw('rc.order_time <= employee_index.end_time');
+    public function valueStatisticsCommon($data,$user, $field = []){
+        $alias_name = 'a';
+        if(empty($field)) $field = Reminder::$a_field;
+
+        $model = Reminder::Clear($user,$data, $alias_name);
+        $model = $model->from("reminder as {$alias_name}")
+            ->join('reminder_record as b', function ($join) use ($alias_name) {
+                $join->on('b.reminder_id', '=', "{$alias_name}.id")
+                    ->where('b.del_time', 0);
+            })
+            ->join('reminder_record_details as c', function ($join) {
+                $join->on('c.reminder_record_id', '=', 'b.id')
+                    ->where('c.del_time', 0);
             })
+            ->where($alias_name . '.del_time',0)
             ->select($field)
-            ->groupBy('employee_index.employee_id', 'employee_index.start_time', 'employee_index.end_time')
-            ->orderBy('employee_index.end_time', 'desc');
-
-//        $type = RevenueCost::ORDER_THREE;
-//        $model = EmployeeIndex::where('employee_index.del_time',0)
-//            ->where('employee_index.type',EmployeeIndex::TYPE_THREE)
-//            ->leftJoin(DB::raw('revenue_cost as rc'), function ($join) use ($type) {
-//                $join->on('rc.employee_id_2', '=', 'employee_index.employee_id')
-//                    ->where('rc.del_time', 0)
-//                    ->where('rc.order_type', $type)
-//                    ->whereRaw('rc.order_time >= employee_index.start_time')
-//                    ->whereRaw('rc.order_time <= employee_index.end_time');
-//            })
-//            ->select($field)
-//            ->groupBy('employee_index.employee_id', 'employee_index.start_time', 'employee_index.end_time')
-//            ->orderBy('employee_index.end_time','desc');
-
-        if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])){;
-            list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($data['order_time'],false);
-            if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, "单据日期的区间无效"];
-            $model->where('employee_index.start_time', '<=', $end_time)
-                ->where('employee_index.end_time', '>=', $start_time);
-        }
-        if(! empty($data['employee_id_2_title'])) $model->where('rc.employee_id_2_title', 'LIKE', '%'.$data['employee_id_2_title'].'%');
-        if(! empty($data['id'])) $model->whereIn('employee_index.id', $data['id']);
-
-        return [true, $model];
-    }
-
-    public function statisticsProfit($data,$user){
-        list($status, $model) = $this->statisticsProfitCommon($data, $user);
-        if(! $status) return [false, $model];
-        $list = $this->limit($model,'',$data);
-        $list = $this->statisticsProfitFillData($list);
-
-        $list['count'] = $this->countTotal($list['data'], $user['header_default']);
-
-        return [true, $list];
-    }
-
-    public function statisticsProfitFillData($data){
-        if(empty($data['data'])) return $data;
-
-        //获取应发放金额需要的指标
-        $indexes = $this->getEmployeeIndex($data['data']);
-        //已发
-        $indexes_give = $this->getEmployeeGiveOut($data['data']);
-
-        foreach ($data['data'] as $key => $value){
-            $start = $value['start_time'] ? date('Y-m-d',$value['start_time']) : '';
-            $end = $value['end_time'] ? date('Y-m-d',$value['end_time']) : '';
-            $string = "";
-            if(! empty($start) && ! empty($end)) $string = $start . "-" . $end;
-            $value['check_time'] = $string;
-            $value['index_' . EmployeeIndex::TYPE_ONE] = 0;
-            $value['index_' . EmployeeIndex::TYPE_FIVE] = 0;
-            //指标
-            $this->makeIndex($indexes, $value, $data['data'][$key]);
-            //应付
-            $this->makeShouldPay($value,$data['data'][$key]);
-            //已付
-            $this->makePayed($indexes_give, $value,$data['data'][$key]);
-            //未付
-            $not_pay = bcsub($data['data'][$key]['should_pay'], $data['data'][$key]['payed'],2);
-            $data['data'][$key]['not_pay'] = $not_pay;
-        }
-
-        return $data;
-    }
-
-    private function getEmployeeIndex($existingData)
-    {
-        if (empty($existingData)) {
-            return collect();
-        }
-
-        // 取出所有涉及的 employee_id 和时间区间
-        $employeeIds = array_column($existingData, 'employee_id_2');
-        $start_time = array_column($existingData, 'start_time');
-        $minStart = ! empty($start_time) ? min($start_time) : 0;
-        $end_time = array_column($existingData, 'end_time');
-        $maxEnd   = ! empty($end_time) ? max($end_time) : 0;
-
-        // 一次性查出这些员工在最大区间范围内的所有指标
-        $results = EmployeeIndex::where('del_time', 0)
-            ->whereIn('type', [EmployeeIndex::TYPE_ONE, EmployeeIndex::TYPE_FIVE])
-            ->whereIn('employee_id', $employeeIds)
-            ->where('start_time', '<=', $maxEnd)
-            ->where('end_time', '>=', $minStart)
-            ->select('start_time','end_time','employee_id','index','type')
-            ->get();
-
-        return $results;
-    }
+            ->orderby($alias_name . '.id', 'desc');
 
-    private function getEmployeeGiveOut($existingData)
-    {
-        if (empty($existingData)) {
-            return collect();
-        }
-
-        // 取出所有涉及的 employee_id 和时间区间
-        $employeeIds = array_column($existingData, 'employee_id_2');
-
-        $start_time = array_column($existingData, 'start_time');
-        $minStart = ! empty($start_time) ? min($start_time) : 0;
-        $end_time = array_column($existingData, 'end_time');
-        $maxEnd   = ! empty($end_time) ? max($end_time) : 0;
-
-        // 一次性查出这些员工在最大区间范围内的所有指标
-        $results = GiveOut::where('del_time', 0)
-            ->whereIn('employee_id_1', $employeeIds)
-            ->where('start_time', '<=', $maxEnd)
-            ->where('end_time', '>=', $minStart)
-            ->select('start_time','end_time','employee_id_1 as employee_id','give_out_amount')
-            ->get();
+        $alias = 'a.';
+        if(! empty($data['order_number'])) $model->where($alias . 'order_number', 'LIKE', '%'.$data['order_number'].'%');
+        if(! empty($data['order_no'])) $model->where($alias . 'order_no', 'LIKE', '%'.$data['order_no'].'%');
+        if(! empty($data['product_title'])) $model->where($alias . 'product_title', 'LIKE', '%'.$data['product_title'].'%');
+        if(! empty($data['product_code'])) $model->where($alias . 'product_code', 'LIKE', '%'.$data['product_code'].'%');
+        if(! empty($data['id'])) $model->whereIn('b.id', $data['id']);
+        if(isset($data['status'])) $model->where($alias . 'status', $data['status']);
 
-        return $results;
-    }
-
-    private function makeIndex($indexes, $value, &$data){
-        // 找到所有符合条件的 index(可能多个 type)
-        $matchedIndexes = $indexes->filter(function ($item) use ($value) {
-            return $item['employee_id'] == $value['employee_id_2']
-                && $item['start_time'] <= $value['end_time']
-                && $item['end_time'] >= $value['start_time'];
-        });
-        // 按 type 去重,只保留第一次出现的
-        $uniqueByType = [];
-        foreach ($matchedIndexes as $item) {
-            $index = "index_" . $item['type'];
-            if (! isset($uniqueByType[$index])) {
-                $uniqueByType[$index] = $item['index'];
-            }
-        }
-        $data = array_merge($value, $uniqueByType);
-    }
-
-    private function makeShouldPay($value, &$data){
-        $index_1 = bcdiv($data['index_1'],100,2);
-        $index_5 = bcdiv($data['index_5'],100,2);
-        // 分红比例/2
-        $a = bcdiv($index_5,2,2);
-        // 季度预支分红比例/2
-        $b = bcdiv($index_1,2,2);
-        //(分红比例/2-季度预支分红比例/2)
-        $c = bcsub($a, $b,2);
-        $data['part_left'] = $c;
-        if($value['payment_amount'] < $value['index']){
-            //回款金额*(分红比例/2-季度预支分红比例/2);
-            $shouldPay = bcmul($value['payment_amount'], $c,2);
-        }else{
-            //回款金额-季度指标金额
-            $d = bcsub($value['payment_amount'], $value['index'],2);
-            //(回款金额-季度指标金额)*15%
-            $e = bcmul($d, 0.15,2);
-            //(回款金额-季度指标金额)*15%/2
-            $e = bcdiv($e,2,2);
-            //(分红比例/2-季度预支分红比例/2+(回款金额-季度指标金额)*15%/2)
-            $rate = bcadd($c, $e,2);
-//                $data['data'][$key]['rate'] = $rate;
-            //回款金额*(分红比例/2-回款金额*季度预支分红比例/2+(回款金额-季度指标金额)*15%/2)
-            $shouldPay = bcmul($value['payment_amount'], $rate,2);
-        }
-        $data['should_pay'] = $shouldPay;
-    }
-
-    private function makePayed($indexes, $value, &$data){
-        $matchedIndexes_give = $indexes->filter(function ($item) use ($value) {
-            return $item['employee_id'] == $value['employee_id_2']
-                && $item['start_time'] <= $value['end_time']
-                && $item['end_time'] >= $value['start_time'];
-        });
-        $give_out = 0;
-        foreach ($matchedIndexes_give as $item) {
-            $give_out = bcadd($item['give_out_amount'], $give_out,2);
-        }
-        $data['payed'] = $give_out;
+        return $model;
     }
 
-    public function statisticsEmployeeSalaryCommon($data,$user, $field = []){
-        if(empty($field)) {
-            $field = SalaryEmployee::$field;
-        }
-        $model = SalaryEmployee::Clear($user,$data);
-
-        $model = $model->where('del_time',0)
-            ->where('order_type',RevenueCost::ORDER_THREE)
-            ->select($field)
-            ->orderby('order_time', 'desc');
-        if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])){
-            $start_time = strtotime($data['order_time'][0] . "-01");
-            $end_time = strtotime($data['order_time'][1] . "-01");
-            $model->where('order_time', '>=', $start_time)
-                ->where('order_time', '<=', $end_time);
-        }
-        if(! empty($data['employee_id_1_title'])) $model->where('employee_id_1_title', 'LIKE', '%'.$data['employee_id_1_title'].'%');
-        if(! empty($data['id'])) $model->whereIn('id', $data['id']);
-
-        return [true, $model];
-    }
-
-    public function statisticsEmployeeSalary($data,$user){
-        list($status, $model) = $this->statisticsEmployeeSalaryCommon($data, $user);
-        if(! $status) return [false, $model];
+    public function valueStatistics($data,$user){
+        $model = $this->valueStatisticsCommon($data, $user);
         $list = $this->limit($model,'',$data);
-        $list = $this->statisticsEmployeeSalaryFillData($list);
-
-        $list['count'] = $this->countTotal($list['data'], $user['header_default']);
+        $list = $this->valueStatisticsFillData($list);
 
         return [true, $list];
     }
 
-    public function statisticsEmployeeSalaryFillData($data){
+    public function valueStatisticsFillData($data){
         if(empty($data['data'])) return $data;
 
+        $emp_2 = (new CustomerSupplyService())->getEmployeeMap(array_unique(array_column($data['data'],'supply_id')),'detail');
         foreach ($data['data'] as $key => $value){
-            $order_time = $value['order_time'] ? date('Y-m',$value['order_time']) : '';
-            $data['data'][$key]['order_time'] = $order_time;
-        }
-
-        return $data;
-    }
-
-    public function statisticsFreightFeeCommon($data,$user, $field = []){
-        if(empty($field)) {
-            $field = FreightFee::$field;
-        }
-        $model = FreightFee::Clear($user,$data);
-
-        $model = $model->where('del_time',0)
-            ->select($field)
-            ->groupby('order_time')
-            ->orderby('order_time', 'desc');
-        if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])){
-            list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($data['order_time'],false);
-            if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, "单据日期的区间无效"];
-            $model->where('order_time', '>=', $start_time)
-                ->where('order_time', '<=', $end_time);
-        }
-        if(! empty($data['employee_id_1_title'])) $model->where('employee_id_1_title', 'LIKE', '%'.$data['employee_id_1_title'].'%');
-        if(! empty($data['id'])) $model->whereIn('order_time', $data['id']);
-
-        return [true, $model];
-    }
-
-    public function statisticsFreightFee($data,$user){
-        list($status, $model) = $this->statisticsFreightFeeCommon($data, $user);
-        if(! $status) return [false, $model];
-        $list = $this->limit($model,'',$data);
-        $list = $this->statisticsFreightFeeFillData($list, $user,$data);
-
-        $list['count'] = $this->countTotal($list['data'], $user['header_default']);
-
-        return [true, $list];
-    }
-
-    public function statisticsFreightFeeFillData($data, $user, $ergs){
-        if(empty($data['data'])) return $data;
-
-        $order_time = array_column($data['data'], 'order_time');
-        $model = FreightFee::Clear($user,$ergs);
-        $allFees = $model->where('del_time', 0)
-            ->whereIn('order_time', $order_time)
-            ->get()
-            ->toArray();
-        $feesByDay = [];
-        foreach ($allFees as $f) {
-            $feesByDay[$f['order_time']][] = $f;
-        }
-
-        foreach ($data['data'] as $key => $value) {
-            $fees = $feesByDay[$value['order_time']] ?? [];
-            if (empty($fees)) {
-                $data['data'][$key]['total_amount'] = 0;
-                continue;
-            }
-
-            // 准备 time_amount(和详情逻辑一致)
-            $time_amount = [];
-            foreach ($fees as $f) {
-                if ($f['business_type_id'] == FreightFee::businessTypeNormal) {
-                    $k = $f['order_time'] . $f['area_hs'];
-                    $time_amount[$k]['amount'] = isset($time_amount[$k]['amount'])
-                        ? bcadd($f['freight_amount'], $time_amount[$k]['amount'], 4)
-                        : $f['freight_amount'];
-                    $time_amount[$k]['is_use'] = $time_amount[$k]['is_use'] ?? 0;
-                }
-            }
-
-            // 逐条算金额
-            $valueTotal = 0;
-            foreach ($fees as $f) {
-                $f = $this->calculateFreightFeeRow($f, $time_amount);
-                $valueTotal = bcadd($valueTotal, $f['total_amount'], 4);
-            }
-
-            $data['data'][$key]['total_amount'] = $valueTotal;
-
-            $order_time = $value['order_time'] ? date('Y-m-d',$value['order_time']) : '';
-            $data['data'][$key]['order_time_show'] = $order_time;
-            $data['data'][$key]['id'] = $value['order_time'];
+            $e = $emp_2[$value['supply_id']] ?? [];
+            $data['data'][$key]['organization_title'] = $e['organization_title'] ?? "";
+            $data['data'][$key]['supply_title'] = $e[$value['supply_id']] ?? '';
+            $data['data'][$key]['tl_ways_title'] = ReminderRecord::$tl_way_name[$value['tl_ways']] ?? "";
+            $data['data'][$key]['tl_result_title'] = ReminderRecord::$tl_result_name[$value['tl_result']] ?? "";
+            $data['data'][$key]['status_title'] = Reminder::$status_name[$value['status']] ?? "";
+            $data['data'][$key]['tl_arrived_time'] = $value['tl_arrived_time'] ? date("Y-m-d",$value['tl_arrived_time']): '';
+            $data['data'][$key]['tl_time'] = $value['tl_time'] ? date("Y-m-d",$value['tl_time']): '';
+            $data['data'][$key]['days'] = floor(abs($value['tl_time'] - $value['tl_arrived_time']) / 86400);
         }
 
         return $data;
     }
-
-    public function statisticsFreightFeeDetail($data, $user)
-    {
-        if (empty($data['order_time'])) {
-            return [false, '单据日期不能为空'];
-        }
-
-        $model = FreightFee::Clear($user,$data);
-        $fee = $model->where('del_time', 0)
-            ->where('order_time', $data['order_time'])
-            ->get()
-            ->toArray();
-
-        if (empty($fee)) {
-            return [false, '单据日期下暂无数据'];
-        }
-
-        // 按时间+地区聚合同一天、同地区的非退货配送费
-        $time_amount = [];
-        foreach ($fee as $value) {
-            if ($value['business_type_id'] == FreightFee::businessTypeNormal) {
-                $key = $value['order_time'] . $value['area_hs'];
-                $time_amount[$key]['amount'] = isset($time_amount[$key]['amount'])
-                    ? bcadd($value['freight_amount'], $time_amount[$key]['amount'], 4)
-                    : $value['freight_amount'];
-                $time_amount[$key]['is_use'] = $time_amount[$key]['is_use'] ?? 0;
-            }
-        }
-
-        $return = [];
-        foreach ($fee as $value) {
-            $value = $this->calculateFreightFeeRow($value, $time_amount);
-            $key = $value['order_time'] . '|' . $value['area_hs'];
-            $return[$value['business_type_id']][$key][] = $value;
-        }
-
-        $result = [];
-        // 需要合计的字段
-        $sumFields = ['xs', 'weight', 'freight_amount', 'js_amount', 'customer_store_zx_fee', 'jj_fee', 'dh_fee', 'total_amount'];
-        $sumFields_map = ['weight' => 4,'freight_amount' => 4, 'js_amount' => 4,'customer_store_zx_fee' => 4, 'jj_fee' => 4, 'dh_fee' => 4, 'total_amount' => 4];
-
-        // 业务类型 日期 地区 算一张表算运费
-        foreach ($return as $g => $group) {
-            $g_title = FreightFee::$business[$g] ?? "";
-            foreach ($group as $key => $val) {
-                $tmp_key = explode('|', $key);
-                $title = $tmp_key[1] . "(" . $g_title . ")";
-                // 计算合计
-                $sumRow = [];
-                foreach ($val as $key => $row) {
-                    $order_time = $row['order_time'] ? date('Y-m-d',$row['order_time']) : '';
-                    $val[$key]['order_time_show'] = $order_time;
-                    $val[$key]['is_present_show'] = $row['is_present'] ? '是' : '否';
-                    $delivery_mode_show = FreightFee::$delivery[$row['delivery_mode']] ?? "";
-                    $val[$key]['delivery_mode_show'] = $delivery_mode_show;
-                    $val[$key]['area_range_show'] = $row['area_range'] == 1 ? '1~5吨' : '5吨以上';
-                    foreach ($sumFields as $field) {
-                        $decimals = $sumFields_map[$field] ?? 2;
-                        $sumRow[$field] = isset($sumRow[$field])
-                            ? bcadd($sumRow[$field], $row[$field], $decimals)
-                            : $row[$field];
-                    }
-                }
-
-                // 末行合计行(非合计字段设为空字符串)
-                $footer = [];
-                foreach ($val[0] as $field => $v) {
-                    $footer[$field] = in_array($field, $sumFields) ? $sumRow[$field] : '';
-                }
-
-                $val[] = $footer;
-
-                $result[] = [
-                    'key' => $title,
-                    'list' => $val
-                ];
-            }
-        }
-
-        return [true, $result];
-    }
-
-    public function statisticsFreightFeeDetailsForExport($data, $user)
-    {
-        if (empty($data['order_time'])) return [];
-
-        $model = FreightFee::Clear($user, $data);
-        $orderTimes = is_array($data['order_time']) ? $data['order_time'] : [$data['order_time']];
-
-        $fee = $model->where('del_time', 0)
-            ->whereIn('order_time', $orderTimes)
-            ->get()
-            ->toArray();
-
-        // 表头定义(所有 sheet 通用)
-        $header = [
-            "仓库", "销货单备注", "业务类型", "销货单号", "销货日期", "客户",
-            "客户门店装车费单价", "业务员", "送货地址", "地区华商", "存货编码", "存货名称", "箱规",
-            "华商重量", "门店卸货费单价(华商)", "门店卸货费单价(华商)", "赠品", "货类(华商)", "运输方式",
-            "数量", "含税单价", "含税金额", "箱数", "总重量", "运价区间", "配送费单价", "配送费金额", "结算金额",
-            "门店卸货费", "上楼费", "加急费", "到货装卸费", "总金额"
-        ];
-
-        if (empty($fee)) {
-            // 返回每个请求的日期都带表头(只有表头),以便导出时每个 sheet 至少有表头
-            $resultEmpty = [];
-            foreach ($orderTimes as $ot) {
-                $dateKey = date('Y-m-d', $ot);
-                $resultEmpty[$dateKey] = [
-                    0 => $header
-                ];
-            }
-            return $resultEmpty;
-        }
-
-        // 按时间+地区聚合同一天、同地区的非退货配送费(用于 calculate 逻辑)
-        $time_amount = [];
-        foreach ($fee as $value) {
-            if ($value['business_type_id'] == FreightFee::businessTypeNormal) {
-                $key = $value['order_time'] . $value['area_hs'];
-                $time_amount[$key]['amount'] = isset($time_amount[$key]['amount'])
-                    ? bcadd($value['freight_amount'], $time_amount[$key]['amount'], 4)
-                    : $value['freight_amount'];
-                $time_amount[$key]['is_use'] = $time_amount[$key]['is_use'] ?? 0;
-            }
-        }
-
-        // 先按 order_time -> business_type_id -> (order_time|area_hs) 分组收集数据行
-        $grouped = [];
-        foreach ($fee as $value) {
-            $value = $this->calculateFreightFeeRow($value, $time_amount);
-            $key = $value['order_time'] . '|' . $value['area_hs'];
-            $grouped[$value['order_time']][$value['business_type_id']][$key][] = $value;
-        }
-
-        // 构造返回:每个日期一个 sheet(键为 YYYY-MM-DD),值为数值下标数组,0 为表头
-        $result = [];
-
-        // 需要合计的字段及小数位
-        $sumFields = ['xs','weight', 'freight_amount', 'js_amount', 'customer_store_zx_fee', 'jj_fee', 'dh_fee', 'total_amount'];
-        $sumFields_map = ['xs' => 0,'weight' => 4, 'freight_amount' => 4, 'js_amount' => 4, 'customer_store_zx_fee' => 4, 'jj_fee' => 4, 'dh_fee' => 4, 'total_amount' => 4];
-
-        // 初始化每个传入日期,确保即使某个日期无数据也有表头
-        foreach ($orderTimes as $ot) {
-            $dateKey = date('Y-m-d', $ot);
-            $result[$dateKey] = [];
-            $result[$dateKey][] = $header; // index 0 为表头
-        }
-
-        // 填充数据
-        foreach ($grouped as $order_time => $types) {
-            $dateKey = date('Y-m-d', $order_time);
-            // 若该日期未初始化(理论上不会),先初始化表头
-            if (!isset($result[$dateKey])) {
-                $result[$dateKey] = [];
-                $result[$dateKey][] = $header;
-            }
-
-            foreach ($types as $business_type_id => $group) {
-                $businessTitle = FreightFee::$business[$business_type_id] ?? '';
-                foreach ($group as $key => $rows) {
-                    // 每个 key 对应一组明细(按 area_hs 分组)
-                    $sumRow = []; // 用于该分组的合计
-
-                    foreach ($rows as $row) {
-                        $date_show = $row['order_time'] ? date('Y-m-d', $row['order_time']) : "";
-                        $is_present_show = !empty($row['is_present']) ? '是' : '否';
-                        $delivery_mode_show = FreightFee::$delivery[$row['delivery_mode']] ?? "";
-                        $area_range_show = isset($row['area_range']) && $row['area_range'] == 1 ? '1~5吨' : '5吨以上';
-
-                        // 单行数据(按你指定的字段顺序)
-                        $line = [
-                            $row['warehouse_name'] ?? '', // 仓库
-                            $row['mark'] ?? '', // 销货单备注
-                            $row['business_type_title'] ?? '', // 业务类型
-                            $row['order_number'] ?? '', // 销货单号
-                            $date_show, // 销货日期
-                            $row['customer_title'] ?? '', // 客户
-                            $row['customer_store_price'] ?? 0, // 客户门店装车费单价
-                            $row['employee_id_1_title'] ?? '', // 业务员
-                            $row['address'] ?? '', // 送货地址
-                            $row['area_hs'] ?? '', // 地区华商
-                            $row['product_code'] ?? '', // 存货编码
-                            $row['product_title'] ?? '', // 存货名称
-                            $row['product_box_size'] ?? '', // 箱规
-                            $row['product_weight'] ?? 0, // 华商重量
-                            $row['product_store_price'] ?? 0, // 门店卸货费单价(华商)
-                            $row['product_store_price2'] ?? 0, // 到货装卸费单价(华商)
-                            $is_present_show, // 赠品
-                            $row['product_category'] ?? '', // 货类(华商)
-                            $delivery_mode_show, // 运输方式
-                            $row['quantity'] ?? 0, // 数量
-                            $row['price_3'] ?? 0, // 含税单价
-                            $row['price_3_total'] ?? 0, // 含税金额
-                            number_format($row['xs'] ?? 0), // 箱数
-                            $row['weight'] ?? 0, // 总重量
-                            $area_range_show, // 运价区间
-                            $row['freight_unit_price'] ?? 0, // 配送费单价
-                            $row['freight_amount'] ?? 0, // 配送费金额
-                            $row['js_amount'] ?? 0, // 结算金额
-                            $row['customer_store_zx_fee'] ?? 0, // 门店卸货费
-                            $row['sl_fee'] ?? 0, // 上楼费
-                            number_format($row['jj_fee'] ?? 0, 2), // 加急费
-                            $row['dh_fee'] ?? 0, // 到货装卸费
-                            $row['total_amount'] ?? 0, // 总金额
-                        ];
-
-                        $result[$dateKey][] = $line;
-
-                        // 累加合计
-                        foreach ($sumFields as $field) {
-                            $decimals = $sumFields_map[$field] ?? 2;
-                            $sumRow[$field] = isset($sumRow[$field])
-                                ? bcadd($sumRow[$field], $row[$field], $decimals)
-                                : ($row[$field] ?? 0);
-                        }
-                    }
-
-                    // 添加本分组合计行(合计位置与表头列对齐,其它非合计字段留空)
-                    $totalLine = [
-                        '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
-                        $sumRow['xs'] ?? 0,
-                        $sumRow['weight'] ?? 0,
-                        '', '',
-                        $sumRow['freight_amount'] ?? 0, // 配送费金额合计
-                        $sumRow['js_amount'] ?? 0, // 结算金额合计
-                        $sumRow['customer_store_zx_fee'] ?? 0, // 门店卸货费合计
-                        $sumRow['sl_fee'] ?? 0, // 上楼费合计
-                        $sumRow['jj_fee'] ?? 0, // 加急费合计
-                        $sumRow['dh_fee'] ?? 0, // 到货装卸费合计
-                        $sumRow['total_amount'] ?? 0, // 总金额合计
-                    ];
-
-                    $result[$dateKey][] = $totalLine;
-                }
-            }
-        }
-
-        // 确保每个日期的数组是从 0 开始的连续下标(虽然我们已经按顺序 push,但为了保险)
-
-        return $result;
-    }
-
-    protected function calculateFreightFeeRow(array $value, array &$time_amount)
-    {
-        $key = $value['order_time'] . $value['area_hs'];
-        $js_amount = 0;
-
-        if ($value['business_type_id'] == FreightFee::businessTypeNormal) {
-            $tmp_total_arr = $time_amount[$key];
-
-            // 判断是否使用最低运费
-            if ($tmp_total_arr['amount'] < $value['min_freight_amount']) {
-                if (!$time_amount[$key]['is_use']) {
-                    $js_amount = $value['min_freight_amount'];
-                    $time_amount[$key]['is_use'] = 1;
-                }
-            } else {
-                $js_amount = $value['js_single_amount'];
-            }
-        } else {
-            $js_amount = $value['js_single_amount'];
-        }
-
-        $value['js_amount'] = $js_amount;
-
-        // 加急费
-        $jj_fee = 0;
-        if ($value['delivery_mode'] == FreightFee::deliveryModeRightNow) {
-            $jj_fee = bcmul($js_amount, 0.5, 4);
-        }
-        $value['jj_fee'] = $jj_fee;
-
-        // 总金额
-        $total_amount = bcadd($js_amount, $value['customer_store_zx_fee'], 4);
-        $total_amount = bcadd($total_amount, $value['sl_fee'], 4);
-        $total_amount = bcadd($total_amount, $jj_fee, 4);
-        $total_amount = bcadd($total_amount, $value['dh_fee'], 4);
-        $value['total_amount'] = $total_amount;
-
-        return $value;
-    }
 }

+ 50 - 14
config/header/77.php

@@ -7,31 +7,67 @@
 
 return [
     [
-        'key' =>'code',
-        'value' => '编码',
+        'key' =>'order_number',
+        'value' => '催单号',
     ],
     [
-        'key' =>'title',
-        'value' => '名称',
+        'key' =>'order_no',
+        'value' => '订单号',
     ],
     [
-        'key' =>'type_title',
-        'value' => '类型',
+        'key' =>'product_code',
+        'value' => '物料编码',
     ],
     [
-        'key' =>'score',
-        'value' => '分数',
+        'key' =>'product_title',
+        'value' => '物料名称',
     ],
     [
-        'key' =>'is_use_title',
-        'value' => '是否启用',
+        'key' =>'product_size',
+        'value' => '物料规格',
     ],
     [
-        'key' =>'crt_name',
-        'value' => '创建人',
+        'key' =>'product_unit',
+        'value' => '物料单位',
     ],
     [
-        'key' =>'crt_time',
-        'value' => '创建时间',
+        'key' =>'tl_quantity',
+        'value' => '提拉到货数量',
     ],
+    [
+        'key' =>'supply_title',
+        'value' => '人员',
+    ],
+    [
+        'key' =>'organization_title',
+        'value' => '组织',
+    ],
+    [
+        'key' =>'tl_arrived_time',
+        'value' => '提拉到货日期',
+    ],
+    [
+        'key' =>'tl_time',
+        'value' => '提拉应答日期',
+    ],
+    [
+        'key' =>'days',
+        'value' => '相差天数',
+    ],
+    [
+        'key' =>'tl_result_title',
+        'value' => '提拉结果',
+    ],
+    [
+        'key' =>'tl_ways_title',
+        'value' => '提拉方式',
+    ],
+    [
+        'key' =>'result_quantity',
+        'value' => '提拉应答数量',
+    ],
+    [
+        'key' =>'status_title',
+        'value' => '催单状态',
+    ]
 ];

+ 3 - 0
routes/api.php

@@ -147,6 +147,9 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('toDoDetail', 'Api\OrderController@toDoDetail');
     $route->any('toDoFinished', 'Api\OrderController@toDoFinished');
 
+    //报表
+    $route->any('valueStatistics', 'Api\StatisticsController@valueStatistics');
+
     //获取默认表头
     $route->any('getTableHead','Api\TableHeadController@tableHeadGet');
     //设置表头