getPdo(); // union_id 唯一性 $chk = $pdo->prepare("SELECT COUNT(*) FROM persons WHERE union_id = ?"); $chk->execute([$data['union_id']]); if ((int)$chk->fetchColumn() > 0) { Response::error('union_id 已存在,请更换'); } // 唯一性校验:身份证号码 / 联系方式(手机/邮箱/社媒账号/主页链接),收集全部重复 $dups = []; if (!empty($data['id_number'])) { checkFieldFormat('id_number', $data['id_number']); $dup = findDuplicate($pdo, 'id_number', $data['id_number']); if ($dup) $dups[] = $dup; } $contacts = json_decode($_POST['contacts'] ?? '[]', true); if (!is_array($contacts)) { $contacts = []; } $dups = array_merge($dups, checkAccountsDuplicates($pdo, $contacts)); if (!empty($dups)) Response::duplicates($dups); [$sql, $params] = buildInsert($data); $pdo->prepare("INSERT INTO persons $sql")->execute($params); $newId = (int)$pdo->lastInsertId(); // 写入联系方式(v1.0.16:支持 is_defult 字段,1常用/0备用) if (is_array($contacts) && count($contacts) > 0) { $ins = $pdo->prepare( "INSERT INTO social_accounts (owner_type, owner_id, platform, account_id, profile_url, remark, is_primary, is_defult) VALUES ('person', ?, ?, ?, ?, ?, ?, ?)" ); foreach ($contacts as $c) { $platform = trim($c['platform'] ?? ''); $accountId = trim($c['account_id'] ?? ''); if ($platform === '' || $accountId === '') continue; $ins->execute([$newId, $platform, $accountId, $c['profile_url'] ?? null, $c['remark'] ?? null, !empty($c['is_primary']) ? 1 : 0, !empty($c['is_defult']) ? 1 : 0]); } } // 工作履历(v1.0.18:整表替换) $experiences = json_decode($_POST['experiences'] ?? '[]', true); if (is_array($experiences)) { savePersonExperiences($pdo, $newId, $experiences); } // 完整度检查:人员主表 + 其 social_accounts updateIncomplete($pdo, 'persons', $newId); updateAccountsIncomplete($pdo, 'person', $newId); logCurrent('add', 'person', 'persons', $newId, ['data' => $data, 'contacts' => $contacts]); Response::success(['id' => $newId], '新增成功');