v1.0.36: 碎片处理补全/转换接入重复校验 - soft_update.php 软碎片补全(persons身份证手机邮箱/companies企业名注册号/social_accounts账号主页)收集全部重复弹窗,hard_convert 已随 v1.0.35 生效

This commit is contained in:
nanguaboss
2026-08-09 22:41:24 +08:00
parent 2587c55ab6
commit 48c996d1d2
2 changed files with 36 additions and 1 deletions
+35
View File
@@ -11,6 +11,7 @@ require_once __DIR__ . '/../common/auth.php';
require_once __DIR__ . '/../common/logger.php';
require_once __DIR__ . '/../common/helpers.php';
require_once __DIR__ . '/../common/completeness.php';
require_once __DIR__ . '/../common/duplicate_check.php';
checkAjax();
checkPermission('preliminary');
@@ -56,6 +57,20 @@ switch ($table) {
'graduated_from' => 's', 'hometown' => 's', 'work_location' => 's',
'id_type' => 's', 'id_number' => 's', 'source_channel' => 's', 'source_detail' => 's',
]);
// 唯一性校验(排除自身):身份证 / 手机 / 邮箱
$dups = [];
if (!empty($fields['id_number'])) {
$dup = findDuplicate($pdo, 'id_number', $fields['id_number'], [$id]);
if ($dup) $dups[] = $dup;
}
$ownAccountIds = $pdo->query("SELECT id FROM social_accounts WHERE owner_type = 'person' AND owner_id = $id")->fetchAll(PDO::FETCH_COLUMN);
if (isset($_POST['phone'])) {
$dups = array_merge($dups, checkSingleAccountDuplicate($pdo, $_POST['phone'] !== '' ? 'phone' : '', $_POST['phone'], '', $ownAccountIds));
}
if (isset($_POST['email'])) {
$dups = array_merge($dups, checkSingleAccountDuplicate($pdo, $_POST['email'] !== '' ? 'email' : '', $_POST['email'], '', $ownAccountIds));
}
if (!empty($dups)) Response::duplicates($dups);
if (!empty($fields)) {
[$sets, $params] = buildUpdate($fields);
$params[] = $id;
@@ -96,6 +111,17 @@ switch ($table) {
'latest_employee_count' => 'i', 'latest_annual_revenue' => 's', 'is_listed' => 'i',
'stock_code' => 's', 'website' => 's',
]);
// 唯一性校验(排除自身):企业名称 / 注册号
$dups = [];
if (!empty($fields['name_zh']) || !empty($fields['display_name'])) {
$dup = findDuplicate($pdo, 'company_name', $fields['name_zh'] ?? $fields['display_name'] ?? '', [$id]);
if ($dup) $dups[] = $dup;
}
if (!empty($fields['registration_number'])) {
$dup = findDuplicate($pdo, 'registration_number', $fields['registration_number'], [$id]);
if ($dup) $dups[] = $dup;
}
if (!empty($dups)) Response::duplicates($dups);
if (!empty($fields)) {
[$sets, $params] = buildUpdate($fields);
$params[] = $id;
@@ -108,6 +134,15 @@ switch ($table) {
$collect([
'platform' => 's', 'account_id' => 's', 'is_primary' => 'i', 'profile_url' => 's', 'remark' => 's',
]);
// 唯一性校验(排除自身):社媒账号ID(同平台,取当前行 platform)/ 主页链接
$curAcc = $pdo->prepare("SELECT * FROM social_accounts WHERE id = ?");
$curAcc->execute([$id]);
$curAccRow = $curAcc->fetch();
$platformVal = $fields['platform'] ?? ($curAccRow['platform'] ?? '');
$accountIdVal = $fields['account_id'] ?? ($curAccRow['account_id'] ?? '');
$profileUrlVal = $fields['profile_url'] ?? ($curAccRow['profile_url'] ?? '');
$dups = checkSingleAccountDuplicate($pdo, $platformVal, $accountIdVal, $profileUrlVal, [$id]);
if (!empty($dups)) Response::duplicates($dups);
if (!empty($fields)) {
[$sets, $params] = buildUpdate($fields);
$params[] = $id;