Przeglądaj źródła

导入工艺和部件查询优化

unknown 1 tydzień temu
rodzic
commit
3a50fd0995

+ 10 - 37
application/api/controller/ReportingWork.php

@@ -90,43 +90,16 @@ class ReportingWork extends Api
         if (empty($params['majorprocess'])) {
             $this->error('大工序不能为空');
         }
-        if ($params['majorprocess'] === '车缝') {
-            $data = db('工单_部件资料')
-                ->where('work_order', $params['workorder'])
-                ->whereNull('del_rq')
-                ->where('status', 1)
-                ->field('part_code as 部件编号,part_name as 部件名称')
-                ->select();
-            if (empty($data)) {
-                $this->error('未找到部件资料');
-            }
-            usort($data, function ($a, $b) {
-                return strnatcmp((string)$a['部件编号'], (string)$b['部件编号']);
-            });
-        } else {
-            $data = db('工单_基础工艺资料')
-                ->where('work_order', $params['workorder'])
-                ->where('big_process', $params['majorprocess'])
-                ->whereNull('del_rq')
-                ->where('status', 0)
-                ->field('part_code,process_code as 工艺编号,process_name as 工艺名称,standard_hour as 标准工时,
-                standard_score as 标准工分,coefficient as 系数,remark as 备注')
-                ->select();
-            if (empty($data)) {
-                $this->error('未找到工艺数据');
-            }
-            usort($data, function ($a, $b) {
-                $partCmp = strnatcmp((string)$a['part_code'], (string)$b['part_code']);
-                if ($partCmp !== 0) {
-                    return $partCmp;
-                }
-                return strnatcmp((string)$a['工艺编号'], (string)$b['工艺编号']);
-            });
-            foreach ($data as &$row) {
-                unset($row['part_code']);
-            }
-            unset($row);
-        }
+        $data = db('工单_部件资料')
+            ->where('work_order', $params['workorder'])
+            ->where('part_type', $params['majorprocess'])
+            ->whereNull('del_rq')
+            ->where('status', 1)
+            ->field('part_code as 部件编号,part_name as 部件名称')
+            ->select();
+        usort($data, function ($a, $b) {
+            return strnatcmp((string)$a['部件编号'], (string)$b['部件编号']);
+        });
         $this->success('成功', $data);
     }
 

+ 43 - 33
application/api/controller/WorkOrderProcess.php

@@ -835,54 +835,51 @@ class WorkOrderProcess extends Api
             $seenSeq[$seqKey] = true;
         }
         $now = date('Y-m-d H:i:s');
-        $partNameToCode = [];
+        $partMap = [];
         $nextPartCode = 0;
         foreach ($data as $row) {
-            $partName = isset($row['部件名称']) ? $row['部件名称'] : '';
-            if ($partName === '' || isset($partNameToCode[$partName])) {
+            $partName = isset($row['部件名称']) ? trim((string)$row['部件名称']) : '';
+            if ($partName === '') {
                 continue;
             }
-            $partNameToCode[$partName] = ++$nextPartCode;
+            $partType = isset($row['生产工序']) ? trim((string)$row['生产工序']) : '';
+            if (!isset($partMap[$partName])) {
+                $partMap[$partName] = [
+                    'part_code' => ++$nextPartCode,
+                    'part_type' => $partType,
+                ];
+            } elseif ($partType !== '' && $partMap[$partName]['part_type'] === '') {
+                $partMap[$partName]['part_type'] = $partType;
+            }
         }
+
         $workOrderParts = [];
-        $i = 0;
-        foreach ($partNameToCode as $partName => $partCode) {
-            $workOrderParts[$i++] = [
+        foreach ($partMap as $partName => $partInfo) {
+            $workOrderParts[] = [
                 'work_order' => $params['workorder'],
                 'part_name' => $partName,
-                'part_code' => $partCode,
-                'part_type' => '',
+                'part_code' => $partInfo['part_code'],
+                'part_type' => $partInfo['part_type'],
                 'remark' => '',
                 'status' => 1,
                 'sys_id' => $params['sys_id'],
                 'sys_rq' => $now,
             ];
         }
-        Db::startTrans();
-        try {
-            //删除数据库现有的工单部件数据
-            Db::name('工单_部件资料')->where('work_order', $params['workorder'])->delete();
-            //插入工单部件数据
-            $partInsertCount = Db::name('工单_部件资料')->insertAll($workOrderParts);
-            if ($partInsertCount === false) {
-                throw new \Exception('工单部件导入失败');
-            }
-            //提交事务
-            Db::commit();
-        } catch (\Exception $e) {
-            Db::rollback();
-            $this->error($e->getMessage());
-        }
 
         $workOrderProcesses = [];
         foreach ($data as $value) {
-            $name = isset($value['部件名称']) ? $value['部件名称'] : '';
-            $partCode = ($name !== '' && isset($partNameToCode[$name])) ? $partNameToCode[$name] : '';
+            $seq = isset($value['序号']) ? $value['序号'] : null;
+            if ($seq === null || $seq === '') {
+                continue;
+            }
+            $name = isset($value['部件名称']) ? trim((string)$value['部件名称']) : '';
+            $partCode = ($name !== '' && isset($partMap[$name])) ? $partMap[$name]['part_code'] : '';
             $workOrderProcesses[] = [
                 'work_order' => $params['workorder'],
                 'part_code' => $partCode,
                 'part_name' => $name,
-                'process_code' => $value['序号'],
+                'process_code' => $seq,
                 'process_name' => $value['工序名称'],
                 'big_process' => $value['生产工序'],
                 'standard_hour' => $value['秒'],
@@ -895,22 +892,35 @@ class WorkOrderProcess extends Api
                 'sys_rq' => $now,
             ];
         }
+
         Db::startTrans();
         try {
-            //删除数据库现有的工单工艺数据
+            Db::name('工单_部件资料')->where('work_order', $params['workorder'])->delete();
+            if (!empty($workOrderParts)) {
+                $partInsertCount = Db::name('工单_部件资料')->insertAll($workOrderParts);
+                if ($partInsertCount === false || $partInsertCount === 0) {
+                    throw new \Exception('工单部件导入失败');
+                }
+            }
             Db::name('工单_基础工艺资料')->where('work_order', $params['workorder'])->delete();
-            //插入工单工艺数据
+            if (empty($workOrderProcesses)) {
+                throw new \Exception('没有可导入的工序数据');
+            }
             $processInsertCount = Db::name('工单_基础工艺资料')->insertAll($workOrderProcesses);
-            if ($processInsertCount === false) {
+            if ($processInsertCount === false || $processInsertCount === 0) {
                 throw new \Exception('工单工艺导入失败');
             }
-            //提交事务
             Db::commit();
+        } catch (\think\exception\HttpResponseException $e) {
+            throw $e;
         } catch (\Exception $e) {
             Db::rollback();
-            $this->error($e->getMessage());
+            $this->error('导入失败:' . $e->getMessage());
         }
-        $this->success('导入成功');
+        $this->success('导入成功', [
+            'part_count' => count($workOrderParts),
+            'process_count' => count($workOrderProcesses),
+        ]);
     }
 
     /**