Quellcode durchsuchen

工单超节损

qiuenguang vor 1 Jahr
Ursprung
Commit
bdc68e4def
1 geänderte Dateien mit 173 neuen und 63 gelöschten Zeilen
  1. 173 63
      application/api/controller/OrderSuperLoss.php

+ 173 - 63
application/api/controller/OrderSuperLoss.php

@@ -56,11 +56,24 @@ class OrderSuperLoss extends Api
                     date DESC,  
                     date DESC,  
                     编号 ASC;";
                     编号 ASC;";
         $data = Db::query($sql);
         $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();
         // 创建一个新数组来存储整理后的数据
         // 创建一个新数组来存储整理后的数据
         $organizedData = [];
         $organizedData = [];
         // 遍历原始数据
         // 遍历原始数据
         foreach ($data as $entry) {
         foreach ($data as $entry) {
-            $date = date('Ym',strtotime($entry['date']));
+            $date = $entry['date'];
 
 
             // 检查日期是否在已整理数据中存在
             // 检查日期是否在已整理数据中存在
             if (isset($organizedData[$date])) {
             if (isset($organizedData[$date])) {
@@ -90,7 +103,7 @@ class OrderSuperLoss extends Api
         $finalData = [];
         $finalData = [];
         foreach ($organizedData as $date => $entries) {
         foreach ($organizedData as $date => $entries) {
             $totalCount = $entries['total_count'];
             $totalCount = $entries['total_count'];
-            $index = $date . '-' . $totalCount;
+            $index = $date;
             unset($entries['total_count']);
             unset($entries['total_count']);
             $finalData[$index] = $entries;
             $finalData[$index] = $entries;
         }
         }
@@ -1631,61 +1644,154 @@ class OrderSuperLoss extends Api
 
 
 
 
     //超节损列表
     //超节损列表
+//    public function getList()
+//    {
+//        if (Request::instance()->isGet() == false) {
+//            $this->error('非法请求');
+//        }
+//        $params = Request::instance()->param();
+//        $where = [];
+//        if (!empty($params['code'])) {
+//            if (!empty($params['search'])) {
+//                $this->error('参数错误');
+//            }
+//            $where['产品代号'] = $params['code'];
+//        }
+//        if (!empty($params['date'])) {
+//            if (!empty($params['search'])) {
+//                $this->error('参数错误');
+//            }
+//            $where['sys_ny' ] = $params['date'];
+//        }
+//        if (!empty($params['search'])) {
+//            if (!empty($params['date']) || !empty($params['code'])) {
+//                $this->error('参数错误');
+//            }
+//            $where['Gy0_gdbh|产品名称|产品代号'] = array('like','%'.$params['search'].'%');
+//        }
+//        $limit = $params['limit'];
+//        if (empty($limit)){
+//            $limit = 15;
+//        }
+//        $pages = $params['page'];
+//        if (empty($pages)){
+//            $pages = 1;
+//        }
+//        // 定义字段
+//        $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 工单质检废
+//        ';
+//        $list = \db('工单_质量考核汇总')
+//            ->field($field)
+//            ->where($where)
+//            ->group('Gy0_gdbh, `印件及工序`')
+//            ->order('sys_rq DESC')
+//            ->page($pages)
+//            ->limit($limit)
+//            ->select();
+//        foreach ($list as $key=>$value){
+//            $status = \db('工单_印件资料')
+//                ->where('Yj_Gdbh',$value['Gd_gdbh'])
+//                ->where('yj_Yjno',$value['jjcp_yjno'])
+//                ->value('质量考核');
+//            $list[$key]['质量考核'] = $status;
+//            if ($status == 1){
+//                $list[$key]['考核'] = '否';
+//            }else{
+//                $list[$key]['考核'] = '是';
+//            }
+//            $value['实际投料'] = $value['实际投料']*10000;
+//            //目标合格率
+//            $list[$key]['target_rate'] = ($value['实际投料']-$value['工单计划损耗'])/$value['实际投料']*100;
+//            $list[$key]['target_rate'] = number_format($list[$key]['target_rate'],2);
+//            $list[$key]['target_rate'] = $list[$key]['target_rate'].'%';
+//            //实际合格率
+//            $list[$key]['real_rate'] = ($value['实际投料']-$value['废品合计'])/$value['实际投料']*100;
+//            $list[$key]['real_rate'] = number_format($list[$key]['real_rate'],2);
+//            $list[$key]['real_rate'] = $list[$key]['real_rate'].'%';
+//            $list[$key]['reward_rate'] = '1';
+//        }
+//        if (!empty($list)){
+//            $this->success('成功',$list);
+//        }else{
+//            $this->error('未找到数据');
+//        }
+//    }
     public function getList()
     public function getList()
     {
     {
-        if (Request::instance()->isGet() == false) {
+        if (!Request::instance()->isGet()) {
             $this->error('非法请求');
             $this->error('非法请求');
         }
         }
+
         $params = Request::instance()->param();
         $params = Request::instance()->param();
         $where = [];
         $where = [];
+
+        // 设置默认分页和限制
+        $limit = empty($params['limit']) ? 15 : intval($params['limit']);
+        $pages = empty($params['page']) ? 1 : intval($params['page']);
+
+        // 构建查询条件
         if (!empty($params['code'])) {
         if (!empty($params['code'])) {
-            if (!empty($params['search'])) {
-                $this->error('参数错误');
-            }
+            // 根据产品代号是否含有字母确定匹配长度
+            $prefixLength = preg_match('/[A-Za-z]/', $params['code']) ? 5 : 4;
+            $where['产品代号'] = ['LIKE', substr($params['code'], 0, $prefixLength) . '%'];
         }
         }
+
         if (!empty($params['date'])) {
         if (!empty($params['date'])) {
-            if (!empty($params['search'])) {
-                $this->error('参数错误');
-            }
-            $where['sys_ny' ] = $params['date'];
+            $where['sys_ny'] = $params['date'];
         }
         }
+
         if (!empty($params['search'])) {
         if (!empty($params['search'])) {
             if (!empty($params['date']) || !empty($params['code'])) {
             if (!empty($params['date']) || !empty($params['code'])) {
                 $this->error('参数错误');
                 $this->error('参数错误');
             }
             }
-            $where['Gy0_gdbh|产品名称|产品代号'] = array('like','%'.$params['search'].'%');
-        }
-        $limit = $params['limit'];
-        if (empty($limit)){
-            $limit = 15;
-        }
-        $pages = $params['page'];
-        if (empty($pages)){
-            $pages = 1;
+            $where['Gy0_gdbh|产品名称|产品代号'] = ['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 工单质检废
-        ';
+        $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 工单质检废  
+    ';
+
+        // 查询数据
         $list = \db('工单_质量考核汇总')
         $list = \db('工单_质量考核汇总')
             ->field($field)
             ->field($field)
             ->where($where)
             ->where($where)
@@ -1694,35 +1800,39 @@ class OrderSuperLoss extends Api
             ->page($pages)
             ->page($pages)
             ->limit($limit)
             ->limit($limit)
             ->select();
             ->select();
-        foreach ($list as $key=>$value){
+
+        // 处理查询结果
+        foreach ($list as $key => $value) {
             $status = \db('工单_印件资料')
             $status = \db('工单_印件资料')
-                ->where('Yj_Gdbh',$value['Gd_gdbh'])
-                ->where('yj_Yjno',$value['jjcp_yjno'])
+                ->where('Yj_Gdbh', $value['Gd_gdbh'])
+                ->where('yj_Yjno', $value['jjcp_yjno'])
                 ->value('质量考核');
                 ->value('质量考核');
+
             $list[$key]['质量考核'] = $status;
             $list[$key]['质量考核'] = $status;
-            if ($status == 1){
-                $list[$key]['考核'] = '否';
-            }else{
-                $list[$key]['考核'] = '是';
-            }
-            $value['实际投料'] = $value['实际投料']*10000;
-            //目标合格率
-            $list[$key]['target_rate'] = ($value['实际投料']-$value['工单计划损耗'])/$value['实际投料']*100;
-            $list[$key]['target_rate'] = number_format($list[$key]['target_rate'],2);
-            $list[$key]['target_rate'] = $list[$key]['target_rate'].'%';
-            //实际合格率
-            $list[$key]['real_rate'] = ($value['实际投料']-$value['废品合计'])/$value['实际投料']*100;
-            $list[$key]['real_rate'] = number_format($list[$key]['real_rate'],2);
-            $list[$key]['real_rate'] = $list[$key]['real_rate'].'%';
-            $list[$key]['reward_rate'] = '1';
-        }
-        if (!empty($list)){
-            $this->success('成功',$list);
-        }else{
+            $list[$key]['考核'] = ($status == 1) ? '否' : '是';
+
+            $actualMaterial = $value['实际投料'] * 10000;
+            $list[$key]['target_rate'] = $this->calculateRate($actualMaterial, $value['工单计划损耗']);
+            $list[$key]['real_rate'] = $this->calculateRate($actualMaterial, $value['废品合计']);
+            $list[$key]['reward_rate'] = '1'; // or some logic if needed
+        }
+
+        if (!empty($list)) {
+            $this->success('成功', $list);
+        } else {
             $this->error('未找到数据');
             $this->error('未找到数据');
         }
         }
     }
     }
 
 
+// 计算合格率
+    private function calculateRate($actual, $loss)
+    {
+        if ($actual == 0) {
+            return '0.00%'; // 防止除以零
+        }
+        $rate = ($actual - $loss) / $actual * 100;
+        return number_format($rate, 2) . '%';
+    }
     //工序超节损
     //工序超节损
     public function ProcessLoss()
     public function ProcessLoss()
     {
     {