Explorar o código

生产中心统计报表工序分类

unknown hai 9 meses
pai
achega
152011b99f
Modificáronse 1 ficheiros con 91 adicións e 73 borrados
  1. 91 73
      application/api/controller/Decision.php

+ 91 - 73
application/api/controller/Decision.php

@@ -439,17 +439,22 @@ class Decision extends Api
         }
 
         // 工序分类
-        $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' => ['覆膜']]
-        ];
+//        $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' => ['覆膜']]
+//        ];
+        $processOrder= \db('设备_基本资料')
+        ->whereNotNull('设备编组')
+        ->group('设备编组')
+        ->column('rtrim(设备编组) as 设备编组');
+
 
         // 获取存在数据的月份
         $monthsWithData = \db('工单_质量考核汇总')
@@ -459,7 +464,7 @@ class Decision extends Api
         // 初始化结果数组,按工序名称归类
         $result = [];
         foreach ($processOrder as $processId => $process) {
-            $result[$process['name']] = [
+            $result[substr($process, 5, 6)] = [
                 '01月' => '',
                 '02月' => '',
                 '03月' => '',
@@ -485,13 +490,15 @@ class Decision extends Api
                     ->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 合格率')
-                    ->where(function ($query) use ($process) {
-                        foreach ($process['keys'] as $key) {
-                            $query->whereOr('b.Gy0_gxmc', 'like', "%{$key}%");
-                        }
-                    })
+//                    ->where(function ($query) use ($process) {
+//                        foreach ($process as $key) {
+//                            $query->whereOr('b.Gy0_gxmc', 'like', "%{$key}%");
+//                        }
+//                    })
+                    ->where('e.设备编组',$process)
                     ->where('d.jjcp_smb', 'like', '末%')
                     ->where('a.sys_ny', $month)
                     ->group('a.sys_ny');
@@ -500,10 +507,11 @@ class Decision extends Api
 
                 if (!empty($records)) {
                     $monthName = substr($month, 4, 2) . '月';
-                    $result[$process['name']][$monthName] = sprintf("%.2f%%", $records[0]['合格率']);
+                    $result[substr($process, 5, 6)][$monthName] = sprintf("%.2f%%", $records[0]['合格率']);
                 }
             }
         }
+
         // 计算年度平均值
         foreach ($result as $processName => &$processData) {
             $totalAnnual = 0;
@@ -566,45 +574,41 @@ class Decision extends Api
             $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' => ['覆膜']]
-        ];
+        // 获取设备编组列表(已按编号排序)
+        $processGroups = \db('设备_基本资料')
+            ->whereNotNull('设备编组')
+            ->group('设备编组')
+            ->column('rtrim(设备编组) as 设备编组');
 
         // 构建基础查询
         $query = \db('工单_质量考核汇总')
-                ->alias('a')
-                ->field('
-                a.sczl_jtbh AS 机台编号,
-                a.Gy0_gdbh AS 工单编号,
-                a.印件及工序 AS 工序号,
-                a.产品名称 AS 印件名称,
-                a.工序 AS 工序,
-                a.工序名称,
-                b.Gy0_gxmc,
-                a.联数,
-                a.班组产量,
-                a.班组制程废品,
-                a.班组质检废品,
-                a.sczl_bzdh AS 班组编号,
-                b.印刷方式,
-                b.版距,
-                DATE_FORMAT(a.入仓日期, \'%Y%m\') AS 完工年月
-            ')
-                ->join('工单_工艺资料 b', 'a.Gy0_gdbh = b.Gy0_gdbh AND a.印件及工序 = b.Gy0_yjno AND a.工序 = b.Gy0_gxh')
-                ->join('成品入仓 c','a.Gy0_gdbh = c.jjcp_gdbh AND a.印件及工序 = c.jjcp_yjno')
-                ->where('a.sys_ny', 'like', $param['year'] . '%')
-                ->where('a.工序名称','not like','%机检%')
-                ->where('c.jjcp_smb','like','末%')
-                ->where('a.工序名称','not like','%拆片%');
+            ->alias('a')
+            ->field('
+            a.sczl_jtbh AS 机台编号,
+            a.Gy0_gdbh AS 工单编号,
+            a.印件及工序 AS 工序号,
+            a.产品名称 AS 印件名称,
+            a.工序 AS 工序,
+            a.工序名称,
+            b.Gy0_gxmc,
+            a.联数,
+            a.班组产量,
+            a.班组制程废品,
+            a.班组质检废品,
+            a.sczl_bzdh AS 班组编号,
+            b.印刷方式,
+            b.版距,
+            DATE_FORMAT(a.入仓日期, \'%Y%m\') AS 完工年月,
+            d.设备编组
+        ')
+            ->join('工单_工艺资料 b', 'a.Gy0_gdbh = b.Gy0_gdbh AND a.印件及工序 = b.Gy0_yjno AND a.工序 = b.Gy0_gxh')
+            ->join('成品入仓 c', 'a.Gy0_gdbh = c.jjcp_gdbh AND a.印件及工序 = c.jjcp_yjno')
+            ->join('设备_基本资料 d', 'a.sczl_jtbh = d.设备编号')
+            ->where('a.sys_ny', 'like', $param['year'] . '%')
+            ->where('a.工序名称', 'not like', '%机检%')
+            ->where('c.jjcp_smb', 'like', '末%')
+            ->where('a.工序名称', 'not like', '%拆片%');
+
         // 获取总数
         $total = clone $query;
         $total = $total->count();
@@ -613,44 +617,58 @@ class Decision extends Api
         $rawList = isset($param['page'], $param['limit'])
             ? $query->page($param['page'])->limit($param['limit'])->select()
             : $query->select();
+
+        // 构建分类映射表
+        $groupMap = [];
+        foreach ($processGroups as $index => $group) {
+            // 提取机组名称核心词(去除编号和"机组"字样)
+            $groupName = preg_replace('/^\d+、/', '', $group); // 移除开头编号
+            $coreName = str_replace('机组', '', $groupName);   // 移除尾部的"机组"
+            $groupMap[] = [
+                'id' => $index + 1,
+                'name' => $groupName,
+                'core' => $coreName
+            ];
+        }
+
         // 处理分类标记
         $processedList = [];
         foreach ($rawList as $item) {
-            $matched = false;
-
-            // 顺序匹配分类规则
-            foreach ($processOrder as $typeId => $rule) {
-                foreach ($rule['keys'] as $keyword) {
-                    if (strpos($item['Gy0_gxmc'], $keyword) !== false) {
-                        // 添加分类标记
-                        $item['type_id'] = $typeId;
-                        $item['type_name'] = $rule['name'];
-                        $processedList[] = $item;
-                        $matched = true;
-                        break 2; // 跳出两层循环
-                    }
+            foreach ($groupMap as $group) {
+                // 使用核心词进行模糊匹配
+                if (strpos($item['Gy0_gxmc'], $group['core']) !== false) {
+                    $item['type_id'] = $group['id'];
+                    $item['type_name'] = $group['name'];
+                    $processedList[] = $item;
+                    continue 2; // 匹配成功则跳出两层循环
                 }
             }
-
-            // 未匹配到分类的数据丢弃
+            // 未匹配的条目将被丢弃
         }
 
-        // 按分类顺序排序(保持1-8的顺序)
+        // 按分类ID排序
         usort($processedList, function($a, $b) {
             return $a['type_id'] <=> $b['type_id'];
         });
 
         // 返回结构
         $data['data'] = $processedList;
-        $data['total'] = $total;              // 原始总数
-        $data['filtered_total'] = count($processedList); // 实际有效数
+        $data['total'] = $total;
+        $data['filtered_total'] = count($processedList); 
 
         return count($processedList) > 0
             ? $this->success('成功', $data)
             : $this->error('未找到数据');
     }
 
-    //月度色度数导出
+
+    /**
+     * 月度色度数导出
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
     public function ChromaticityNumber()
     {
         if (!$this->request->isGet()) {