liuhairui 1 giorno fa
parent
commit
c6b7ce2f19
1 ha cambiato i file con 57 aggiunte e 138 eliminazioni
  1. 57 138
      application/api/controller/Decision.php

+ 57 - 138
application/api/controller/Decision.php

@@ -430,6 +430,7 @@ class Decision extends Api
                 // 实际每小时车头产量 = 产量 / 设备运行工时
 //                $list[$key]['实际每小时车头产量'] = $runningHours > 0 ? round($output / $runningHours, 2) : 0;
 
+
                 //修正后公式
                 //实际每小时车头产量=产量/(设备运行工时-保养工时-打样总工时-装版总工时-异常停机工时)
                 $totalHours = $value['设备运行工时']
@@ -456,129 +457,6 @@ class Decision extends Api
      * @throws \think\db\exception\ModelNotFoundException
      * @throws \think\exception\DbException
      */
-//    public function ProcessOutputRate()
-//    {
-//        if (!$this->request->isGet()) {
-//            $this->error('请求错误');
-//        }
-//
-//        $param = $this->request->param();
-//        if (empty($param)) {
-//            $this->error('参数错误');
-//        }
-//
-//        // 工序分类
-////        $processOrder = [
-////            1 => ['name' => '胶印', 'keys' => ['胶印', '上光']],
-////            2 => ['name' => '卷凹', 'keys' => ['卷凹']],
-////            3 => ['name' => '圆烫', 'keys' => ['圆烫']],
-////            4 => ['name' => '圆切', 'keys' => ['圆切']],
-////            5 => ['name' => '烫模', 'keys' => ['烫金', '模切', '凹凸']],
-////            6 => ['name' => '丝印', 'keys' => ['丝印']],
-////            7 => ['name' => '喷码', 'keys' => ['喷码']],
-////            8 => ['name' => '单凹', 'keys' => ['单凹']],
-////            9 => ['name' => '覆膜', 'keys' => ['覆膜']]
-////        ];
-//        $sist = ['胶印车间','凹丝印车间','印后车间','检验车间'];
-//        $processOrder= \db('设备_基本资料')
-//            ->whereNotNull('设备编组')
-//            ->whereIn('使用部门',$sist)
-//            ->group('设备编组')
-//            ->column('rtrim(设备编组) as 设备编组');
-//
-//
-//        // 获取存在数据的月份
-//        $monthsWithData = \db('工单_质量考核汇总')
-//            ->where('sys_ny', 'like', $param['year'] . '%')
-//            ->column('distinct(sys_ny) as month');
-//
-//        // 初始化结果数组,按工序名称归类
-//        $result = [];
-//        foreach ($processOrder as $processId => $process) {
-//            $result[substr($process, 5, 6)] = [
-//                '01月' => '',
-//                '02月' => '',
-//                '03月' => '',
-//                '04月' => '',
-//                '05月' => '',
-//                '06月' => '',
-//                '07月' => '',
-//                '08月' => '',
-//                '09月' => '',
-//                '10月' => '',
-//                '11月' => '',
-//                '12月' => '',
-//                '平均值' => '0.00%'
-//            ];
-//        }
-//
-//        // 遍历每个月份
-//        foreach ($monthsWithData as $month) {
-//            foreach ($processOrder as $processId => $process) {
-//                // 查询该月份该工序的合格率数据
-//                $query = \db('工单_质量考核汇总')
-//                    ->alias('a')
-//                    ->join('工单_工艺资料 b', 'a.Gy0_gdbh = b.Gy0_gdbh AND a.印件及工序 = b.Gy0_yjno AND a.工序 = b.Gy0_gxh')
-//                    ->join('工单_印件资料 c', 'a.Gy0_gdbh = c.Yj_Gdbh AND a.印件及工序 = c.yj_Yjno')
-//                    ->join('成品入仓 d', 'a.Gy0_gdbh = d.jjcp_gdbh AND a.印件及工序 = d.jjcp_yjno')
-//                    ->join('设备_基本资料 e','a.sczl_jtbh = e.设备编号')
-////                    ->field('a.sys_ny,(1 - ((SUM(a.班组制程废品) + SUM(a.班组质检废品)) / SUM(a.班组产量))) * 100 as 合格率')
-//                    ->field('a.sys_ny,SUM(a.班组制程废品)/a.联数 as 制程废品,SUM(a.班组质检废品)/a.联数 as 质检废品,SUM(a.班组产量)/a.联数 as 产量')
-//                    ->where('e.设备编组',$process)
-//                    ->where('d.jjcp_smb', 'like', '末%')
-//                    ->where('a.sys_ny', $month)
-//                    ->group('a.sys_ny,a.Gy0_gdbh,a.印件及工序,a.工序');
-////                    ->group('a.sys_ny');
-//
-//                $res = $query->select();
-//                $data = ['sys_ny'=>'','制程废品'=>0, '质检废品'=>0, '产量'=>0];
-//                foreach ($res as $value) {
-//                    $data['sys_ny'] = $value['sys_ny'];
-//                    $data['制程废品'] += $value['制程废品'];
-//                    $data['质检废品'] += $value['质检废品'];
-//                    $data['产量'] += $value['产量'];
-//                }
-//                $records = [
-//                    'sys_ny' => $data['sys_ny'],
-//                    '合格率' => (1-(($data['制程废品']+$data['质检废品'])/$data['产量']))* 100
-//                ];
-////                halt($records);
-//                if (!empty($records)) {
-//                    $monthName = substr($month, 4, 2) . '月';
-//                    $result[substr($process, 5, 6)][$monthName] = sprintf("%.2f%%", $records['合格率']);
-//                }
-//            }
-//        }
-//
-//        // 计算年度平均值
-//        foreach ($result as $processName => &$processData) {
-//            $totalAnnual = 0;
-//            $monthCount = 0;
-//
-//            foreach ($processData as $month => $rate) {
-//                if ($month !== '平均值' && $rate !== '') {
-//                    $totalAnnual += floatval(str_replace('%', '', $rate));
-//                    $monthCount++;
-//                }
-//            }
-//
-//            if ($monthCount > 0) {
-//                $processData['平均值'] = sprintf("%.2f%%", $totalAnnual / $monthCount);
-//            }
-//        }
-//        unset($processData); // 关键修复:解除引用
-//
-//        // 转换为目标格式
-//        $formattedData = [];
-//        foreach ($result as $processName => $processData) {
-//            // 现在processData是独立值
-//            $formattedRow = array_merge(['工序类型' => $processName], $processData);
-//            $formattedData[] = $formattedRow;
-//        }
-//        // 返回JSON响应
-//       $this->success('成功',$formattedData);
-//    }
-
     public function ProcessOutputRate()
     {
         if (!$this->request->isGet()) {
@@ -598,7 +476,7 @@ class Decision extends Api
             ->group('设备编组')
             ->column('RTRIM(设备编组) as 设备编组');
         if (empty($processOrder)) {
-            $this->success('成功', []); // 没有设备直接返回
+            $this->success('成功', []);
         }
 
         // 2. 初始化结果数组(按工序)
@@ -612,7 +490,7 @@ class Decision extends Api
             $result[$key]['平均值'] = '0.00%';
         }
 
-        // 3. 汇总所有年份内数据,一次查出所有“工序-月份”数据,避免嵌套多次SQL
+        // 3. 汇总所有年份内数据,一次查出所有“工序-月份”数据
         $dataList = \db('工单_质量考核汇总')
             ->alias('a')
             ->join('工单_工艺资料 b', 'a.Gy0_gdbh = b.Gy0_gdbh AND a.印件及工序 = b.Gy0_yjno AND a.工序 = b.Gy0_gxh')
@@ -631,8 +509,36 @@ class Decision extends Api
             ])
             ->group('e.设备编组, a.sys_ny')
             ->select();
-        // 4. 处理统计数据,填充到$result
-        $annual = []; // 年均合格率累加用
+
+        //修正前计算方式
+//        // 4. 处理统计数据,填充到$result
+//        $annual = []; // 年均合格率累加用
+//        foreach ($dataList as $item) {
+//            $processKey = substr($item['设备编组'], 5, 6);
+//            $monthKey = substr($item['sys_ny'], 4, 2) . '月';
+//
+//            $output = floatval($item['产量']);
+//            $waste = floatval($item['制程废品']) + floatval($item['质检废品']);
+//            $rate = $output > 0 ? (1 - $waste / $output) * 100 : 0;
+//            $result[$processKey][$monthKey] = sprintf('%.2f%%', $rate);
+//
+//            if (!isset($annual[$processKey])) {
+//                $annual[$processKey] = ['sum' => 0, 'count' => 0];
+//            }
+//            $annual[$processKey]['sum'] += $rate;
+//            $annual[$processKey]['count']++;
+//        }
+//        // 5. 补充“平均值”
+//        foreach ($annual as $processKey => $v) {
+//            if ($v['count'] > 0) {
+//                $result[$processKey]['平均值'] = sprintf('%.2f%%', $v['sum']/$v['count']);
+//            }
+//        }
+
+        //修正后计算方式
+        // 【用于算平均值】
+        $yearTotal = [];
+        // 4. 处理每月数据
         foreach ($dataList as $item) {
             $processKey = substr($item['设备编组'], 5, 6);
             $monthKey = substr($item['sys_ny'], 4, 2) . '月';
@@ -642,27 +548,40 @@ class Decision extends Api
             $rate = $output > 0 ? (1 - $waste / $output) * 100 : 0;
             $result[$processKey][$monthKey] = sprintf('%.2f%%', $rate);
 
-            if (!isset($annual[$processKey])) {
-                $annual[$processKey] = ['sum' => 0, 'count' => 0];
+            // 【累计:总产量、总废品】
+            if (!isset($yearTotal[$processKey])) {
+                $yearTotal[$processKey] = [
+                    'totalOutput' => 0,
+                    'totalWaste'  => 0
+                ];
             }
-            $annual[$processKey]['sum'] += $rate;
-            $annual[$processKey]['count']++;
+            $yearTotal[$processKey]['totalOutput'] += $output;
+            $yearTotal[$processKey]['totalWaste']  += $waste;
         }
-        // 5. 补充“平均值”
-        foreach ($annual as $processKey => $v) {
-            if ($v['count'] > 0) {
-                $result[$processKey]['平均值'] = sprintf('%.2f%%', $v['sum']/$v['count']);
+
+        //打印总计
+//        echo "<pre>";
+//        print_r($yearTotal);
+//        echo "<pre>";
+
+        // 【平均值:用全年总和计算】
+        foreach ($yearTotal as $processKey => $val) {
+            $totalOutput = $val['totalOutput'];
+            $totalWaste = $val['totalWaste'];
+            if ($totalOutput > 0) {
+                $avgRate = (1 - $totalWaste / $totalOutput) * 100;
+                $result[$processKey]['平均值'] = sprintf('%.2f%%', $avgRate);
+            } else {
+                $result[$processKey]['平均值'] = '0.00%';
             }
         }
 
-        // 6. 转换为前端需要的格式
+        // 6. 转前端格式
         $formattedData = [];
         foreach ($result as $process => $data) {
             $row = array_merge(['工序类型' => $process], $data);
             $formattedData[] = $row;
         }
-
-        // 7. 返回
         $this->success('成功', $formattedData);
     }
     /**