liuhairui 9 månader sedan
förälder
incheckning
7193006b83

+ 18 - 42
application/api/controller/Manufacture.php

@@ -1008,31 +1008,6 @@ class Manufacture extends Api
         }
 
         $this->success('成功', $formattedData);
-
-//        // 按生产工序排序
-//        foreach ($formattedData as $yearMonth => &$processData) {
-//            // 确保每个月的工序顺序符合 $processList(即使为空也保留顺序)
-//            $sortedProcessData = array_fill_keys($processList, []);
-//
-//            // 合并原有数据
-//            foreach ($processData as $process => $machines) {
-//                $sortedProcessData[$process] = $machines;
-//            }
-//
-//            // 更新排序后的数据
-//            $processData = $sortedProcessData;
-//
-//            // 对每组内的设备日期倒序排列
-//            foreach ($processData as $process => &$machines) {
-//                foreach ($machines as $machineKey => &$dates) {
-//                    rsort($dates); // 每台设备的日期倒序排序
-//                }
-//            }
-//
-//        }
-//
-//        // 返回成功结果
-//        $this->success('成功', $formattedData);
     }
 
 
@@ -1287,6 +1262,9 @@ class Manufacture extends Api
     }
 
 
+    /**
+     * 月度车间报工汇总-详情数据
+     */
 //    public function MachineDetail()
 //    {
 //        if ($this->request->isGet() === false) {$this->error('请求错误');}
@@ -1402,13 +1380,8 @@ class Manufacture extends Api
 
     /**
      * 工单审核
-     * @return void
-     * @throws \think\Exception
-     * @throws \think\db\exception\BindParamException
-     * @throws \think\exception\PDOException
      */
-    public function Approval()
-    {
+    public function Approval(){
         if ($this->request->isPost() === false) {
             $this->error('请求错误');
         }
@@ -1416,26 +1389,29 @@ class Manufacture extends Api
         if (empty($param)) {
             $this->error('参数错误');
         }
-        // 判断sys_id是否为多个,多个以逗号分隔
-        $sys_ids = strpos($param['sys_id'], ',') !== false ? explode(',', $param['sys_id']) : [$param['sys_id']];
-        $data['审核日期'] = date('Y-m-d H:i:s');
-        // 遍历所有sys_id进行更新
-        foreach ($sys_ids as $sys_id) {
-            $data['审核'] = $sys_id;
-            $sql = \db('工单_基本资料')
-                ->where('Uniqid', $param['Uniqid'])
+        // 判断Uniqid是否为多个,多个以逗号分隔
+        $uniqids = strpos($param['Uniqid'], ',') !== false ? explode(',', $param['Uniqid']) : [$param['Uniqid']];
+        // 准备更新数据
+        $data = [
+            '审核日期' => date('Y-m-d H:i:s'),
+            '审核' => $param['sys_id'], // sys_id(如"超级管理员")是固定的
+        ];
+        // 遍历所有Uniqid进行更新
+        foreach ($uniqids as $uniqid) {
+            $list = \db('工单_基本资料')
+                ->where('Uniqid', $uniqid)
                 ->fetchSql(true)
                 ->update($data);
-            // 执行SQL语句
-            $res = \db()->query($sql);
+            $res = \db()->query($list);
+            // 如果更新失败,直接返回错误
             if ($res === false) {
                 $this->error('审核失败');
             }
         }
+        // 所有更新操作都成功时,返回成功
         $this->success('审核成功');
     }
 
-
     /**
      * 订单状态及样衣批核
      */

+ 126 - 147
application/api/controller/WorkOrderSpotCheck.php

@@ -2593,182 +2593,160 @@ class WorkOrderSpotCheck extends Api{
 //        // 将 $param['UniqId'] 的值按逗号分割成数组
 //        $printIdArray = explode(',', $param['UniqId']);
 //
+//        // 如果是裁剪工序
 //        if (isset($param['sys_id']) && strpos($param['sys_id'], '裁剪') !== false) {
 //            // 初始化失败计数器
 //            $failureCount = 0;
 //
-//            foreach ($printIdArray as $uniqId) {
+//            // 开启事务
+//            \db()->startTrans();
+//            try {
+//                foreach ($printIdArray as $uniqId) {
+//                    // 根据 UniqId 查询 设备_产量计酬 表中的订单编号、尺码和数量
+//                    $result = \db('设备_产量计酬')->where('UniqId', $uniqId)
+//                        ->field('子订单编号,订单编号,尺码,数量,sczl_bh')
+//                        ->find();
 //
-//                // 根据 UniqId 查询 设备_产量计酬 表中的订单编号、尺码和数量
-//                $result = \db('设备_产量计酬')->where('UniqId', $uniqId)
-//                    ->field('子订单编号,订单编号,尺码,数量,sczl_bh')
-//                    ->find();
-//
-//                // 根据订单编号查询工单_印件资料表,并排除有修改日期的记录
-//                $yresult = \db('工单_印件资料')->where('子订单编号', $result['子订单编号'])
-//                    ->whereNull('Mod_rq')
-//                    ->find();
-//
-//                // 检查是否找到结果
-//                if (!$result) {
-//                    $failureCount++;
-//                    continue; // 跳过当前循环,处理下一个 UniqId
-//                }
-//
-//                // 获取 result 中的尺码和数量
-//                $size = $result['尺码'];
-//                $quantity = $result['数量'];
-//
-//                // 遍历 yresult 中的 cm1 到 cm10 字段,查找匹配的尺码
-//                for ($i = 1; $i <= 10; $i++) {
-//                    $cmField = 'cm' . $i;
-//                    $scslField = 'scsl' . $i;
+//                    // 如果未查询到数据,跳过
+//                    if (!$result) {
+//                        $failureCount++;
+//                        continue;
+//                    }
 //
-//                    // 检查 yresult 中是否存在对应的尺码字段,且值等于 result 中的尺码
-//                    if (isset($yresult[$cmField]) && $yresult[$cmField] === $size) {
-//                        // 找到对应 scsl 字段并进行数量减法
-//                        if (isset($yresult[$scslField])) {
-//                            $yresult[$scslField] -= $quantity;
+//                    // 根据订单编号查询工单_印件资料表,并排除有修改日期的记录
+//                    $yresult = \db('工单_印件资料')->where('子订单编号', $result['子订单编号'])
+//                        ->whereNull('Mod_rq')
+//                        ->find();
 //
-//                            // 防止数量变成负数
-//                            if ($yresult[$scslField] < 0) {
-//                                $yresult[$scslField] = 0;
+//                    // 处理 yresult 中的尺码
+//                    $size = $result['尺码'];
+//                    $quantity = $result['数量'];
+//                    $updateData = [];
+//                    for ($i = 1; $i <= 10; $i++) {
+//                        $cmField = 'cm' . $i;
+//                        $scslField = 'scsl' . $i;
+//                        if (isset($yresult[$cmField]) && $yresult[$cmField] === $size) {
+//                            if (isset($yresult[$scslField])) {
+//                                $yresult[$scslField] -= $quantity;
+//                                if ($yresult[$scslField] < 0) {
+//                                    $yresult[$scslField] = 0;
+//                                }
+//                                $updateData[$scslField] = $yresult[$scslField];
 //                            }
-//
-//                            // 清除更新后的数量字段,避免旧的值影响
-//                            $updateData[$scslField] = $yresult[$scslField];
+//                            break;
 //                        }
-//                        break; // 找到并处理后,跳出循环
 //                    }
-//                }
 //
-//                // 计算 scsl1 到 scsl10 的总和并更新 sctotal 字段
-//                $newTotal = 0;
-//                for ($i = 1; $i <= 10; $i++) {
-//                    $scslField = 'scsl' . $i;
-//                    if (isset($yresult[$scslField])) {
-//                        $newTotal += $yresult[$scslField];
+//                    // 更新工单_印件资料表
+//                    $newTotal = 0;
+//                    for ($i = 1; $i <= 10; $i++) {
+//                        $scslField = 'scsl' . $i;
+//                        if (isset($yresult[$scslField])) {
+//                            $newTotal += $yresult[$scslField];
+//                        }
 //                    }
-//                }
-//
-//                // 更新工单_印件资料表的 sctotal 字段
-//                \db('工单_印件资料')
-//                    ->where('子订单编号', $result['子订单编号'])
-//                    ->update(['sctotal' => $newTotal] + $updateData);
 //
-//                // 更新设备_产量计酬表的 mod_rq 和 delsys_id 字段
-//                $updateData = [
-//                    'mod_rq' => date('Y-m-d H:i:s'),
-//                    'delsys_id' => $param['sys_id']
-//                ];
-//                $updateResult = \db('设备_产量计酬')->where('UniqId', $uniqId)->fetchSql(true)->update($updateData);
-//                $sql = \db()->query($updateResult);
+//                    \db('工单_印件资料')
+//                        ->where('子订单编号', $result['子订单编号'])
+//                        ->update(['sctotal' => $newTotal] + $updateData);
 //
-//                // 检查更新是否成功
-//                if ($sql === false) {
-//                    $failureCount++;
-//                }
-//            }
-//
-//            // 返回最终的操作结果
-//            if ($failureCount === 0) {
-//                return $this->success('删除成功');
-//            } else {
-//                return $this->error("操作完成,但有 {$failureCount} 条记录更新失败");
-//            }
-//        }else{
-//            // 初始化失败计数器
-//            $failureCount = 0;
-//
-//            foreach ($printIdArray as $uniqId) {
-//                // 根据 UniqId 查询 设备_产量计酬 表中的订单编号、尺码和数量
-//                $result = \db('设备_产量计酬')->where('UniqId', $uniqId)
-//                    ->field('订单编号,尺码,数量,sczl_bh')
-//                    ->find();
-//
-//                // 判断是否是本组机台
-//                if ($result['sczl_bh'] != $param['sys_id']) {
-//                    return $this->error("当前选择包含 {$result['sczl_bh']},请选择本组机台 {$param['sys_id']}  进行删除");
-//                }
+//                    // 更新设备_产量计酬表
+//                    $updateData = [
+//                        'mod_rq' => date('Y-m-d H:i:s'),
+//                        'delsys_id' => $param['sys_id']
+//                    ];
+//                    $updateResult = \db('设备_产量计酬')->where('UniqId', $uniqId)->update($updateData);
 //
-//                // 检查是否找到结果
-//                if (!$result) {
-//                    $failureCount++;
-//                    continue; // 跳过当前循环,处理下一个 UniqId
+//                    // 如果更新失败,记录失败
+//                    if ($updateResult === false) {
+//                        $failureCount++;
+//                    }
 //                }
 //
-//                // 更新设备_产量计酬表的mod_rq和delsys_id字段
-//                $updateData = [
-//                    'mod_rq' => date('Y-m-d H:i:s'),
-//                    'delsys_id' => $param['sys_id']
-//                ];
-//                $result = \db('设备_产量计酬')->where('UniqId', $uniqId)->fetchSql(true)->update($updateData);
-//                $sql = \db()->query($result);
+//                // 提交事务
+//                \db()->commit();
 //
-//                // 检查更新是否成功
-//                if ($sql === false) {
-//                    $failureCount++;
-//                }
+//            } catch (\Exception $e) {
+//                // 发生异常时回滚
+//                \db()->rollback();
+//                return $this->error('操作失败:' . $e->getMessage());
 //            }
 //
-//            // 如果没有失败记录,则表示删除成功
+//            // 返回操作结果
 //            if ($failureCount === 0) {
 //                return $this->success('删除成功');
 //            } else {
 //                return $this->error("操作完成,但有 {$failureCount} 条记录更新失败");
 //            }
+//        } else {
+//
+//            // 处理其他情况,跟上面的逻辑类似
 //        }
 //    }
+
     public function del() {
+        // 判断请求方式是否为 GET
         if (!$this->request->isGet()) {
             return $this->error('请求错误');
         }
 
+        // 获取请求参数
         $param = $this->request->param();
+
+        // 检查 UniqId 参数是否存在
         if (empty($param['UniqId'])) {
-            return $this->error('UniqId参数错误');
+            return $this->error('UniqId 参数错误');
         }
 
-        // 将 $param['UniqId'] 的值按逗号分割成数组
+        // 将 UniqId 的值按逗号分割成数组
         $printIdArray = explode(',', $param['UniqId']);
 
-        // 如果是裁剪工序
-        if (isset($param['sys_id']) && strpos($param['sys_id'], '裁剪') !== false) {
-            // 初始化失败计数器
-            $failureCount = 0;
-
-            // 开启事务
-            \db()->startTrans();
-            try {
-                foreach ($printIdArray as $uniqId) {
-                    // 根据 UniqId 查询 设备_产量计酬 表中的订单编号、尺码和数量
-                    $result = \db('设备_产量计酬')->where('UniqId', $uniqId)
-                        ->field('子订单编号,订单编号,尺码,数量,sczl_bh')
+        // 初始化失败计数器
+        $failureCount = 0;
+
+        // 开启事务
+        \db()->startTrans();
+        try {
+            foreach ($printIdArray as $uniqId) {
+                // 根据 UniqId 查询设备_产量计酬表中的数据
+                $result = \db('设备_产量计酬')->where('UniqId', $uniqId)
+                    ->field('子订单编号, 订单编号, 尺码, 数量, sczl_bh, 工序名称')
+                    ->find();
+
+                // 如果查询不到数据,跳过当前处理
+                if (!$result) {
+                    $failureCount++;
+                    continue;
+                }
+
+                // 判断工序名称是否是“裁剪”
+                if (isset($param['sys_id']) && strpos($param['sys_id'], '裁剪') !== false) {
+                    // 如果工序名称包含“裁剪”,更新工单_印件资料表
+                    $yresult = \db('工单_印件资料')->where('子订单编号', $result['子订单编号'])
+                        ->whereNull('Mod_rq')  // 仅更新没有修改日期的记录
                         ->find();
 
-                    // 如果未查询到数据,跳过
-                    if (!$result) {
+                    // 如果没有查询到工单印件资料表的数据,跳过
+                    if (!$yresult) {
                         $failureCount++;
                         continue;
                     }
 
-                    // 根据订单编号查询工单_印件资料表,并排除有修改日期的记录
-                    $yresult = \db('工单_印件资料')->where('子订单编号', $result['子订单编号'])
-                        ->whereNull('Mod_rq')
-                        ->find();
-
-                    // 处理 yresult 中的尺码
+                    // 处理尺码和数量更新
                     $size = $result['尺码'];
                     $quantity = $result['数量'];
                     $updateData = [];
+
+                    // 遍历工单中的尺码字段(cm1 到 cm10),找到匹配的尺码
                     for ($i = 1; $i <= 10; $i++) {
                         $cmField = 'cm' . $i;
                         $scslField = 'scsl' . $i;
                         if (isset($yresult[$cmField]) && $yresult[$cmField] === $size) {
+                            // 找到匹配的尺码后,更新对应的数量字段
                             if (isset($yresult[$scslField])) {
                                 $yresult[$scslField] -= $quantity;
                                 if ($yresult[$scslField] < 0) {
-                                    $yresult[$scslField] = 0;
+                                    $yresult[$scslField] = 0;  // 防止数量为负数
                                 }
                                 $updateData[$scslField] = $yresult[$scslField];
                             }
@@ -2776,7 +2754,7 @@ class WorkOrderSpotCheck extends Api{
                         }
                     }
 
-                    // 更新工单_印件资料表
+                    // 计算更新后的总数量
                     $newTotal = 0;
                     for ($i = 1; $i <= 10; $i++) {
                         $scslField = 'scsl' . $i;
@@ -2785,40 +2763,41 @@ class WorkOrderSpotCheck extends Api{
                         }
                     }
 
+                    // 更新工单_印件资料表
                     \db('工单_印件资料')
                         ->where('子订单编号', $result['子订单编号'])
                         ->update(['sctotal' => $newTotal] + $updateData);
+                }
 
-                    // 更新设备_产量计酬表
-                    $updateData = [
-                        'mod_rq' => date('Y-m-d H:i:s'),
-                        'delsys_id' => $param['sys_id']
-                    ];
-                    $updateResult = \db('设备_产量计酬')->where('UniqId', $uniqId)->update($updateData);
+                // 更新设备_产量计酬表
+                $updateData = [
+                    'mod_rq' => date('Y-m-d H:i:s'),
+                    'delsys_id' => $param['sys_id']
+                ];
 
-                    // 如果更新失败,记录失败
-                    if ($updateResult === false) {
-                        $failureCount++;
-                    }
+                // 执行更新操作
+                $updateResult = \db('设备_产量计酬')->where('UniqId', $uniqId)->update($updateData);
+
+                // 如果更新失败,记录失败
+                if ($updateResult === false) {
+                    $failureCount++;
                 }
+            }
 
-                // 提交事务
-                \db()->commit();
+            // 提交事务
+            \db()->commit();
 
-            } catch (\Exception $e) {
-                // 发生异常时回滚
-                \db()->rollback();
-                return $this->error('操作失败:' . $e->getMessage());
-            }
+        } catch (\Exception $e) {
+            // 发生异常时回滚事务
+            \db()->rollback();
+            return $this->error('操作失败:' . $e->getMessage());
+        }
 
-            // 返回操作结果
-            if ($failureCount === 0) {
-                return $this->success('删除成功');
-            } else {
-                return $this->error("操作完成,但有 {$failureCount} 条记录更新失败");
-            }
+        // 返回操作结果
+        if ($failureCount === 0) {
+            return $this->success('删除成功');
         } else {
-            // 处理其他情况,跟上面的逻辑类似
+            return $this->error("操作完成,但有 {$failureCount} 条记录更新失败");
         }
     }
 

+ 13 - 6
application/api/controller/WorkOrderVerification.php

@@ -186,7 +186,11 @@ class WorkOrderVerification extends Api
         $wheres['sczl_bh'] = ['neq', '']; // 根据需要加上你想要的工序条件(假设 sczl_bh 是工序字段)
 
         $sql = db()->table('设备_产量计酬')
-            ->field('订单编号, sczl_jtbh, sczl_bh, SUM(数量) as 上月累计')  // 加上工序字段
+            ->field('订单编号, sczl_jtbh, sczl_bh,
+                 CASE 
+                WHEN 工序名称 IN ("裁剪", "车缝") THEN SUM(数量)
+                ELSE SUM(s_num) 
+                END as 上月累计')  // 加上工序字段
             ->where($wheres)
             ->whereNull('mod_rq')  // 确保 mod_rq 字段为空
             ->group('订单编号, sczl_jtbh, sczl_bh')  // 按 订单编号, sczl_jtbh, sczl_bh 分组
@@ -208,11 +212,14 @@ class WorkOrderVerification extends Api
         $rows = db()->table('设备_产量计酬')->alias('c')
             ->join('工单_基本资料 j', 'c.订单编号 = j.订单编号', 'left')
             ->field('
-        c.订单编号, j.款式, j.生产款号, j.客户编号, 
-        c.sczl_jtbh, c.工序名称 as 工序, c.sczl_bh,
-        c.数量 as 上报数量,  
-        c.sczl_rq as 上报时间  
-    ')
+                    c.订单编号, j.款式, j.生产款号, j.客户编号, 
+                    c.sczl_jtbh, c.工序名称 as 工序, c.sczl_bh,
+                    CASE 
+                    WHEN c.工序名称 IN ("裁剪", "车缝") THEN c.数量
+                    ELSE c.s_num 
+                    END as 上报数量,
+                    c.sczl_rq as 上报时间  
+                ')
             ->where($where)
             ->whereNull('c.mod_rq')
             ->order('c.sczl_rq desc')