Переглянути джерело

优化订单数据显示不全问题

liuhairui 1 день тому
батько
коміт
3ec4aa21ce
1 змінених файлів з 99 додано та 99 видалено
  1. 99 99
      application/api/controller/OrderSuperLoss.php

+ 99 - 99
application/api/controller/OrderSuperLoss.php

@@ -121,10 +121,10 @@ class OrderSuperLoss extends Api
     //             \think\Db::raw('(SELECT SUM(数量) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "包装" AND Mod_rq IS NULL) as 已完成数量'),
 
     //             // 生产组别 - 使用子查询
-    //             \think\Db::raw('(SELECT GROUP_CONCAT(DISTINCT SUBSTRING(sczl_jtbh, 3, 2) ORDER BY SUBSTRING(sczl_jtbh, 3, 2) SEPARATOR "、") 
-    //                         FROM 设备_产量计酬 
-    //                         WHERE 订单编号 = g.订单编号 
-    //                         AND 工序名称 = "车缝" 
+    //             \think\Db::raw('(SELECT GROUP_CONCAT(DISTINCT SUBSTRING(sczl_jtbh, 3, 2) ORDER BY SUBSTRING(sczl_jtbh, 3, 2) SEPARATOR "、")
+    //                         FROM 设备_产量计酬
+    //                         WHERE 订单编号 = g.订单编号
+    //                         AND 工序名称 = "车缝"
     //                         AND Mod_rq IS NULL) as 生产组别'),
 
     //             // 占位字段
@@ -162,108 +162,108 @@ class OrderSuperLoss extends Api
     //     $this->success('成功', $list);
     // }
     /**
- * 根据月份获取工单数据
- */
-public function getWorkOrdersByMonth()
-{
-    // 1. 请求方法校验
-    if (!$this->request->isGet()) {
-        return $this->error('请求错误');
-    }
+     * 根据月份获取工单数据
+     */
+    public function getWorkOrdersByMonth()
+    {
+        // 1. 请求方法校验
+        if (!$this->request->isGet()) {
+            return $this->error('请求错误');
+        }
 
-    // 2. 参数接收与严格校验
-    $rq = $this->request->get('rq', '', 'trim');
-    if (empty($rq) || !preg_match('/^\d{4}-\d{2}$/', $rq)) {
-        return $this->error('参数格式错误,请使用 YYYY-MM 格式');
-    }
+        // 2. 参数接收与严格校验
+        $rq = $this->request->get('rq', '', 'trim');
+        if (empty($rq) || !preg_match('/^\d{4}-\d{2}$/', $rq)) {
+            return $this->error('参数格式错误,请使用 YYYY-MM 格式');
+        }
+
+        // 3. 日期范围计算(安全、无歧义)
+        [$year, $month] = explode('-', $rq);
+        $start = "{$year}-{$month}-01 00:00:00";
+        $end = date('Y-m-01 00:00:00', strtotime("{$year}-{$month}-01 +1 month"));
+
+
+        $productSub = \think\Db::table('设备_产量计酬')
+            ->whereNull('Mod_rq')
+            ->group('订单编号')
+            ->field([
+                '订单编号',
+                "MIN(CASE WHEN 工序名称 = '裁剪' THEN sczl_rq END) AS 开裁日期",
+                "SUM(CASE WHEN 工序名称 = '裁剪' THEN 数量 END) AS 实裁数量",
+                "MIN(CASE WHEN 工序名称 = '车缝' THEN sczl_rq END) AS 上车位日期",
+                "MIN(CASE WHEN 工序名称 = '车缝' AND 尾包 = 1 THEN sczl_rq END) AS 车位完成日期",
+                "MIN(CASE WHEN 工序名称 = '手工' AND 尾包 = 1 THEN sczl_rq END) AS 后道完成日期",
+                "SUM(CASE WHEN 工序名称 = '包装' THEN 数量 END) AS 已完成数量",
+                // 修复长度限制
+                \think\Db::raw('GROUP_CONCAT(DISTINCT CASE WHEN 工序名称 = "车缝" THEN SUBSTRING(sczl_jtbh, 3, 2) END ORDER BY SUBSTRING(sczl_jtbh, 3, 2) SEPARATOR "、") AS 生产组别'),
+            ])
+            ->buildSql();
+
+
+        $stockSub = \think\Db::table('库存_出入库明细')
+            ->whereNull('Mod_rq') // 这里补上!
+            ->group('order_id')
+            ->field([
+                'order_id',
+                'MIN(CASE WHEN name = "入库" THEN rq END) AS 面料入库时间',
+            ])
+            ->buildSql();
 
-    // 3. 日期范围计算(安全、无歧义)
-    [$year, $month] = explode('-', $rq);
-    $start = "{$year}-{$month}-01 00:00:00";
-    $end = date('Y-m-01 00:00:00', strtotime("{$year}-{$month}-01 +1 month"));
-
-
-    $productSub = \think\Db::table('设备_产量计酬')
-        ->whereNull('Mod_rq')
-        ->group('订单编号')
-        ->field([
-            '订单编号',
-            "MIN(CASE WHEN 工序名称 = '裁剪' THEN sczl_rq END) AS 开裁日期",
-            "SUM(CASE WHEN 工序名称 = '裁剪' THEN 数量 END) AS 实裁数量",
-            "MIN(CASE WHEN 工序名称 = '车缝' THEN sczl_rq END) AS 上车位日期",
-            "MIN(CASE WHEN 工序名称 = '车缝' AND 尾包 = 1 THEN sczl_rq END) AS 车位完成日期",
-            "MIN(CASE WHEN 工序名称 = '手工' AND 尾包 = 1 THEN sczl_rq END) AS 后道完成日期",
-            "SUM(CASE WHEN 工序名称 = '包装' THEN 数量 END) AS 已完成数量",
-            // 修复长度限制
-            \think\Db::raw('GROUP_CONCAT(DISTINCT CASE WHEN 工序名称 = "车缝" THEN SUBSTRING(sczl_jtbh, 3, 2) END ORDER BY SUBSTRING(sczl_jtbh, 3, 2) SEPARATOR "、") AS 生产组别'),
-        ])
-        ->buildSql();
-
-
-    $stockSub = \think\Db::table('库存_出入库明细')
-        ->whereNull('Mod_rq') // 这里补上!
-        ->group('order_id')
-        ->field([
-            'order_id',
-            'MIN(CASE WHEN name = "入库" THEN rq END) AS 面料入库时间',
-        ])
-        ->buildSql();
-
-
-    $list = \think\Db::table('工单_基本资料')
-        ->alias('g')
-        ->Join([$productSub => 'p'], 'g.订单编号 = p.订单编号')
-        ->Join([$stockSub => 's'], 'g.订单编号 = s.order_id')
+
+        $list = \think\Db::table('工单_基本资料')
+            ->alias('g')
+            ->Join([$productSub => 'p'], 'g.订单编号 = p.订单编号', 'LEFT')
+            ->Join([$stockSub => 's'], 'g.订单编号 = s.order_id', 'LEFT')
             ->where('g.落货日期', '>=', $start)
             ->where('g.落货日期', '<', $end)
             ->whereNull('g.Mod_rq')
-        ->field([
-            'g.Uniqid',
-            'g.订单编号',
-            'g.审核 AS 核批',
-            'g.审核日期 AS 核批日期',
-            'g.接单日期 AS 下单日期',
-            'g.落货日期 AS 货期',
-            'g.生产款号 AS 款号',
-            'g.订单数量',
-            'g.工单入仓数量 AS 入库数量',
-            'g.款式',
-            'g.客户编号 AS 客人编号',
-            'g.辅料计划入库时间',
-            's.面料入库时间',
-            'p.开裁日期',
-            'p.实裁数量',
-            'p.上车位日期',
-            'p.车位完成日期',
-            'p.后道完成日期',
-            'p.已完成数量',
-            'p.生产组别',
-            \think\Db::raw('NULL AS 辅料入库时间'),
-            \think\Db::raw('NULL AS 台产'),
-            \think\Db::raw('NULL AS 产前样批核'),
-            \think\Db::raw('NULL AS 备注'),
-        ])
-        ->select();
-
-
-    $dateFields = [
-        '下单日期', '货期', '面料入库时间', '开裁日期',
-        '上车位日期', '车位完成日期', '后道完成日期'
-    ];
-
-    foreach ($list as &$item) {
-        foreach ($dateFields as $field) {
-            $item[$field] = !empty($item[$field]) ? date('Y-m-d', strtotime($item[$field])) : null;
+            ->field([
+                'g.Uniqid',
+                'g.订单编号',
+                'g.审核 AS 核批',
+                'g.审核日期 AS 核批日期',
+                'g.接单日期 AS 下单日期',
+                'g.落货日期 AS 货期',
+                'g.生产款号 AS 款号',
+                'g.订单数量',
+                'g.工单入仓数量 AS 入库数量',
+                'g.款式',
+                'g.客户编号 AS 客人编号',
+                'g.辅料计划入库时间',
+                's.面料入库时间',
+                'p.开裁日期',
+                'p.实裁数量',
+                'p.上车位日期',
+                'p.车位完成日期',
+                'p.后道完成日期',
+                'p.已完成数量',
+                'p.生产组别',
+                \think\Db::raw('NULL AS 辅料入库时间'),
+                \think\Db::raw('NULL AS 台产'),
+                \think\Db::raw('NULL AS 产前样批核'),
+                \think\Db::raw('NULL AS 备注'),
+            ])
+            ->select();
+
+
+        $dateFields = [
+            '下单日期', '货期', '面料入库时间', '开裁日期',
+            '上车位日期', '车位完成日期', '后道完成日期'
+        ];
+
+        foreach ($list as &$item) {
+            foreach ($dateFields as $field) {
+                $item[$field] = !empty($item[$field]) ? date('Y-m-d', strtotime($item[$field])) : null;
+            }
+            $item['实裁数量'] = (int)($item['实裁数量'] ?? 0);
+            $item['已完成数量'] = (int)($item['已完成数量'] ?? 0);
+            $item['订单数量'] = (int)($item['订单数量'] ?? 0);
+            $item['入库数量'] = (int)($item['入库数量'] ?? 0);
+            $item['生产组别'] = $item['生产组别'] ?? '';
         }
-        $item['实裁数量'] = (int)($item['实裁数量'] ?? 0);
-        $item['已完成数量'] = (int)($item['已完成数量'] ?? 0);
-        $item['订单数量'] = (int)($item['订单数量'] ?? 0);
-        $item['入库数量'] = (int)($item['入库数量'] ?? 0);
-        $item['生产组别'] = $item['生产组别'] ?? '';
-    }
 
-    return $this->success('成功', $list);
-}
+        return $this->success('成功', $list);
+    }
 
 }