cqp 2 miesięcy temu
rodzic
commit
46eb77a480
1 zmienionych plików z 16 dodań i 6 usunięć
  1. 16 6
      app/Service/PersonWorkService.php

+ 16 - 6
app/Service/PersonWorkService.php

@@ -221,15 +221,25 @@ class PersonWorkService extends Service
         list($status, $systemStats) = (new EmployeeService())->getEmployeesMonthStats($empIds, $data['month'], $user);
         if (!$status) return [false, $systemStats]; // 如果日历未设置,直接拦截
 
+        // 字段中文映射,用于报错
+        $fieldNames = [
+            'total_days'    => '出勤总天数',
+            'rd_total_days' => '研发出勤总天数',
+            'total_hours'   => '出勤总工时',
+            'rd_total_hours'=> '研发总工时'
+        ];
+
         foreach ($data['details'] as $key => $value) {
+            $lineTitle = "第" . ($key + 1) . "行:";
             if (empty($value['employee_id'])) return [false, '人员不能为空'];
             $empId = $value['employee_id'];
 
             // 基础数字格式检查
-            foreach (['total_days', 'rd_total_days', 'total_hours', 'rd_total_hours'] as $field) {
+            foreach ($fieldNames as $field => $title) {
+                if(! isset($value[$field])) return [false, $lineTitle . $title . "不存在"];
                 $precision = 2;
                 $res = $this->checkNumber($value[$field], $precision, 'non-negative');
-                if (!$res['valid']) return [false, $value['employee_title'] . "的" . $field . ":" . $res['error']];
+                if (!$res['valid']) return [false, $lineTitle . $value['employee_title'] . "的" . $title . ":" . $res['error']];
             }
 
             // --- 业务逻辑校验:出勤天数与工时合法性 ---
@@ -237,22 +247,22 @@ class PersonWorkService extends Service
             if ($sysData) {
                 // 1. 研发天数不能大于出勤总天数
                 if ($value['rd_total_days'] > $value['total_days']) {
-                    return [false, "第" . ($key + 1) . "行:研发出勤天数不能大于出勤总天数"];
+                    return [false, $lineTitle . "研发出勤天数不能大于出勤总天数"];
                 }
 
                 // 2. 研发工时不能大于出勤总工时
                 if ($value['rd_total_hours'] > $value['total_hours']) {
-                    return [false, "第" . ($key + 1) . "行:研发总工时不能大于出勤总工时"];
+                    return [false, $lineTitle . "研发总工时不能大于出勤总工时"];
                 }
 
                 // 4. 校验出勤总天数是否超过了系统计算的上限
                 if ($value['total_days'] != $sysData['attendance_days']) {
-                    return [false, "人员[{$empId}]填写的出勤总天数({$value['total_days']})不等于系统核算的天数({$sysData['attendance_days']})"];
+                    return [false, $lineTitle . "人员[{$empId}]填写的出勤总天数({$value['total_days']})不等于系统核算的天数({$sysData['attendance_days']})"];
                 }
 
                 //校验出勤总工时是否超过了系统计算的上限
                 if ($value['total_hours'] != $sysData['final_work_hour']) {
-                    return [false, "人员[{$empId}]填写的出勤总工时({$value['total_hours']})不等于系统核算的工时({$sysData['final_work_hour']})"];
+                    return [false, $lineTitle . "人员[{$empId}]填写的出勤总工时({$value['total_hours']})不等于系统核算的工时({$sysData['final_work_hour']})"];
                 }
             }