liuhairui 9 сар өмнө
parent
commit
d0cdba5a2b

+ 37 - 8
application/api/controller/Manufacture.php

@@ -1464,7 +1464,7 @@ class Manufacture extends Api
         // 获取工单列表
         $list = \db('工单_基本资料')
             ->where($where)
-            ->orderRaw("FIELD(gd_statu, '1-计划中', '2-生产中')")
+//            ->orderRaw("FIELD(gd_statu, '1-计划中', '2-生产中')")
             ->order('订单编号 desc')
             ->limit(($page - 1) * $limit, $limit)
             ->select();
@@ -1503,14 +1503,41 @@ class Manufacture extends Api
             $value['status'] = in_array($value['订单编号'], $groupedRelatedOrders['technical']) ? '' : '*';
             $value['orderstatus'] = in_array($value['订单编号'], $groupedRelatedOrders['order']) ? '' : '*';
 
-            // 查询 设备_产量计酬表,统计 s_num 总和
-            $s_num_sum = \db('设备_产量计酬')
-                ->where('订单编号', $value['订单编号'])
-                ->where('工序编号', 7)
-                ->sum('s_num');  // 获取s_num的总和
+            // 定义工序编号数组
+            $processIds = [
+                2 => '裁剪完工数量',
+                3 => '车缝完工数量',
+                4 => '手工完工数量',
+                5 => '大烫完工数量',
+                6 => '总检完工数量',
+                7 => '工单完工数量'
+            ];
+
+            // 遍历工序编号,获取对应的完工数量
+            foreach ($processIds as $processId => $fieldName) {
+                if ($processId === 2 || $processId === 3) {
+                    // 查询所有记录
+                    $records = \db('设备_产量计酬')
+                        ->where('订单编号', $value['订单编号'])
+                        ->where('工序编号', $processId)
+                        ->select();  // 获取所有匹配记录
+
+                    // 计算数量总和
+                    $num_sum = 0;
+                    foreach ($records as $record) {
+                        $num_sum += $record['数量'];  // 手动累加数量
+                    }
 
-            // 将 s_num 总和赋值给 工单完工数量
-            $value['工单完工数量'] = $s_num_sum;
+                    $value[$fieldName] = $num_sum; // 裁剪和车缝存储数量
+                } else {
+                    // 其他工序是 s_num,总和计算
+                    $s_num_sum = \db('设备_产量计酬')
+                        ->where('订单编号', $value['订单编号'])
+                        ->where('工序编号', $processId)
+                        ->sum('s_num'); // 继续使用 s_num 字段
+                    $value[$fieldName] = $s_num_sum; // 其他工序存储 s_num 总和
+                }
+            }
         }
 
         // 返回数据
@@ -1611,6 +1638,7 @@ class Manufacture extends Api
             ->join('工单_印件资料 y', 'j.订单编号 = y.订单编号')
             ->field('j.Sys_rq, y.订单编号, j.落货日期, j.生产款号, j.款式, SUM(y.sctotal) as 裁剪总数, SUM(y.zdtotal) as 制单总数,j.gd_statu,j.客户编号')
             ->group('y.订单编号')
+            ->order('y.订单编号 desc')
             ->where($where)
             ->select();
         $orderIds = array_column($orderList, '订单编号');
@@ -1623,6 +1651,7 @@ class Manufacture extends Api
             ->whereIn('a.订单编号', $orderIds)  // 只查询符合条件的订单编号
             ->field('a.订单编号, a.工序名称, SUM(a.数量) as 总数量,SUM(a.s_num) as 上报数量,a.mod_rq')
             ->where($wheres)
+            ->order('a.订单编号 desc')
             ->group('a.订单编号, a.工序名称')  // 按订单编号和工序名称分组
             ->select();
         // 合并两个结果

+ 20 - 0
application/api/controller/WorkOrder.php

@@ -857,6 +857,26 @@ class WorkOrder extends Api
         $param['Sys_rq'] = date('Y-m-d H:i:s');
         $param['gd_statu'] = '1-计划中';
 
+        $prefix = substr($param['订单编号'], 0, 2);  // e.g., "DC"
+        $maxOrder = \db('工单_基本资料')
+            ->where('订单编号', 'like', "{$prefix}%")
+            ->order('订单编号', 'desc')
+            ->limit(1)
+            ->value('订单编号');
+        if ($maxOrder) {
+            $numericPart = substr($maxOrder, 2);
+            $newNumericPart = str_pad((int)$numericPart + 1, strlen($numericPart), '0', STR_PAD_LEFT);
+            $param['订单编号'] = $prefix . $newNumericPart;
+        } else {
+            $param['订单编号'] = $param['订单编号'];
+        }
+        if ($maxOrder) {
+            $numericPart = substr($maxOrder, 2);
+            $newNumericPart = str_pad((int)$numericPart + 1, strlen($numericPart), '0', STR_PAD_LEFT);
+            $param['订单编号'] = $prefix . $newNumericPart;
+        } else {
+            $param['订单编号'] = $param['订单编号'];
+        }
         //新增订单插入至工单基本资料
         $sql = \db('工单_基本资料')->fetchSql(true)->insert($param);
         \db()->query($sql);

+ 201 - 99
application/api/controller/WorkOrderSpotCheck.php

@@ -2580,6 +2580,145 @@ class WorkOrderSpotCheck extends Api{
      * 删除报工记录
      * /work_order_spot_check/del
      */
+//    public function del() {
+//        if (!$this->request->isGet()) {
+//            return $this->error('请求错误');
+//        }
+//
+//        $param = $this->request->param();
+//        if (empty($param['UniqId'])) {
+//            return $this->error('UniqId参数错误');
+//        }
+//
+//        // 将 $param['UniqId'] 的值按逗号分割成数组
+//        $printIdArray = explode(',', $param['UniqId']);
+//
+//        if (isset($param['sys_id']) && strpos($param['sys_id'], '裁剪') !== false) {
+//            // 初始化失败计数器
+//            $failureCount = 0;
+//
+//            foreach ($printIdArray as $uniqId) {
+//
+//                // 根据 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;
+//
+//                    // 检查 yresult 中是否存在对应的尺码字段,且值等于 result 中的尺码
+//                    if (isset($yresult[$cmField]) && $yresult[$cmField] === $size) {
+//                        // 找到对应 scsl 字段并进行数量减法
+//                        if (isset($yresult[$scslField])) {
+//                            $yresult[$scslField] -= $quantity;
+//
+//                            // 防止数量变成负数
+//                            if ($yresult[$scslField] < 0) {
+//                                $yresult[$scslField] = 0;
+//                            }
+//
+//                            // 清除更新后的数量字段,避免旧的值影响
+//                            $updateData[$scslField] = $yresult[$scslField];
+//                        }
+//                        break; // 找到并处理后,跳出循环
+//                    }
+//                }
+//
+//                // 计算 scsl1 到 scsl10 的总和并更新 sctotal 字段
+//                $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);
+//
+//                // 检查更新是否成功
+//                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']}  进行删除");
+//                }
+//
+//                // 检查是否找到结果
+//                if (!$result) {
+//                    $failureCount++;
+//                    continue; // 跳过当前循环,处理下一个 UniqId
+//                }
+//
+//                // 更新设备_产量计酬表的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);
+//
+//                // 检查更新是否成功
+//                if ($sql === false) {
+//                    $failureCount++;
+//                }
+//            }
+//
+//            // 如果没有失败记录,则表示删除成功
+//            if ($failureCount === 0) {
+//                return $this->success('删除成功');
+//            } else {
+//                return $this->error("操作完成,但有 {$failureCount} 条记录更新失败");
+//            }
+//        }
+//    }
     public function del() {
         if (!$this->request->isGet()) {
             return $this->error('请求错误');
@@ -2593,130 +2732,93 @@ 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) {
-
-                // 根据 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['数量'];
+            // 开启事务
+            \db()->startTrans();
+            try {
+                foreach ($printIdArray as $uniqId) {
+                    // 根据 UniqId 查询 设备_产量计酬 表中的订单编号、尺码和数量
+                    $result = \db('设备_产量计酬')->where('UniqId', $uniqId)
+                        ->field('子订单编号,订单编号,尺码,数量,sczl_bh')
+                        ->find();
 
-                // 遍历 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);
-
-                // 检查更新是否成功
-                if ($sql === false) {
-                    $failureCount++;
-                }
-            }
-
-            // 返回最终的操作结果
-            if ($failureCount === 0) {
-                return $this->success('删除成功');
-            } else {
-                return $this->error("操作完成,但有 {$failureCount} 条记录更新失败");
-            }
-        }else{
-            // 初始化失败计数器
-            $failureCount = 0;
+                    \db('工单_印件资料')
+                        ->where('子订单编号', $result['子订单编号'])
+                        ->update(['sctotal' => $newTotal] + $updateData);
 
-            foreach ($printIdArray as $uniqId) {
-                // 根据 UniqId 查询 设备_产量计酬 表中的订单编号、尺码和数量
-                $result = \db('设备_产量计酬')->where('UniqId', $uniqId)
-                    ->field('订单编号,尺码,数量,sczl_bh')
-                    ->find();
+                    // 更新设备_产量计酬表
+                    $updateData = [
+                        'mod_rq' => date('Y-m-d H:i:s'),
+                        'delsys_id' => $param['sys_id']
+                    ];
+                    $updateResult = \db('设备_产量计酬')->where('UniqId', $uniqId)->update($updateData);
 
-                // 判断是否是本组机台
-                if ($result['sczl_bh'] != $param['sys_id']) {
-                    return $this->error("当前选择包含 {$result['sczl_bh']},请选择本组机台 {$param['sys_id']}  进行删除");
+                    // 如果更新失败,记录失败
+                    if ($updateResult === false) {
+                        $failureCount++;
+                    }
                 }
 
-                // 检查是否找到结果
-                if (!$result) {
-                    $failureCount++;
-                    continue; // 跳过当前循环,处理下一个 UniqId
-                }
+                // 提交事务
+                \db()->commit();
 
-                // 更新设备_产量计酬表的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);
-
-                // 检查更新是否成功
-                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 {
+            // 处理其他情况,跟上面的逻辑类似
         }
     }