From 38e39c50dcca12534c4efe2b49355a97c396b507 Mon Sep 17 00:00:00 2001
From: shinnosuke <tantao@1hoper.com>
Date: 星期六, 10 十月 2026 11:44:05 +0800
Subject: [PATCH] 更新....
---
talent-card-server/src/main/java/com/talentcard/server/business/talent/TalentService.java | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/talent-card-server/src/main/java/com/talentcard/server/business/talent/TalentService.java b/talent-card-server/src/main/java/com/talentcard/server/business/talent/TalentService.java
index ba96b94..7f3b096 100644
--- a/talent-card-server/src/main/java/com/talentcard/server/business/talent/TalentService.java
+++ b/talent-card-server/src/main/java/com/talentcard/server/business/talent/TalentService.java
@@ -231,6 +231,51 @@
return detail(id);
}
+ /**
+ * 游客(还没有人才卡)补录认证信息并升级为持卡人:建一张 PERSONAL 卡,同时把等级、卡号写回 talent_user。
+ *
+ * <p>已经有有效主卡的持卡人不能走这条路——改等级有单独的「修改人才等级」入口,避免这里重复发卡。
+ */
+ @Transactional
+ public Map<String, Object> upgrade(Long id, TalentUpgradeRequest request) {
+ Integer existingCards = jdbcTemplate.queryForObject("""
+ select count(*) from talent_card
+ where deleted = 0 and talent_id = ? and card_type = 'PERSONAL'
+ """, Integer.class, id);
+ if (existingCards != null && existingCards > 0) {
+ throw new BusinessException(ErrorCode.CONFLICT, "该持卡人已有有效人才卡,请改用「修改人才等级」");
+ }
+ String cardNo = request.talentCardNo().trim().toUpperCase();
+ Integer cardCount = jdbcTemplate.queryForObject("select count(*) from talent_card where card_no = ?", Integer.class, cardNo);
+ if (cardCount != null && cardCount > 0) {
+ throw new BusinessException(ErrorCode.CONFLICT, "人才卡号已存在");
+ }
+ int updated = jdbcTemplate.update("""
+ update talent_user
+ set name = ?, id_card_no = ?, gender = ?, work_unit = ?, talent_level = ?,
+ source_area_type = ?, work_address = ?, contact_address = ?, talent_card_no = ?
+ where id = ? and deleted = 0
+ """,
+ request.name(),
+ blankToNull(request.idCardNo()),
+ request.gender(),
+ blankToNull(request.workUnit()),
+ request.talentLevel(),
+ defaultValue(request.sourceAreaType(), "LOCAL"),
+ blankToNull(request.workAddress()),
+ blankToNull(request.contactAddress()),
+ cardNo,
+ id);
+ if (updated == 0) {
+ throw new BusinessException(ErrorCode.NOT_FOUND, "持卡人不存在");
+ }
+ jdbcTemplate.update("""
+ insert into talent_card(talent_id, card_no, card_type, card_level, valid_start, valid_end, issue_time, status)
+ values (?, ?, 'PERSONAL', ?, curdate(), date_add(curdate(), interval 1 year), now(), 1)
+ """, id, cardNo, request.talentLevel());
+ return detail(id);
+ }
+
@Transactional
public Map<String, Object> updateCardLevel(Long id, String talentLevel) {
Integer cardCount = jdbcTemplate.queryForObject("""
--
Gitblit v1.7.1