Files
superlink/api/company/add.php
T

90 lines
3.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 企业新增接口 POST /api/company/add.php
* 必填:display_name;其余字段见 COMPANY_FIELDS 白名单
*/
require_once __DIR__ . '/../common/db.php';
require_once __DIR__ . '/../common/response.php';
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('company');
$data = extractFields(COMPANY_FIELDS);
// 显示名称不再单独录入:取中文名称(数据库 display_name 为 NOT NULL)
if (empty($data['display_name'])) {
$data['display_name'] = $data['name_zh'] ?? '';
}
if (empty($data['display_name'])) {
Response::error('企业名称(中文名称)为必填项', 400);
}
// 非上市(否或空白)不允许有股票代码
if ((int)($data['is_listed'] ?? 0) !== 1) {
$data['stock_code'] = null;
}
$pdo = DB::getInstance()->getPdo();
// 唯一性校验:企业名称 / 注册号 / 联系方式,收集全部重复
$dups = [];
$dup = findDuplicate($pdo, 'company_name', $data['name_zh'] ?? $data['display_name'] ?? '');
if ($dup) $dups[] = $dup;
if (!empty($data['registration_number'])) {
$dup = findDuplicate($pdo, 'registration_number', $data['registration_number']);
if ($dup) $dups[] = $dup;
}
if (isset($_POST['accounts'])) {
$accounts = json_decode($_POST['accounts'], true);
if (!is_array($accounts)) {
Response::error('联系方式格式错误', 400);
}
$dups = array_merge($dups, checkAccountsDuplicates($pdo, $accounts));
}
if (!empty($dups)) Response::duplicates($dups);
[$sql, $params] = buildInsert($data);
$pdo->prepare("INSERT INTO companies $sql")->execute($params);
$newId = (int)$pdo->lastInsertId();
// 财务信息 / 资质认证 / 联系方式(可选,整表替换)
if (array_key_exists('financials', $_POST) || array_key_exists('certifications', $_POST) || array_key_exists('accounts', $_POST)) {
$pdo->beginTransaction();
try {
if (array_key_exists('financials', $_POST)) {
$financials = json_decode($_POST['financials'], true);
if (!is_array($financials)) {
$pdo->rollBack();
Response::error('财务信息格式错误', 400);
}
saveCompanyFinancials($pdo, $newId, $financials);
}
if (array_key_exists('certifications', $_POST)) {
$certs = json_decode($_POST['certifications'], true);
if (!is_array($certs)) {
$pdo->rollBack();
Response::error('资质认证格式错误', 400);
}
saveCompanyCertifications($pdo, $newId, $certs);
}
if (array_key_exists('accounts', $_POST)) {
saveCompanyAccounts($pdo, $newId, $accounts ?? []);
}
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
Response::error('关联信息保存失败:' . $e->getMessage());
}
}
// 完整度检查:企业主表 + 其 social_accounts
updateIncomplete($pdo, 'companies', $newId);
updateAccountsIncomplete($pdo, 'company', $newId);
logCurrent('add', 'company', 'companies', $newId, $data);
Response::success(['id' => $newId], '新增成功');