zck 2 ngày trước cách đây
mục cha
commit
9d5bf3f23b

+ 74 - 32
application/api/controller/Manufacture.php

@@ -1129,7 +1129,7 @@ class Manufacture extends Api
         ]);
     }
 
-    /**
+ /**
      * 样衣核批
      */
     public function Approval(){
@@ -1140,38 +1140,54 @@ class Manufacture extends Api
         if (empty($param)) {
             $this->error('参数错误');
         }
+        
         // 判断Uniqid是否为多个,多个以逗号分隔
         $uniqids = strpos($param['Uniqid'], ',') !== false ? explode(',', $param['Uniqid']) : [$param['Uniqid']];
-
-        if (!empty($param['rq'])) {
-            // 准备更新数据
-            $data = [
-                '审核日期' => $param['rq'],
-                '审核' => $param['sys_id'],
-            ];
-        }else{
+        
+        // 获取这些工单对应的月份(用于清除缓存)
+        $months = [];
+        
+        // 遍历所有Uniqid进行更新
+        foreach ($uniqids as $uniqid) {
+            // 先查询该工单的落货日期(货期),获取月份
+            $orderInfo = Db::table('工单_基本资料')
+                ->where('Uniqid', $uniqid)
+                ->field('落货日期')
+                ->find();
+            
+            if ($orderInfo && !empty($orderInfo['落货日期'])) {
+                $month = date('Y-m', strtotime($orderInfo['落货日期']));
+                $months[$month] = $month;
+            }
+            
             // 准备更新数据
             $data = [
-                '审核日期' => date('Y-m-d H:i:s'),
+                '审核日期' => !empty($param['rq']) ? $param['rq'] : date('Y-m-d H:i:s'),
                 '审核' => $param['sys_id'],
             ];
-        }
-        // 遍历所有Uniqid进行更新
-        foreach ($uniqids as $uniqid) {
-            $list = \db('工单_基本资料')
+            
+            // 执行更新
+            $res = Db::table('工单_基本资料')
                 ->where('Uniqid', $uniqid)
-                ->fetchSql(true)
                 ->update($data);
-            $res = \db()->query($list);
+            
             // 如果更新失败,直接返回错误
             if ($res === false) {
                 $this->error('审核失败');
             }
         }
+        
+        // 清除相关月份的缓存
+        foreach ($months as $month) {
+            $this->clearWorkOrderCache($month);
+        }
+        
         // 所有更新操作都成功时,返回成功
         $this->success('审核成功');
     }
 
+   
+
     /**
      * 订单状态及样衣批核
      */
@@ -1285,7 +1301,7 @@ class Manufacture extends Api
         $this->success('成功', $data);
     }
 
-    /**
+     /**
      * 辅料计划入库时间更新
      */
     public function AccessoriesInboundTime(){
@@ -1296,38 +1312,64 @@ class Manufacture extends Api
         if (empty($param)) {
             $this->error('参数错误');
         }
+        
         // 判断Uniqid是否为多个,多个以逗号分隔
         $uniqids = strpos($param['Uniqid'], ',') !== false ? explode(',', $param['Uniqid']) : [$param['Uniqid']];
-
-        if (!empty($param['rq'])) {
-            // 准备更新数据
-            $data = [
-                '辅料计划入库时间' => $param['rq'],
-                '辅料计划入库操作人' => $param['sys_id'],
-            ];
-        }else{
+        
+        // 获取这些工单对应的月份(用于清除缓存)
+        $months = [];
+        
+        // 遍历所有Uniqid进行更新
+        foreach ($uniqids as $uniqid) {
+            // 先查询该工单的落货日期(货期),获取月份
+            $orderInfo = Db::table('工单_基本资料')
+                ->where('Uniqid', $uniqid)
+                ->field('落货日期')
+                ->find();
+            
+            if ($orderInfo && !empty($orderInfo['落货日期'])) {
+                $month = date('Y-m', strtotime($orderInfo['落货日期']));
+                $months[$month] = $month; // 使用数组去重
+            }
+            
             // 准备更新数据
             $data = [
-                '辅料计划入库时间' => date('Y-m-d H:i:s'),
+                '辅料计划入库时间' => !empty($param['rq']) ? $param['rq'] : date('Y-m-d H:i:s'),
                 '辅料计划入库操作人' => $param['sys_id'],
             ];
-        }
-        // 遍历所有Uniqid进行更新
-        foreach ($uniqids as $uniqid) {
-            $list = \db('工单_基本资料')
+            
+            // 执行更新
+            $res = Db::table('工单_基本资料')
                 ->where('Uniqid', $uniqid)
-                ->fetchSql(true)
                 ->update($data);
-            $res = \db()->query($list);
+            
             // 如果更新失败,直接返回错误
             if ($res === false) {
                 $this->error('更新辅料计划入库时间失败');
             }
         }
+        
+        // 清除相关月份的缓存
+        foreach ($months as $month) {
+            $this->clearWorkOrderCache($month);
+        }
+        
         // 所有更新操作都成功时,返回成功
         $this->success('更新成功');
     }
 
+     /**
+     * 清除工单数据缓存(内部方法)
+     * @param string $rq 月份(Y-m格式)
+     */
+    private function clearWorkOrderCache($rq)
+    {
+        if (empty($rq)) return;
+        
+        $cacheKey = 'work_orders_' . $rq;
+        cache($cacheKey, null);
+    }
+
     /**
      * 月度客户订单汇总
      */

+ 78 - 52
application/api/controller/OrderSuperLoss.php

@@ -78,63 +78,65 @@ class OrderSuperLoss extends Api
             $this->error('参数格式错误,请使用 YYYY-MM 格式');
         }
 
+        // 生成缓存key
+        $cacheKey = 'work_orders_' . $rq;
+        
+        // 尝试从缓存获取
+        $cachedData = cache($cacheKey);
+        if ($cachedData !== false) {
+            $this->success('成功', $cachedData);
+            return;
+        }
+
         // 计算月份起止日期
         list($year, $month) = explode('-', $rq);
         $start = "{$year}-{$month}-01";
         $end = date('Y-m-d', strtotime("{$year}-{$month}-01 +1 month"));
 
-        $list = \think\Db::table('工单_基本资料')
-            ->alias('g')
-            ->join('库存_出入库明细 d', 'g.订单编号 = d.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.辅料计划入库时间 as 辅料计划入库时间',
-
-                // 面料入库时间 - 使用子查询避免重复
-                \think\Db::raw('(SELECT MIN(rq) FROM 库存_出入库明细 WHERE order_id = g.订单编号 AND name = "入库") as 面料入库时间'),
-
-                // 裁剪相关 - 使用子查询
-                \think\Db::raw('(SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "裁剪" AND Mod_rq IS NULL) as 开裁日期'),
-                \think\Db::raw('(SELECT SUM(数量) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "裁剪" AND Mod_rq IS NULL) as 实裁数量'),
-
-                // 车缝相关 - 使用子查询
-                \think\Db::raw('(SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "车缝" AND Mod_rq IS NULL) as 上车位日期'),
-                \think\Db::raw('(SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "车缝" AND 尾包 = 1 AND Mod_rq IS NULL) as 车位完成日期'),
-
-                // 后道相关 - 使用子查询
-                \think\Db::raw('(SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "手工" AND 尾包 = 1 AND Mod_rq IS NULL) as 后道完成日期'),
-
-                // 包装完成数量 - 使用子查询
-                \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 工序名称 = "车缝" 
-                            AND Mod_rq IS NULL) as 生产组别'),
-
-                // 占位字段
-                \think\Db::raw('NULL as 辅料入库时间'),
-                \think\Db::raw('NULL as 台产'),
-                \think\Db::raw('NULL as 产前样批核'),
-                \think\Db::raw('NULL as 备注'),
-            ])
-            ->group('g.订单编号')
-            ->select();
+        // 使用原生SQL查询,避免框架对中文字段名的校验
+        $sql = "SELECT 
+                    g.Uniqid,
+                    g.订单编号,
+                    g.审核 as 核批,
+                    g.审核日期 as 核批日期,
+                    g.接单日期 as 下单日期,
+                    g.落货日期 as 货期,
+                    g.生产款号 as 款号,
+                    g.订单数量,
+                    g.工单入仓数量 as 入库数量,
+                    g.款式,
+                    g.客户编号 as 客人编号,
+                    g.辅料计划入库时间 as 辅料计划入库时间,
+                    
+                    (SELECT MIN(rq) FROM 库存_出入库明细 WHERE order_id = g.订单编号 AND name = '入库') as 面料入库时间,
+                    
+                    (SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '裁剪' AND Mod_rq IS NULL) as 开裁日期,
+                    (SELECT SUM(数量) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '裁剪' AND Mod_rq IS NULL) as 实裁数量,
+                    
+                    (SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '车缝' AND Mod_rq IS NULL) as 上车位日期,
+                    (SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '车缝' AND 尾包 = 1 AND Mod_rq IS NULL) as 车位完成日期,
+                    
+                    (SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '手工' AND 尾包 = 1 AND Mod_rq IS NULL) as 后道完成日期,
+                    
+                    (SELECT SUM(数量) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '包装' AND Mod_rq IS NULL) as 已完成数量,
+                    
+                    (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 生产组别,
+                    
+                    NULL as 辅料入库时间,
+                    NULL as 台产,
+                    NULL as 产前样批核,
+                    NULL as 备注
+                    
+                FROM 工单_基本资料 g
+                WHERE g.落货日期 >= '{$start}'
+                    AND g.落货日期 < '{$end}'
+                    AND g.Mod_rq IS NULL
+                GROUP BY g.订单编号
+                ORDER BY g.落货日期 ASC";
+
+        $list = Db::query($sql);
 
         if (empty($list)) {
             $this->success('', []);
@@ -159,8 +161,32 @@ class OrderSuperLoss extends Api
             $item['入库数量'] = intval($item['入库数量'] ?? 0);
         }
 
+        // 存入缓存,有效期1小时
+        cache($cacheKey, $list, 3600);
+
         $this->success('成功', $list);
     }
 
+    /**
+     * 清除工单数据缓存
+     * @param string $rq 月份(Y-m格式),为空则清除所有当前月份的缓存
+     */
+    public function clearWorkOrderCache()
+    {
+        $rq = $this->request->get('rq');
+        if (empty($rq)) {
+            $this->error('请指定要清除缓存的月份');
+        }
+        
+        if (!preg_match('/^\d{4}-\d{2}$/', $rq)) {
+            $this->error('参数格式错误,请使用 YYYY-MM 格式');
+        }
+        
+        $cacheKey = 'work_orders_' . $rq;
+        cache($cacheKey, null);
+        
+        $this->success('缓存已清除');
+    }
+
 }