diff --git a/_self/manager_meeting_new.md b/_self/manager_meeting_new.md
index b26e088..e885c19 100644
--- a/_self/manager_meeting_new.md
+++ b/_self/manager_meeting_new.md
@@ -36,6 +36,18 @@
| CSS 不是原型风格 (Element Plus 默认) | 完整照搬原型 CSS: #169bd5 主按钮 + 32px input + 12px 灰字面包屑 + 22px h1 + ff4d4f 红字 + grid 1fr 1fr + 768px 响应式 |
| 字段映射 | 项目编号→projectNo, 项目名称→projectName, 总场次/总期数→totalSessions (不是 totalPeriods, biz_project 没此字段), 支持单位→sponsorOrgName (JOIN biz_org), 创建时间→createTime, 创建人员→createBy, 会议名称默认=项目名称 |
+### 第三轮: biz_project 加 create_user_id 列 (commit `待push`)
+
+| 问题 | 修复 |
+|---|---|
+| `biz_project` 没存"创建人 user_id", 只存 `create_by varchar(64)` (兼容字段, 来自 BaseEntity MetaObjectHandler 自动填当前登录用户名), 新建会议页 `snap.createBy` 显示原始用户名而非真实姓名 | DB: `ALTER TABLE biz_project ADD COLUMN create_user_id bigint DEFAULT NULL COMMENT '创建人user_id (JOIN biz_person 取 name)' AFTER create_by;` |
+| BizProject 实体无 `createUserId` / `createUserName` 字段 | `BizProject.java:80-83` 加 2 字段 + getter/setter; createUserName 不入库 (派生) |
+| BizProjectMapper.xml 不查 `create_user_id` | `BizProjectMapper.xml:4-42 resultMap` 加 2 result; `selectFields` (主) + `selectFieldsForSponsor` + `selectExecutorList` 全部加 `p.create_user_id` 列 + `LEFT JOIN biz_person bp ON bp.user_id = p.create_user_id` 取 `bp.name as create_user_name`; INSERT/UPDATE 加 `create_user_id` (INSERT 由 service 自动写, 旧调用方兼容) |
+| BizProjectServiceImpl.insert 不写 create_user_id | `BizProjectServiceImpl:32-37` 加 `entity.setCreateUserId(SecurityUtils.getUserId())` (留 null 给手工 import/seed 入口) |
+| MeetingNew.vue 用 `snap.createBy` | 改 `snap.createUserName`; onMounted 兼容 `d.createUserName \|\| d.createBy \|\| ''` |
+| 旧数据 (11 行) create_user_id 全 NULL, project 13 是 seed (create_time=NULL, lead_user_id=101) | **不回填** (用户指示: 测试数据, 无修改价值); 后续新项目 INSERT 自动带 user_id |
+| 受影响角色 (免费) | sponsor/executor 端 `Projects.vue` 列表的"创建人"列 (如有) 也走新字段 — 暂未引用, 不破坏 |
+
---
## 0. 4 跳定位 (铁律: 不按名字猜)
diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizProject.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizProject.java
index 5572532..e4310b6 100644
--- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizProject.java
+++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizProject.java
@@ -80,6 +80,10 @@ public class BizProject extends BaseEntity {
/** create_by */
@Excel(name = "create_by")
private String createBy;
+ /** create_user_id (创建人 sys_user.user_id, JOIN biz_person 取 name) */
+ private Long createUserId;
+ /** create_user_name (LEFT JOIN biz_person.name 派生, 不入库, 仅展示) */
+ private String createUserName;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -183,6 +187,10 @@ public class BizProject extends BaseEntity {
public void setIsBidProject(String isBidProject) { this.isBidProject = isBidProject; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
+ public Long getCreateUserId() { return createUserId; }
+ public void setCreateUserId(Long createUserId) { this.createUserId = createUserId; }
+ public String getCreateUserName() { return createUserName; }
+ public void setCreateUserName(String createUserName) { this.createUserName = createUserName; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizProjectServiceImpl.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizProjectServiceImpl.java
index 7b5d147..0be87b4 100644
--- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizProjectServiceImpl.java
+++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizProjectServiceImpl.java
@@ -6,6 +6,7 @@ import org.springframework.stereotype.Service;
import com.ruoyi.business.domain.BizProject;
import com.ruoyi.business.mapper.BizProjectMapper;
import com.ruoyi.business.service.IBizProjectService;
+import com.ruoyi.common.utils.SecurityUtils;
@Service
public class BizProjectServiceImpl implements IBizProjectService
@@ -28,7 +29,13 @@ public class BizProjectServiceImpl implements IBizProjectService
@Override
// 注: biz_project.project_id 用 DB AUTO_INCREMENT, 不需要 SnowflakeId 注入;
// 项目 ID 用 Long 后, SnowflakeId.injectIfEmpty 反射 setProjectId(String) 会 NoSuchMethodException 被吞掉 (SnowflakeId.java:30-31), 行为安全.
- public int insert(BizProject entity) { return bizProjectMapper.insert(entity); }
+ // create_user_id 走当前登录用户 (前台 API 无 @DataScope, 不会被过滤; 后台 @PreAuthorize 受角色限制)
+ public int insert(BizProject entity) {
+ if (entity.getCreateUserId() == null) {
+ entity.setCreateUserId(SecurityUtils.getUserId());
+ }
+ return bizProjectMapper.insert(entity);
+ }
@Override
public int updateByPrimaryKey(BizProject entity)
{ return bizProjectMapper.updateByPrimaryKey(entity); }
diff --git a/ry-api/ruoyi-business/src/main/resources/mapper/business/BizProjectMapper.xml b/ry-api/ruoyi-business/src/main/resources/mapper/business/BizProjectMapper.xml
index 8a908b6..c7dda30 100644
--- a/ry-api/ruoyi-business/src/main/resources/mapper/business/BizProjectMapper.xml
+++ b/ry-api/ruoyi-business/src/main/resources/mapper/business/BizProjectMapper.xml
@@ -27,6 +27,8 @@
+
+
@@ -41,9 +43,10 @@
- select p.project_id, p.project_no, p.project_name, p.total_sessions, p.done_sessions, p.todo_sessions, p.total_amount, p.available_amount, p.paid_labor_amount, p.paid_meeting_amount, p.manager_score, p.sponsor_score, p.sponsor_admin_user_name, p.project_form, p.is_finished, p.is_settled, p.sponsor_admin_user_id, p.lead_user_id, p.is_bid_project, p.create_by, p.create_time, p.update_by, p.update_time, p.manage_fee, p.start_time, p.end_time, p.submit_deadline_days, p.support_contract_url, p.execute_contract_url, p.invitation_url, p.support_letter_url, p.publish_url,
+ select p.project_id, p.project_no, p.project_name, p.total_sessions, p.done_sessions, p.todo_sessions, p.total_amount, p.available_amount, p.paid_labor_amount, p.paid_meeting_amount, p.manager_score, p.sponsor_score, p.sponsor_admin_user_name, p.project_form, p.is_finished, p.is_settled, p.sponsor_admin_user_id, p.lead_user_id, p.is_bid_project, p.create_by, p.create_user_id, p.create_time, p.update_by, p.update_time, p.manage_fee, p.start_time, p.end_time, p.submit_deadline_days, p.support_contract_url, p.execute_contract_url, p.invitation_url, p.support_letter_url, p.publish_url,
o.org_name as sponsor_org_name,
lu.user_name as lead_user_name,
+ bp.name as create_user_name,
(select group_concat(distinct o2.org_name separator ',')
from biz_project_assign bpa
join biz_org o2 on o2.org_id = bpa.execution_unit_id and o2.org_type = 'executor'
@@ -51,6 +54,7 @@
from biz_project p
left join biz_org o on o.user_id = p.sponsor_admin_user_id and o.org_type = 'sponsor'
left join sys_user lu on lu.user_id = p.lead_user_id
+ left join biz_person bp on bp.user_id = p.create_user_id
@@ -59,12 +63,13 @@
p.total_amount, p.available_amount, p.paid_labor_amount, p.paid_meeting_amount,
p.manager_score, p.sponsor_score, p.sponsor_admin_user_name, p.project_form, p.is_finished, p.is_settled,
p.sponsor_admin_user_id, p.lead_user_id, p.is_bid_project,
- p.create_by, p.create_time, p.update_by, p.update_time, p.manage_fee,
+ p.create_by, p.create_user_id, p.create_time, p.update_by, p.update_time, p.manage_fee,
p.start_time, p.end_time, p.submit_deadline_days,
p.support_contract_url, p.execute_contract_url, p.invitation_url, p.support_letter_url,
p.publish_url,
o.org_name as sponsor_org_name,
lu.user_name as lead_user_name,
+ bp.name as create_user_name,
(select group_concat(distinct o2.org_name separator ',')
from biz_project_assign bpa
join biz_org o2 on o2.org_id = bpa.execution_unit_id and o2.org_type = 'executor'
@@ -72,6 +77,7 @@
from biz_project p
left join biz_org o on o.user_id = p.sponsor_admin_user_id and o.org_type = 'sponsor'
left join sys_user lu on lu.user_id = p.lead_user_id
+ left join biz_person bp on bp.user_id = p.create_user_id