Jelajahi Sumber

超节损列表

qiuenguang 11 bulan lalu
induk
melakukan
b433ed1a4f
1 mengubah file dengan 58 tambahan dan 48 penghapusan
  1. 58 48
      application/api/controller/OrderSuperLoss.php

+ 58 - 48
application/api/controller/OrderSuperLoss.php

@@ -56,24 +56,24 @@ class OrderSuperLoss extends Api
                     date DESC,  
                     编号 ASC;";
         $data = Db::query($sql);
-        $data = \db('工单_质量考核汇总')
-            ->field([
-                'sys_ny AS date',
-                'CASE   
-            WHEN 产品代号 REGEXP \'[A-Za-z]\' THEN LEFT(产品代号, 5)   
-            ELSE LEFT(产品代号, 4)   
-        END AS 编号',
-                '客户名称',
-                'COUNT(DISTINCT Gy0_gdbh) AS count'
-            ])
-            ->group('编号, date')
-            ->order('date desc,编号')
-            ->select();
+//        $data = \db('工单_质量考核汇总')
+//            ->field([
+//                'sys_ny AS date',
+//                'CASE
+//            WHEN 产品代号 REGEXP \'[A-Za-z]\' THEN LEFT(产品代号, 5)
+//            ELSE LEFT(产品代号, 4)
+//        END AS 编号',
+//                '客户名称',
+//                'COUNT(DISTINCT Gy0_gdbh) AS count'
+//            ])
+//            ->group('编号, date')
+//            ->order('date desc,编号')
+//            ->select();
         // 创建一个新数组来存储整理后的数据
         $organizedData = [];
         // 遍历原始数据
         foreach ($data as $entry) {
-            $date = $entry['date'];
+            $date = date('Ym',strtotime($entry['date']));
 
             // 检查日期是否在已整理数据中存在
             if (isset($organizedData[$date])) {
@@ -1673,54 +1673,60 @@ class OrderSuperLoss extends Api
         if (!empty($params['code'])) {
             // 根据产品代号是否含有字母确定匹配长度
             $prefixLength = preg_match('/[A-Za-z]/', $params['code']) ? 5 : 4;
-            $where['产品代号'] = ['LIKE', substr($params['code'], 0, $prefixLength) . '%'];
+            $where['a.jjcp_cpdh'] = ['LIKE', substr($params['code'], 0, $prefixLength) . '%'];
         }
 
         if (!empty($params['date'])) {
-            $where['sys_ny'] = $params['date'];
+            $year = substr($params['date'], 0, 4); // 取前4位作为年份
+            $month = substr($params['date'], 4, 2); // 取后2位作为月份
+
+            // 格式化为需要的值
+            $formattedDate = $year . '-' . $month;
+            $where['a.jjcp_sj'] = ['like',$formattedDate.'%'];
         }
 
         if (!empty($params['search'])) {
             if (!empty($params['date']) || !empty($params['code'])) {
                 $this->error('参数错误');
             }
-            $where['Gy0_gdbh|产品名称|产品代号'] = ['like', '%' . $params['search'] . '%'];
+            $where['a.jjcp_gdbh|a.jjcp_cpdh|a.jjcp_cpmc'] = ['like', '%' . $params['search'] . '%'];
         }
 
         // 定义字段
         $field = '  
-        sys_ny,  
-        Gy0_gdbh AS Gd_gdbh,  
-        `印件及工序` AS jjcp_yjno,  
-        `印件及工序` AS yj_Yjno,  
-        `联数` AS yj_ls,  
-        `产品代号` AS 成品编码,  
-        `产品名称` AS 成品名称,  
-        `实际投料`,  
-        `计量单位`,  
-        DATE(`入仓日期`) AS warehousing_date,  
-        `入仓数量` AS warehousing_num,  
-        SUM(DISTINCT `计划损耗`) AS `工单计划损耗`,  
-        `废品合计`,  
-        SUM(`CjsJe`) AS reward_money,  
-        `印件无形损` AS 工单无形损,  
-        `材料废`,  
-        `零头处理`,  
-        `外发废`,  
-        SUM(`班组制程废品`) AS zcfp,  
-        `班组分摊质检废品` AS 工单质检废  
+        b.sys_ny,  
+        a.jjcp_gdbh AS Gd_gdbh,  
+        a.jjcp_yjno AS jjcp_yjno,  
+        a.jjcp_yjno AS yj_Yjno,  
+        c.yj_ls AS yj_ls,  
+        c.yj_cpdh AS 成品编码,  
+        c.yj_yjmc AS 成品名称,  
+        b.`实际投料`,  
+        b.`计量单位`,  
+        DATE(a.jjcp_sj) AS warehousing_date,  
+        SUM(a.jjcp_sl) AS warehousing_num,  
+        SUM(DISTINCT b.`计划损耗`) AS `工单计划损耗`,  
+        b.`废品合计`,  
+        SUM(b.`CjsJe`) AS reward_money,  
+        b.`印件无形损` AS 工单无形损,  
+        b.`材料废`,  
+        b.`零头处理`,  
+        b.`外发废`,  
+        SUM(b.`班组制程废品`) AS zcfp,  
+        b.`班组分摊质检废品` AS 工单质检废  
     ';
-
-        // 查询数据
-        $list = \db('工单_质量考核汇总')
+        $list = \db('成品入仓')
+            ->alias('a')
+            ->join('工单_质量考核汇总 b','a.jjcp_gdbh = b.Gy0_gdbh AND a.jjcp_yjno = b.印件及工序','left')
+            ->join('工单_印件资料 c','a.jjcp_gdbh = c.Yj_Gdbh AND a.jjcp_yjno = c.yj_Yjno')
             ->field($field)
             ->where($where)
-            ->group('Gy0_gdbh, `印件及工序`')
-            ->order('sys_rq DESC')
+            ->where('a.jjcp_smb','like','末%')
+            ->group('b.Gy0_gdbh, b.`印件及工序`')
+            ->order('b.sys_rq DESC')
             ->page($pages)
             ->limit($limit)
             ->select();
-
         // 处理查询结果
         foreach ($list as $key => $value) {
             $status = \db('工单_印件资料')
@@ -1730,11 +1736,15 @@ class OrderSuperLoss extends Api
 
             $list[$key]['质量考核'] = $status;
             $list[$key]['考核'] = ($status == 1) ? '否' : '是';
-
-            $actualMaterial = $value['实际投料'] * 10000;
-            $list[$key]['target_rate'] = $this->calculateRate($actualMaterial, $value['工单计划损耗']);
-            $list[$key]['real_rate'] = $value['warehousing_num']/($value['实际投料']*10000)*100;
-            $list[$key]['real_rate'] = number_format($list[$key]['real_rate'], 2).'%';
+            if ($value['实际投料'] !== null){
+                $actualMaterial = $value['实际投料'] * 10000;
+                $list[$key]['target_rate'] = $this->calculateRate($actualMaterial, $value['工单计划损耗']);
+                $list[$key]['real_rate'] = $value['warehousing_num']/($value['实际投料']*10000)*100;
+                $list[$key]['real_rate'] = number_format($list[$key]['real_rate'], 2).'%';
+            }else{
+                $list[$key]['target_rate'] = null;
+                $list[$key]['real_rate'] = null;
+            }
             $list[$key]['reward_rate'] = '1'; // or some logic if needed
         }