1000) throw new \InvalidArgumentException('每次导入1至1000条需求'); $valid = []; $errors = []; $seen = []; foreach (array_values($rows) as $i => $r) { if (!is_array($r)) { $errors[] = ['row' => $i + 2, 'message' => '行数据格式错误']; continue; } $data = array_intersect_key($r, array_flip(['title','content','tag','publisher_name','publisher_company','publisher_mobile','expire_time'])); foreach ($data as $key => $v) $data[$key] = is_scalar($v) ? trim((string) $v) : ''; if (empty($data['expire_time'])) $data['expire_time'] = null; $v = Validator::make($data, ['title'=>'required|string|max:100','content'=>'required|string|max:10000', 'tag'=>'nullable|string|max:255','publisher_name'=>'required|string|max:100', 'publisher_company'=>'required|string|max:255', 'publisher_mobile'=>['required','regex:/^1\d{10}$/'],'expire_time'=>'nullable|date_format:Y-m-d']); if ($v->fails()) { $errors[] = ['row' => $i + 2, 'message' => implode(';', $v->errors()->all())]; continue; } $key = hash('sha256', $data['publisher_mobile'] . '|' . $data['title'] . '|' . $data['content']); if (isset($seen[$key]) || SupplyDemand::withTrashed()->where('import_key', $key)->exists()) { $errors[] = ['row' => $i + 2, 'message' => '重复需求,请核实后移除该行']; continue; } $seen[$key] = true; $data['import_key'] = $key; if ($data['expire_time']) $data['expire_time'] .= ' 23:59:59'; $valid[] = $data; } return ['rows' => $valid, 'errors' => $errors, 'total' => count($rows)]; } }