From 66a928a870eabbc08cc8a41f548858060f0a2d7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E5=BA=86=E6=B3=B0?= <12369755+htcloud1@user.noreply.gitee.com> Date: Tue, 18 Aug 2026 22:33:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(meeting-new):=20=E8=90=BD=E5=AE=9E=20manage?= =?UTF-8?q?r/meetings/new=20=E5=AE=A1=E6=9F=A5=E6=8A=A5=E5=91=8A=2013=20?= =?UTF-8?q?=E9=A1=B9=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit P0 数据正确性: - BizMeetingMapper.xml INSERT 扩 20 列 (原只插 meeting_id) - BizMeetingServiceImpl businessId 兜底生成 (DDL NOT NULL, 前端无字段) - MeetingNew.vue onMounted 回填 projectId/projectName (原只 projectNo) P1 核心功能: - 删 会议ID 输入框 (PK 让用户填错) - 加 6 个项目只读快照 (el-descriptions, 跟原型对齐) - 会议名称默认 = 项目名称, 不可修改 (加红字提示 + disabled) - meetingId String → Long (6 文件: BizMeeting/Mapper/ServiceImpl/Controller/IBizMeetingService/Mapper.xml) - supervisionTime String → Date + @JsonFormat P2 体验: - 面包屑改 项目列表 / 新建会议 - page-sub 显示项目名而非 ID 13 - 当前阶段 el-select 4 → 10 选项 - resultMap/selectFields 补 9 个漏字段 (projectId/projectName/orgName/supervision*/invitation*/schedule*/labor*) Co-Authored-By: Claude --- _self/manager_meeting_new.md | 20 +++++ .../controller/BizMeetingController.java | 4 +- .../com/ruoyi/business/domain/BizMeeting.java | 13 ++-- .../business/mapper/BizMeetingMapper.java | 6 +- .../business/service/IBizMeetingService.java | 6 +- .../service/impl/BizMeetingServiceImpl.java | 16 +++- .../mapper/business/BizMeetingMapper.xml | 65 +++++++++++++--- ry-vue3/src/views/manager/MeetingNew.vue | 76 +++++++++++++++---- 8 files changed, 162 insertions(+), 44 deletions(-) diff --git a/_self/manager_meeting_new.md b/_self/manager_meeting_new.md index dbb8889..b9b517a 100644 --- a/_self/manager_meeting_new.md +++ b/_self/manager_meeting_new.md @@ -7,6 +7,26 @@ --- +## 修复记录 (2026-08-18 第二次审查时落实) + +| # | 问题 | 修复 | 状态 | +|---|---|---|---| +| P0#1 | mapper INSERT 只插 meeting_id | `BizMeetingMapper.xml:43-87` 扩 20 列 `` | ✅ | +| P0#2 | businessId DDL NOT NULL 前端无字段 | `BizMeetingServiceImpl:24-26` 兜底 `IdGenerator.generateId()` | ✅ | +| P0#3 | form 没 projectId (只 projectNo) | `MeetingNew.vue:88-105` onMounted 回填 projectId/projectName | ✅ | +| P1#4 | "会议ID" 输入框让用户填 PK | 删 field + 删 rule | ✅ | +| P1#5 | 6 个项目只读快照全缺失 | 加 el-descriptions (项目编号/名称/形式/开始时间/创建人/创建时间) | ✅ | +| P1#6 | 会议名称默认 = 项目名称 | onMounted 回填 + 字段 disabled + 红字提示 | ✅ | +| P1#7 | meetingId String → Long | 6 文件: BizMeeting.java + Mapper.java + ServiceImpl.java + Controller.java + IBizMeetingService.java + Mapper.xml | ✅ | +| P1#8 | supervisionTime String → Date | BizMeeting.java 加 `@JsonFormat` + Date | ✅ | +| P2#9 | 面包屑不一致 | 改 "项目列表 / 新建会议" | ✅ | +| P2#10 | page-sub 显示原始 ID "13" | 改成 "{projectName} ({projectNo})" | ✅ | +| P2#11 | 当前阶段 el-select 4 → 10 选项 | 补 待监管/监管通过/待整改/待结算/已结算/已结题 | ✅ | +| P2#12 | resultMap 漏字段 | BizMeetingMapper.xml:4-28 补 9 个 result | ✅ | +| P2#13 | selectFields SQL 漏字段 | BizMeetingMapper.xml:30 补 9 列 | ✅ | + +--- + ## 0. 4 跳定位 (铁律: 不按名字猜) | 跳 | 文件:行 | 结果 | diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizMeetingController.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizMeetingController.java index 50ea44f..cfad8fd 100644 --- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizMeetingController.java +++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizMeetingController.java @@ -28,7 +28,7 @@ public class BizMeetingController extends BaseController return getDataTable(list); } @GetMapping("/{meetingId}") - public AjaxResult getInfo(@PathVariable("meetingId") String meetingId) + public AjaxResult getInfo(@PathVariable("meetingId") Long meetingId) { return success(bizMeetingService.getById(meetingId)); } @@ -46,7 +46,7 @@ public class BizMeetingController extends BaseController } @Log(title = "会议", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable String[] ids) + public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(bizMeetingService.deleteByPrimaryKeys(ids)); } diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMeeting.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMeeting.java index 44d1ecf..0b4887f 100644 --- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMeeting.java +++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMeeting.java @@ -9,8 +9,8 @@ import com.ruoyi.common.core.domain.BaseEntity; /** 会议对象 BizMeeting */ public class BizMeeting extends BaseEntity { private static final long serialVersionUID = 1L; - /** meetingId */ - private String meetingId; + /** meetingId (与 DB bigint 对齐, AUTO_INCREMENT) */ + private Long meetingId; /** project_no */ @Excel(name = "project_no") private String projectNo; @@ -64,16 +64,17 @@ public class BizMeeting extends BaseEntity { private String supervisionOpinion; /** 监察人 */ private String supervisionBy; - /** 监察时间 */ - private String supervisionTime; + /** 监察时间 (与 DB datetime 对齐) */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date supervisionTime; /** 邀请函URL */ private String invitationUrl; /** 日程海报URL */ private String scheduleUrl; /** 签署劳务 0未签 1已签 */ private String laborSigned; - public String getMeetingId() { return meetingId; } - public void setMeetingId(String meetingId) { this.meetingId = meetingId; } + public Long getMeetingId() { return meetingId; } + public void setMeetingId(Long meetingId) { this.meetingId = meetingId; } public String getProjectNo() { return projectNo; } public void setProjectNo(String projectNo) { this.projectNo = projectNo; } public String getBusinessId() { return businessId; } diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizMeetingMapper.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizMeetingMapper.java index 506d9e3..8ec92b6 100644 --- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizMeetingMapper.java +++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizMeetingMapper.java @@ -7,10 +7,10 @@ import com.ruoyi.business.domain.BizMeeting; */ public interface BizMeetingMapper { - BizMeeting selectByPrimaryKey(String meetingId); + BizMeeting selectByPrimaryKey(Long meetingId); List selectList(BizMeeting entity); int insert(BizMeeting entity); int updateByPrimaryKey(BizMeeting entity); - int deleteByPrimaryKey(String meetingId); - int deleteByPrimaryKeys(String[] meetingIds); + int deleteByPrimaryKey(Long meetingId); + int deleteByPrimaryKeys(Long[] meetingIds); } \ No newline at end of file diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizMeetingService.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizMeetingService.java index 4a58959..93a301b 100644 --- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizMeetingService.java +++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizMeetingService.java @@ -8,10 +8,10 @@ import com.ruoyi.business.domain.BizMeeting; */ public interface IBizMeetingService { - BizMeeting getById(String meetingId); + BizMeeting getById(Long meetingId); List selectList(BizMeeting entity); int insert(BizMeeting entity); int updateByPrimaryKey(BizMeeting entity); - int deleteByPrimaryKey(String meetingId); - int deleteByPrimaryKeys(String[] meetingId); + int deleteByPrimaryKey(Long meetingId); + int deleteByPrimaryKeys(Long[] meetingId); } diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizMeetingServiceImpl.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizMeetingServiceImpl.java index 4dc2939..b6c9740 100644 --- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizMeetingServiceImpl.java +++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizMeetingServiceImpl.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Service; import com.ruoyi.business.domain.BizMeeting; import com.ruoyi.business.mapper.BizMeetingMapper; import com.ruoyi.business.service.IBizMeetingService; +import com.ruoyi.common.utils.id.IdGenerator; @Service public class BizMeetingServiceImpl implements IBizMeetingService @@ -14,20 +15,27 @@ public class BizMeetingServiceImpl implements IBizMeetingService private BizMeetingMapper bizMeetingMapper; @Override - public BizMeeting getById(String meetingId) + public BizMeeting getById(Long meetingId) { return bizMeetingMapper.selectByPrimaryKey(meetingId); } @Override public List selectList(BizMeeting entity) { return bizMeetingMapper.selectList(entity); } @Override - public int insert(BizMeeting entity) { com.ruoyi.common.utils.id.SnowflakeId.injectIfEmpty(entity, "meetingId"); return bizMeetingMapper.insert(entity); } + public int insert(BizMeeting entity) { + // meetingId 走 DB AUTO_INCREMENT (BizProject 同模式: SnowflakeId.injectIfEmpty 对 Long setter 会 NoSuchMethodException 被吞掉, 无副作用); + // businessId DDL NOT NULL UNIQUE, 前端无字段, 兜底用雪花 ID 字符串 (跟 meetingId 同源, 保证唯一) + if (entity.getBusinessId() == null || entity.getBusinessId().isEmpty()) { + entity.setBusinessId(String.valueOf(IdGenerator.generateId())); + } + return bizMeetingMapper.insert(entity); + } @Override public int updateByPrimaryKey(BizMeeting entity) { return bizMeetingMapper.updateByPrimaryKey(entity); } @Override - public int deleteByPrimaryKey(String meetingId) + public int deleteByPrimaryKey(Long meetingId) { return bizMeetingMapper.deleteByPrimaryKey(meetingId); } @Override - public int deleteByPrimaryKeys(String[] meetingId) + public int deleteByPrimaryKeys(Long[] meetingId) { return bizMeetingMapper.deleteByPrimaryKeys(meetingId); } } diff --git a/ry-api/ruoyi-business/src/main/resources/mapper/business/BizMeetingMapper.xml b/ry-api/ruoyi-business/src/main/resources/mapper/business/BizMeetingMapper.xml index 83c0ddc..27ce737 100644 --- a/ry-api/ruoyi-business/src/main/resources/mapper/business/BizMeetingMapper.xml +++ b/ry-api/ruoyi-business/src/main/resources/mapper/business/BizMeetingMapper.xml @@ -3,25 +3,34 @@ - - + + + + + + - - + + + + + + + - select meeting_id, project_no, business_id, project_form, meeting_name, start_time, end_time, total_periods, period_no, current_stage, create_by, create_time, update_by, update_time + select meeting_id, business_id, project_id, project_no, project_name, meeting_name, period_no, total_periods, project_form, start_time, end_time, org_name, current_stage, supervision_opinion, supervision_by, supervision_time, invitation_url, schedule_url, labor_signed, create_by, create_time, update_by, update_time from biz_meeting - where meeting_id = #{meetingId} @@ -34,10 +43,46 @@ insert into biz_meeting - meeting_id, + meeting_id, + business_id, + project_id, + project_no, + project_name, + meeting_name, + period_no, + total_periods, + project_form, + start_time, + end_time, + org_name, + current_stage, + supervision_opinion, + supervision_by, + supervision_time, + invitation_url, + schedule_url, + labor_signed, - #{meetingId}, + #{meetingId}, + #{businessId}, + #{projectId}, + #{projectNo}, + #{projectName}, + #{meetingName}, + #{periodNo}, + #{totalPeriods}, + #{projectForm}, + #{startTime}, + #{endTime}, + #{orgName}, + #{currentStage}, + #{supervisionOpinion}, + #{supervisionBy}, + #{supervisionTime}, + #{invitationUrl}, + #{scheduleUrl}, + #{laborSigned}, @@ -64,10 +109,10 @@ where meeting_id = #{meetingId} - + delete from biz_meeting where meeting_id = #{meetingId} - + delete from biz_meeting where meeting_id in #{meetingId} diff --git a/ry-vue3/src/views/manager/MeetingNew.vue b/ry-vue3/src/views/manager/MeetingNew.vue index f1a18b4..39db39d 100644 --- a/ry-vue3/src/views/manager/MeetingNew.vue +++ b/ry-vue3/src/views/manager/MeetingNew.vue @@ -1,17 +1,33 @@