Эх сурвалжийг харах

员工超节损汇总优化

qiuenguang 10 сар өмнө
parent
commit
c4ef4d6502

+ 40 - 102
application/api/controller/OrderSuperLoss.php

@@ -1164,84 +1164,8 @@ class OrderSuperLoss extends Api
      * @throws \think\db\exception\ModelNotFoundException
      * @throws \think\exception\DbException
      */
-//    public function EmployeeDataCollect()
-//    {
-//        if ($this->request->isPost() === false) {
-//            $this->error('请求错误');
-//        }
-//        $params = $this->request->post();
-//        if (empty($params)) {
-//            $this->error('参数错误');
-//        }
-//        $date = date('Ym', strtotime($params['date']));
-//        $list = \db('工单_质量考核汇总')
-//            ->alias('a')
-//            ->join('工单_印件资料 b', 'a.Gy0_gdbh = b.Yj_Gdbh AND a.印件及工序 = b.yj_Yjno')
-//            ->join('成品入仓 c', 'a.Gy0_gdbh = c.jjcp_gdbh AND a.印件及工序 = c.jjcp_yjno')
-//            ->where('a.sys_ny', $date)
-//            ->where(function ($query) {
-//                $query->where('b.质量考核', 0)
-//                    ->whereOr('b.质量考核', null);
-//            })
-//            ->where('c.jjcp_smb', 'like', '末%')
-//            ->select();
-//        $data = [];
-//
-//        foreach ($list as $item) {
-//            $workshop = $item["车间名称"] ?? '';
-//
-//            for ($i = 1; $i <= 8; $i++) {
-//                $bh = $item["sczl_bh{$i}"] ?? '';
-//                $xm = $item["Xm{$i}"] ?? '';
-//                $rateValue = $item["sczl_rate{$i}"] ?? '';
-//
-//                // 关键优化:如果分配比例为 0 或空,默认为 1
-//                $rate = (empty($rateValue) || (float)$rateValue == 0) ? 1 : (float)$rateValue;
-//                echo ($rate);echo '//';
-//                if (!empty($bh) && $bh !== '') {
-//                    $je = round((float)$item["CjsJe"] * $rate, 4);
-//                    $data[] = [
-//                        "bh" => $bh,
-//                        "xm" => $xm,
-//                        "je" => (float)number_format($je, 4, '.', ''),
-//                        "cj" => $workshop
-//                    ];
-//                }
-//            }
-//        }
-//        $result = [];
-//
-//        foreach ($data as $item) {
-//            $cj = $item['cj'];
-//            $bh = $item['bh'];
-//            $je = round($item['je'], 2); // 保留两位小数
-//
-//            if (!isset($result[$cj])) {
-//                $result[$cj] = [];
-//            }
-//
-//            if (isset($result[$cj][$bh])) {
-//                $result[$cj][$bh]['je'] += (float)$je;
-//            } else {
-//                $result[$cj][$bh] = [
-//                    'bh' => $bh,
-//                    'xm' => $item['xm'],
-//                    'je' => (float)$je,
-//                    'cj' => $cj
-//                ];
-//            }
-//        }
-//
-//        // 将每个车间的子数组转换为索引数组
-//        foreach ($result as $cjName => &$items) {
-//            $items = array_values($items);
-//        }
-//
-//        $this->success('成功', $result);
-//    }
     public function EmployeeDataCollect()
     {
-        // Validate request and parameters
         if ($this->request->isPost() === false) {
             $this->error('请求错误');
         }
@@ -1249,8 +1173,6 @@ class OrderSuperLoss extends Api
         if (empty($params)) {
             $this->error('参数错误');
         }
-
-        // Query data
         $date = date('Ym', strtotime($params['date']));
         $list = \db('工单_质量考核汇总')
             ->alias('a')
@@ -1263,47 +1185,63 @@ class OrderSuperLoss extends Api
             })
             ->where('c.jjcp_smb', 'like', '末%')
             ->select();
-
-        $result = [];
+        $data = [];
 
         foreach ($list as $item) {
             $workshop = $item["车间名称"] ?? '';
 
             for ($i = 1; $i <= 8; $i++) {
-                $bh = $item["sczl_bh{$i}"] ?? '';
-                $xm = $item["Xm{$i}"] ?? '';
-                $rateValue = $item["sczl_rate{$i}"] ?? '';
-                
-                $rate = (empty($rateValue) || (float)$rateValue == 0) ? 1 : (float)$rateValue;
-
-                if (!empty($bh)) {
-                    $je = round((float)$item["CjsJe"] * $rate, 4);
+                if (!empty($item["sczl_bh{$i}"]) && $item["sczl_bh{$i}"]!== ''){
+                    $bh = $item["sczl_bh{$i}"] ?? '';
+                    $xm = $item["Xm{$i}"] ?? '';
+                    $rateValue = $item["sczl_rate{$i}"] ?? '';
 
-                    if (!isset($result[$workshop])) {
-                        $result[$workshop] = [];
-                    }
-
-                    if (isset($result[$workshop][$bh])) {
-                        $result[$workshop][$bh]['je'] += $je;
-                    } else {
-                        $result[$workshop][$bh] = [
-                            'bh' => $bh,
-                            'xm' => $xm,
-                            'je' => $je,
-                            'cj' => $workshop
+                    // 关键优化:如果分配比例为 0 或空,默认为 1
+                    $rate = (empty($rateValue) || (float)$rateValue == 0) ? 1 : (float)$rateValue;
+                    if (!empty($bh) && $bh !== '') {
+                        $je = round((float)$item["CjsJe"] * $rate, 4);
+                        $data[] = [
+                            "bh" => $bh,
+                            "xm" => $xm,
+                            "je" => (float)number_format($je, 4, '.', ''),
+                            "cj" => $workshop
                         ];
                     }
                 }
+
             }
         }
+        $result = [];
+
+        foreach ($data as $item) {
+            $cj = $item['cj'];
+            $bh = $item['bh'];
+            $je = round($item['je'], 2); // 保留两位小数
 
-        foreach ($result as &$workshopData) {
-            $workshopData = array_values($workshopData);
+            if (!isset($result[$cj])) {
+                $result[$cj] = [];
+            }
+
+            if (isset($result[$cj][$bh])) {
+                $result[$cj][$bh]['je'] += (float)$je;
+            } else {
+                $result[$cj][$bh] = [
+                    'bh' => $bh,
+                    'xm' => $item['xm'],
+                    'je' => (float)$je,
+                    'cj' => $cj
+                ];
+            }
+        }
+        // 将每个车间的子数组转换为索引数组
+        foreach ($result as $cjName => &$items) {
+            $items = array_values($items);
         }
 
         $this->success('成功', $result);
     }
 
+
     /**
      * 单条工单超节损计算
      * @param $gdbh