From a069a12647ab551281091efb0f066163d1c8c156 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期一, 02 六月 2025 17:36:30 +0800
Subject: [PATCH] 首页待办事项

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectionReportController.java       |   29 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TNoticeServiceImpl.java              |   32 +++
 ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectProposalQuery.java                  |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TFeasibilityStudyReportController.java |   17 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaProduceReportController.java        |   18 +
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                               |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TNoticeMapper.java                         |   16 +
 ruoyi-system/src/main/java/com/ruoyi/system/model/TTestMethodConfirmSheet.java                |   10 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentResultReportController.java |   16 +
 ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectProposal.java                       |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectTeamStaff.java                      |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetController.java |   23 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/TNoticeService.java                       |   25 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentDispatchController.java     |   13 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentSchemeController.java       |   39 ++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectApprovalReportController.java  |   19 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectProposalController.java        |   37 +++
 ruoyi-system/src/main/resources/mapper/system/TProjectProposalMapper.xml                      |   11 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSamplingRecordController.java         |   17 +
 ruoyi-system/src/main/resources/mapper/system/TNoticeMapper.xml                               |   21 ++
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java                  |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java                 |   69 +++++++
 ruoyi-system/src/main/java/com/ruoyi/system/model/TNotice.java                                |   72 ++++++++
 ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetMapper.xml               |    5 
 24 files changed, 475 insertions(+), 43 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentDispatchController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentDispatchController.java
index 76952f5..b406316 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentDispatchController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentDispatchController.java
@@ -51,8 +51,9 @@
     private final TProjectTeamService projectTeamService;
     private final TProjectTeamStaffService projectTeamStaffService;
     private final TProjectProposalService projectProposalService;
+    private final TNoticeService noticeService;
     @Autowired
-    public TExperimentDispatchController(TExperimentDispatchService experimentDispatchService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TExperimentDispatchGroupService experimentDispatchGroupService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService, TExperimentDispatchTaskService experimentDispatchTaskService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, TProjectProposalService projectProposalService) {
+    public TExperimentDispatchController(TExperimentDispatchService experimentDispatchService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TExperimentDispatchGroupService experimentDispatchGroupService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService, TExperimentDispatchTaskService experimentDispatchTaskService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, TProjectProposalService projectProposalService, TNoticeService noticeService) {
         this.experimentDispatchService = experimentDispatchService;
         this.tokenService = tokenService;
         this.sysUserService = sysUserService;
@@ -63,6 +64,7 @@
         this.projectTeamService = projectTeamService;
         this.projectTeamStaffService = projectTeamStaffService;
         this.projectProposalService = projectProposalService;
+        this.noticeService = noticeService;
     }
 
     /**
@@ -161,6 +163,15 @@
             experimentDispatchTask.setDispatchId(dto.getId());
         });
         experimentDispatchTaskService.saveBatch(experimentDispatchTasks);
+
+        // MESSAGE 添加消息
+        experimentDispatchParticipants.stream().filter(e->e.getRoleType().equals(4)).forEach(teamStaff -> {
+            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【实验调度】等待确认", tokenService.getLoginUser().getUser().getNickName(),11);
+        });
+        experimentDispatchParticipants.stream().filter(e->e.getRoleType().equals(5)).forEach(teamStaff -> {
+            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【实验调度】等待确认", tokenService.getLoginUser().getUser().getNickName(),14);
+        });
+
         return R.ok();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentResultReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentResultReportController.java
index 275df4d..1949409 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentResultReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentResultReportController.java
@@ -54,8 +54,9 @@
     private final TExperimentDispatchParticipantsService experimentDispatchParticipantsService;
     private final TExperimentDispatchService experimentDispatchService;
     private final TProjectProposalService projectProposalService;
+    private final TNoticeService noticeService;
     @Autowired
-    public TExperimentResultReportController(TExperimentResultReportService experimentResultReportService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TResultWorkEvaluateService resultWorkEvaluateService, TExperimentSchemeService experimentSchemeService, TInspectionReportService inspectionReportService, TProjectTeamStaffService projectTeamStaffService, TProjectTeamService projectTeamService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService, TExperimentDispatchService experimentDispatchService, TProjectProposalService projectProposalService) {
+    public TExperimentResultReportController(TExperimentResultReportService experimentResultReportService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TResultWorkEvaluateService resultWorkEvaluateService, TExperimentSchemeService experimentSchemeService, TInspectionReportService inspectionReportService, TProjectTeamStaffService projectTeamStaffService, TProjectTeamService projectTeamService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService, TExperimentDispatchService experimentDispatchService, TProjectProposalService projectProposalService, TNoticeService noticeService) {
         this.experimentResultReportService = experimentResultReportService;
         this.tokenService = tokenService;
         this.sysUserService = sysUserService;
@@ -68,6 +69,7 @@
         this.experimentDispatchParticipantsService = experimentDispatchParticipantsService;
         this.experimentDispatchService = experimentDispatchService;
         this.projectProposalService = projectProposalService;
+        this.noticeService = noticeService;
     }
 
     /**
@@ -161,6 +163,18 @@
             resultWorkEvaluate.setTeamId(projectTeamStaff.getTeamId());
         }
         resultWorkEvaluateService.saveOrUpdateBatch(resultWorkEvaluates);
+
+        // 查询项目组
+        TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
+        // MESSAGE 添加消息
+        TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                .eq(TProjectTeamStaff::getRoleType, 2)
+                .last("LIMIT 1"));
+        if(Objects.nonNull(teamStaff)){
+            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【实验结果汇报】等待评定", tokenService.getLoginUser().getUser().getNickName(),3);
+        }
+
         return R.ok();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentSchemeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentSchemeController.java
index fef862b..9fac33e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentSchemeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TExperimentSchemeController.java
@@ -52,8 +52,10 @@
     private final TProjectProposalService projectProposalService;
     private final TExperimentDispatchGroupService experimentDispatchGroupService;
     private final TProjectTeamStaffService projectTeamStaffService;
+    private final TProjectTeamService projectTeamService;
+    private final TNoticeService noticeService;
     @Autowired
-    public TExperimentSchemeController(TExperimentSchemeService experimentSchemeService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TExperimentSchemePersonService experimentSchemePersonService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService, TExperimentDispatchService experimentDispatchService, TProjectProposalService projectProposalService, TExperimentDispatchGroupService experimentDispatchGroupService, TProjectTeamStaffService projectTeamStaffService) {
+    public TExperimentSchemeController(TExperimentSchemeService experimentSchemeService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TExperimentSchemePersonService experimentSchemePersonService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService, TExperimentDispatchService experimentDispatchService, TProjectProposalService projectProposalService, TExperimentDispatchGroupService experimentDispatchGroupService, TProjectTeamStaffService projectTeamStaffService, TProjectTeamService projectTeamService, TNoticeService noticeService) {
         this.experimentSchemeService = experimentSchemeService;
         this.tokenService = tokenService;
         this.sysUserService = sysUserService;
@@ -64,6 +66,8 @@
         this.projectProposalService = projectProposalService;
         this.experimentDispatchGroupService = experimentDispatchGroupService;
         this.projectTeamStaffService = projectTeamStaffService;
+        this.projectTeamService = projectTeamService;
+        this.noticeService = noticeService;
     }
 
     /**
@@ -214,6 +218,23 @@
         TExperimentSchemeDTO dto = JSON.parseObject(param,TExperimentSchemeDTO.class);
         dto.setStatus(6);
         experimentSchemeService.updateById(dto);
+
+        // 通过当前用户查询项目组
+        Long userId = tokenService.getLoginUser().getUserId();
+        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getUserId, userId)
+                .last("LIMIT 1"));
+        // 查询项目组
+        TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
+        // MESSAGE 添加消息
+        TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                .eq(TProjectTeamStaff::getRoleType, 3)
+                .last("LIMIT 1"));
+        if(Objects.nonNull(teamStaff)){
+            noticeService.saveNotice(teamStaff.getUserId(), "实验员已提交实验方案,请查收!", tokenService.getLoginUser().getUser().getNickName(),8);
+        }
+
         return R.ok();
     }
 
@@ -309,6 +330,22 @@
                 .set(TExperimentScheme::getStopFile, applicationTerminationDTO.getStopFile())
                 .set(TExperimentScheme::getStopFileName, applicationTerminationDTO.getStopFileName())
                 .set(TExperimentScheme::getCommitSign, applicationTerminationDTO.getCommitSign()));
+        // 通过当前用户查询项目组
+        Long userId = tokenService.getLoginUser().getUserId();
+        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getUserId, userId)
+                .last("LIMIT 1"));
+        // 查询项目组
+        TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
+        // MESSAGE 添加消息
+        TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                .eq(TProjectTeamStaff::getRoleType, 2)
+                .last("LIMIT 1"));
+        if(Objects.nonNull(teamStaff)){
+            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【实验方案中止申请】等待审批", tokenService.getLoginUser().getUser().getNickName(),2);
+        }
+
         return R.ok();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TFeasibilityStudyReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TFeasibilityStudyReportController.java
index 29490ee..a755792 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TFeasibilityStudyReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TFeasibilityStudyReportController.java
@@ -55,8 +55,9 @@
     private final TProjectTeamStaffService projectTeamStaffService;
     private final ISysUserService sysUserService;
     private final SysUserMapper sysUserMapper;
+    private final TNoticeService noticeService;
     @Autowired
-    public TFeasibilityStudyReportController(TFeasibilityStudyReportService feasibilityStudyReportService, TFeasibilityReportFileService feasibilityReportFileService, TokenService tokenService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, ISysUserService sysUserService, SysUserMapper sysUserMapper) {
+    public TFeasibilityStudyReportController(TFeasibilityStudyReportService feasibilityStudyReportService, TFeasibilityReportFileService feasibilityReportFileService, TokenService tokenService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TNoticeService noticeService) {
         this.feasibilityStudyReportService = feasibilityStudyReportService;
         this.feasibilityReportFileService = feasibilityReportFileService;
         this.tokenService = tokenService;
@@ -64,6 +65,7 @@
         this.projectTeamStaffService = projectTeamStaffService;
         this.sysUserService = sysUserService;
         this.sysUserMapper = sysUserMapper;
+        this.noticeService = noticeService;
     }
 
     /**
@@ -206,6 +208,16 @@
             }
         }
         feasibilityReportFileService.saveBatch(feasibilityReportFiles);
+
+        // MESSAGE 添加消息
+        TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                .eq(TProjectTeamStaff::getRoleType, 2)
+                .last("LIMIT 1"));
+        if(Objects.nonNull(teamStaff)){
+            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【可研报告】/【可行报告】/【工艺开发工具】/【验证与发布】/【立项报告库】等待审核", tokenService.getLoginUser().getUser().getNickName(),4);
+        }
+
         return R.ok();
     }
 
@@ -331,6 +343,9 @@
         feasibilityStudyReport.setAuditPersonId(userId);
         feasibilityStudyReport.setAuditTime(LocalDateTime.now());
         feasibilityStudyReportService.updateById(feasibilityStudyReport);
+        // MESSAGE 添加消息
+        noticeService.saveNotice(userId, "您有【1】条【可研报告】/【可行报告】/【工艺开发工具】/【验证与发布】等待评定", tokenService.getLoginUser().getUser().getNickName(),5);
+
         return R.ok();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectionReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectionReportController.java
index eaecd3c..28591ff 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectionReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectionReportController.java
@@ -11,10 +11,7 @@
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.TInspectionReportDTO;
 import com.ruoyi.system.mapper.SysUserMapper;
-import com.ruoyi.system.model.TExperimentDispatch;
-import com.ruoyi.system.model.TExperimentDispatchParticipants;
-import com.ruoyi.system.model.TInspectionReport;
-import com.ruoyi.system.model.TProjectProposal;
+import com.ruoyi.system.model.*;
 import com.ruoyi.system.query.TInspectionReportQuery;
 import com.ruoyi.system.service.*;
 import com.ruoyi.system.vo.TInspectionReportVO;
@@ -26,6 +23,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -48,8 +46,11 @@
     private final TokenService tokenService;
     private final ISysUserService sysUserService;
     private final SysUserMapper sysUserMapper;
+    private final TNoticeService noticeService;
+    private final TProjectTeamService projectTeamService;
+    private final TProjectTeamStaffService projectTeamStaffService;
     @Autowired
-    public TInspectionReportController(TInspectionReportService inspectionReportService, TExperimentDispatchService experimentDispatchService, TProjectProposalService projectProposalService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper) {
+    public TInspectionReportController(TInspectionReportService inspectionReportService, TExperimentDispatchService experimentDispatchService, TProjectProposalService projectProposalService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TNoticeService noticeService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService) {
         this.inspectionReportService = inspectionReportService;
         this.experimentDispatchService = experimentDispatchService;
         this.projectProposalService = projectProposalService;
@@ -57,6 +58,9 @@
         this.tokenService = tokenService;
         this.sysUserService = sysUserService;
         this.sysUserMapper = sysUserMapper;
+        this.noticeService = noticeService;
+        this.projectTeamService = projectTeamService;
+        this.projectTeamStaffService = projectTeamStaffService;
     }
 
     /**
@@ -80,6 +84,21 @@
     public R<Boolean> add(@RequestBody String param) {
         TInspectionReportDTO dto = JSON.parseObject(param,TInspectionReportDTO.class);
         inspectionReportService.save(dto);
+        // 通过当前用户查询项目组
+        Long userId = tokenService.getLoginUser().getUserId();
+        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getUserId, userId)
+                .last("LIMIT 1"));
+        // 查询项目组
+        TProjectTeam projectTeam = projectTeamService.getById(projectTeamStaff.getTeamId());
+        // MESSAGE 添加消息
+        TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                .eq(TProjectTeamStaff::getRoleType, 3)
+                .last("LIMIT 1"));
+        if(Objects.nonNull(teamStaff)){
+            noticeService.saveNotice(teamStaff.getUserId(), "化验师已提交检验报告,请查收!", tokenService.getLoginUser().getUser().getNickName(),7);
+        }
         return R.ok();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java
new file mode 100644
index 0000000..bb7a2f7
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java
@@ -0,0 +1,69 @@
+package com.ruoyi.web.controller.api;
+
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.model.TNotice;
+import com.ruoyi.system.service.TNoticeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 待办事项 前端控制器
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2025-04-08
+ */
+@Api(tags = "待办事项")
+@RestController
+@RequestMapping("")
+public class TNoticeController {
+
+    private final TNoticeService noticeService;
+    private final TokenService tokenService;
+    @Autowired
+    public TNoticeController(TNoticeService noticeService, TokenService tokenService) {
+        this.noticeService = noticeService;
+        this.tokenService = tokenService;
+    }
+
+    /**
+     * 获取待办事项
+     */
+    //@PreAuthorize("@ss.hasPermi('system:notice:list')")
+    @ApiOperation(value = "获取待办事项")
+    @GetMapping(value = "/open/t-notice/list")
+    public R<List<TNotice>> list() {
+        // 获取当前用户
+        Long userId = tokenService.getLoginUser().getUserId();
+        List<TNotice> list = noticeService.list(Wrappers.lambdaQuery(TNotice.class)
+                .eq(TNotice::getUserId, userId)
+                .eq(TNotice::getIsRead, 0));
+        return R.ok(list);
+    }
+
+    /**
+     * 操作已读
+     */
+    //@PreAuthorize("@ss.hasPermi('system:notice:read')")
+    @ApiOperation(value = "操作已读")
+    @GetMapping(value = "/open/t-notice/read")
+    public R<String> read(@RequestParam String id) {
+        TNotice notice = noticeService.getById(id);
+        notice.setIsRead(1);
+        noticeService.updateById(notice);
+        return R.ok();
+    }
+
+}
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectApprovalReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectApprovalReportController.java
index c506e97..5e504d0 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectApprovalReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectApprovalReportController.java
@@ -19,10 +19,7 @@
 import com.ruoyi.system.model.TProjectTeam;
 import com.ruoyi.system.model.TProjectTeamStaff;
 import com.ruoyi.system.query.TProjectApprovalReportQuery;
-import com.ruoyi.system.service.TFeasibilityReportFileService;
-import com.ruoyi.system.service.TProjectApprovalReportService;
-import com.ruoyi.system.service.TProjectTeamService;
-import com.ruoyi.system.service.TProjectTeamStaffService;
+import com.ruoyi.system.service.*;
 import com.ruoyi.system.vo.TProjectApprovalReportVO;
 import io.jsonwebtoken.lang.Collections;
 import io.swagger.annotations.Api;
@@ -55,14 +52,16 @@
     private final TProjectTeamService projectTeamService;
     private final TProjectTeamStaffService projectTeamStaffService;
     private final SysUserMapper sysUserMapper;
+    private final TNoticeService noticeService;
     @Autowired
-    public TProjectApprovalReportController(TProjectApprovalReportService projectApprovalReportService, TFeasibilityReportFileService feasibilityReportFileService, TokenService tokenService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, SysUserMapper sysUserMapper) {
+    public TProjectApprovalReportController(TProjectApprovalReportService projectApprovalReportService, TFeasibilityReportFileService feasibilityReportFileService, TokenService tokenService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, SysUserMapper sysUserMapper, TNoticeService noticeService) {
         this.projectApprovalReportService = projectApprovalReportService;
         this.feasibilityReportFileService = feasibilityReportFileService;
         this.tokenService = tokenService;
         this.projectTeamService = projectTeamService;
         this.projectTeamStaffService = projectTeamStaffService;
         this.sysUserMapper = sysUserMapper;
+        this.noticeService = noticeService;
     }
 
     /**
@@ -131,6 +130,16 @@
             }
             feasibilityReportFileService.saveBatch(feasibilityReportFiles);
         }
+
+        // MESSAGE 添加消息
+        TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                .eq(TProjectTeamStaff::getRoleType, 2)
+                .last("LIMIT 1"));
+        if(Objects.nonNull(teamStaff)){
+            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【可研报告】/【可行报告】/【工艺开发工具】/【验证与发布】/【立项报告库】等待审核", tokenService.getLoginUser().getUser().getNickName(),4);
+        }
+
         return R.ok();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectProposalController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectProposalController.java
index 681f46a..6415a47 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectProposalController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectProposalController.java
@@ -9,7 +9,6 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.enums.ProjectStageEnum;
-import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.AuditStatusDTO;
 import com.ruoyi.system.dto.TProjectProposalDTO;
@@ -18,22 +17,19 @@
 import com.ruoyi.system.model.TProjectTeam;
 import com.ruoyi.system.model.TProjectTeamStaff;
 import com.ruoyi.system.query.TProjectProposalQuery;
-import com.ruoyi.system.service.ISysUserService;
-import com.ruoyi.system.service.TProjectProposalService;
-import com.ruoyi.system.service.TProjectTeamService;
-import com.ruoyi.system.service.TProjectTeamStaffService;
+import com.ruoyi.system.service.*;
 import com.ruoyi.system.vo.TProjectProposalVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -53,13 +49,15 @@
     private final ISysUserService sysUserService;
     private final TProjectTeamService projectTeamService;
     private final TProjectTeamStaffService projectTeamStaffService;
+    private final TNoticeService noticeService;
     @Autowired
-    public TProjectProposalController(TProjectProposalService projectProposalService, TokenService tokenService, ISysUserService sysUserService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService) {
+    public TProjectProposalController(TProjectProposalService projectProposalService, TokenService tokenService, ISysUserService sysUserService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, TNoticeService noticeService) {
         this.projectProposalService = projectProposalService;
         this.tokenService = tokenService;
         this.sysUserService = sysUserService;
         this.projectTeamService = projectTeamService;
         this.projectTeamStaffService = projectTeamStaffService;
+        this.noticeService = noticeService;
     }
 
     /**
@@ -70,7 +68,19 @@
     @PostMapping(value = "/api/t-project-proposal/pageList")
     public R<PageInfo<TProjectProposalVO>> pageList(@RequestBody String param) {
         TProjectProposalQuery query = JSON.parseObject(param, TProjectProposalQuery.class);
-        // TODO 获取当前登录人
+        // 获取当前登录人
+        Long userId = tokenService.getLoginUser().getUserId();
+        Integer roleType = tokenService.getLoginUser().getUser().getRoleType();
+        if(roleType != 1){
+            // 查询用户所在项目组
+            List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffService.list(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                    .eq(TProjectTeamStaff::getUserId, userId));
+            if(projectTeamStaffs.size() > 0){
+                // 查询项目组id
+                List<String> teamIds = projectTeamStaffs.stream().map(TProjectTeamStaff::getTeamId).distinct().collect(Collectors.toList());
+                query.setTeamIds(teamIds);
+            }
+        }
         return R.ok(projectProposalService.pageList(query));
     }
 
@@ -140,7 +150,18 @@
         projectProposalNo = projectProposalNo + String.format("%02d", count+1);
         dto.setProjectCode(projectProposalNo);
         dto.setCommitUserId(userId);
+        dto.setTeamId(projectTeam.getId());
         projectProposalService.save(dto);
+
+        // MESSAGE 添加消息
+        TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                .eq(TProjectTeamStaff::getRoleType, 2)
+                .last("LIMIT 1"));
+        if(Objects.nonNull(teamStaff)){
+            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【项目课题方案】等待审批", tokenService.getLoginUser().getUser().getNickName(),1);
+        }
+
         return R.ok();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaProduceReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaProduceReportController.java
index e87027d..3b261e1 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaProduceReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TQaProduceReportController.java
@@ -53,8 +53,9 @@
     private final TProjectTeamStaffService projectTeamStaffService;
     private final ISysUserService sysUserService;
     private final SysUserMapper sysUserMapper;
+    private final TNoticeService noticeService;
     @Autowired
-    public TQaProduceReportController(TQaProduceReportService qaProduceReportService, TQaReportFileService qaReportFileService, TokenService tokenService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, ISysUserService sysUserService, SysUserMapper sysUserMapper) {
+    public TQaProduceReportController(TQaProduceReportService qaProduceReportService, TQaReportFileService qaReportFileService, TokenService tokenService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TNoticeService noticeService) {
         this.qaProduceReportService = qaProduceReportService;
         this.qaReportFileService = qaReportFileService;
         this.tokenService = tokenService;
@@ -62,6 +63,7 @@
         this.projectTeamStaffService = projectTeamStaffService;
         this.sysUserService = sysUserService;
         this.sysUserMapper = sysUserMapper;
+        this.noticeService = noticeService;
     }
 
     /**
@@ -177,6 +179,16 @@
             }
         }
         qaReportFileService.saveBatch(qaReportFiles);
+
+        // MESSAGE 添加消息
+        TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                .eq(TProjectTeamStaff::getRoleType, 3)
+                .last("LIMIT 1"));
+        if(Objects.nonNull(teamStaff)){
+            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【项目检测项、检验包列表】/【中试、生产验证试验检验分析报告】/【原辅料、包材、竞品检验分析报告】/【产品报批及项目工作总结报告】等待审核", tokenService.getLoginUser().getUser().getNickName(),9);
+        }
+
         return R.ok();
     }
 
@@ -320,6 +332,10 @@
         qaProduceReport.setAuditPersonId(userId);
         qaProduceReport.setAuditTime(LocalDateTime.now());
         qaProduceReportService.updateById(qaProduceReport);
+
+        // MESSAGE 添加消息
+        noticeService.saveNotice(userId, "您有【1】条【项目检测项、检验包列表】/【中试、生产验证试验检验分析报告】/【原辅料、包材、竞品检验分析报告】/【产品报批及项目工作总结报告】等待评定", tokenService.getLoginUser().getUser().getNickName(),10);
+
         return R.ok();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSamplingRecordController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSamplingRecordController.java
index 5fb30dd..ab10daa 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSamplingRecordController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSamplingRecordController.java
@@ -55,8 +55,9 @@
     private final TProjectTeamService projectTeamService;
     private final TProjectTeamStaffService projectTeamStaffService;
     private final TExperimentDispatchParticipantsService experimentDispatchParticipantsService;
+    private final TNoticeService noticeService;
     @Autowired
-    public TSamplingRecordController(TSamplingRecordService samplingRecordService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TSamplingRecordOperationService samplingRecordOperationService, TExperimentDispatchService experimentDispatchService, TProjectProposalService projectProposalService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService) {
+    public TSamplingRecordController(TSamplingRecordService samplingRecordService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TSamplingRecordOperationService samplingRecordOperationService, TExperimentDispatchService experimentDispatchService, TProjectProposalService projectProposalService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService, TNoticeService noticeService) {
         this.samplingRecordService = samplingRecordService;
         this.tokenService = tokenService;
         this.sysUserService = sysUserService;
@@ -67,6 +68,7 @@
         this.projectTeamService = projectTeamService;
         this.projectTeamStaffService = projectTeamStaffService;
         this.experimentDispatchParticipantsService = experimentDispatchParticipantsService;
+        this.noticeService = noticeService;
     }
 
     /**
@@ -317,6 +319,19 @@
             samplingRecordOperation.setSendTime(LocalDateTime.now());
         }
         samplingRecordOperationService.updateBatchById(samplingRecordOperations);
+
+        // 查询取样记录信息
+        TSamplingRecord samplingRecord = samplingRecordService.getById(samplingRecordOperations.get(0).getSamplingId());
+        // 查询实验调度
+        TExperimentDispatch experimentDispatch = experimentDispatchService.getById(samplingRecord.getDispatchId());
+        // 查询实验调度参与人员
+        List<TExperimentDispatchParticipants> teamStaffs = experimentDispatchParticipantsService.list(Wrappers.lambdaQuery(TExperimentDispatchParticipants.class)
+                .eq(TExperimentDispatchParticipants::getDispatchId, experimentDispatch.getId())
+                .eq(TExperimentDispatchParticipants::getRoleType, 4));
+        // MESSAGE 添加消息
+        teamStaffs.forEach(teamStaff -> {
+            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【送样单】等待确认接收样品", tokenService.getLoginUser().getUser().getNickName(),13);
+        });
         return R.ok();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetController.java
index 8157d3b..5a18d8e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTestMethodConfirmSheetController.java
@@ -54,8 +54,9 @@
     private final TExperimentDispatchService experimentDispatchService;
     private final TProjectProposalService projectProposalService;
     private final TExperimentDispatchParticipantsService experimentDispatchParticipantsService;
+    private final TNoticeService noticeService;
     @Autowired
-    public TTestMethodConfirmSheetController(TTestMethodConfirmSheetService testMethodConfirmSheetService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TTestMethodConfirmSheetTermService testMethodConfirmSheetTermService, TTestMethodConfirmSheetOriginalService testMethodConfirmSheetOriginalService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, TExperimentDispatchService experimentDispatchService, TProjectProposalService projectProposalService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService) {
+    public TTestMethodConfirmSheetController(TTestMethodConfirmSheetService testMethodConfirmSheetService, TokenService tokenService, ISysUserService sysUserService, SysUserMapper sysUserMapper, TTestMethodConfirmSheetTermService testMethodConfirmSheetTermService, TTestMethodConfirmSheetOriginalService testMethodConfirmSheetOriginalService, TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService, TExperimentDispatchService experimentDispatchService, TProjectProposalService projectProposalService, TExperimentDispatchParticipantsService experimentDispatchParticipantsService, TNoticeService noticeService) {
         this.testMethodConfirmSheetService = testMethodConfirmSheetService;
         this.tokenService = tokenService;
         this.sysUserService = sysUserService;
@@ -67,6 +68,7 @@
         this.experimentDispatchService = experimentDispatchService;
         this.projectProposalService = projectProposalService;
         this.experimentDispatchParticipantsService = experimentDispatchParticipantsService;
+        this.noticeService = noticeService;
     }
 
     /**
@@ -120,6 +122,8 @@
     @PostMapping(value = "/api/t-test-method-confirm-sheet/add")
     public R<Boolean> add(@RequestBody String param) {
         TTestMethodConfirmSheetDTO dto = JSON.parseObject(param,TTestMethodConfirmSheetDTO.class);
+        Long userId = tokenService.getLoginUser().getUserId();
+        dto.setCommitUserId(userId);
         testMethodConfirmSheetService.save(dto);
         List<TTestMethodConfirmSheetTerm> testMethodConfirmSheetTerms = dto.getTestMethodConfirmSheetTerms();
         testMethodConfirmSheetTerms.forEach(testMethodConfirmSheetTerm -> {
@@ -127,9 +131,7 @@
             testMethodConfirmSheetTerm.setStatus(1);
         });
         testMethodConfirmSheetTermService.saveBatch(testMethodConfirmSheetTerms);
-
         // 通过当前用户查询项目组
-        Long userId = tokenService.getLoginUser().getUserId();
         TProjectTeamStaff projectTeamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
                 .eq(TProjectTeamStaff::getUserId, userId)
                 .last("LIMIT 1"));
@@ -159,6 +161,16 @@
             testMethodConfirmSheetOriginal.setStatus(1);
             testMethodConfirmSheetOriginalService.save(testMethodConfirmSheetOriginal);
         }
+
+        // MESSAGE 添加消息
+        TProjectTeamStaff teamStaff = projectTeamStaffService.getOne(Wrappers.lambdaQuery(TProjectTeamStaff.class)
+                .eq(TProjectTeamStaff::getTeamId, projectTeam.getId())
+                .eq(TProjectTeamStaff::getRoleType, 3)
+                .last("LIMIT 1"));
+        if(Objects.nonNull(teamStaff)){
+            noticeService.saveNotice(teamStaff.getUserId(), "您有【1】条【检验方法确认单】等待审批", tokenService.getLoginUser().getUser().getNickName(),6);
+        }
+
         return R.ok();
     }
 
@@ -261,6 +273,11 @@
                 .set(TTestMethodConfirmSheet::getAuditTime, LocalDateTime.now())
                 .set(TTestMethodConfirmSheet::getAuditPersonId, userId)
                 .set(TTestMethodConfirmSheet::getAuditSign, testMethodConfirmSheetSign.getConfirmSign()));
+
+        // MESSAGE 添加消息
+        TTestMethodConfirmSheet testMethodConfirmSheet = testMethodConfirmSheetService.getById(testMethodConfirmSheetSign.getTestMethodConfirmSheetId());
+        noticeService.saveNotice(testMethodConfirmSheet.getCommitUserId(), "您的【检验方案确认单】已被确认", tokenService.getLoginUser().getUser().getNickName(),12);
+
         return R.ok();
     }
 
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
index b4118dc..4d14887 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -118,8 +118,7 @@
                         "/applet/changepwd", "/captchaImage","/getCode","/loginCode",
                         "/operations/getBySingleNum/**",
                         "/user/getUserInfoByNumber/**",
-                        "/wxLogin/**",
-                        "/open/**","/cos/get/**"
+                        "/wxLogin/**","/cos/get/**"
                 ).permitAll()
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TNoticeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TNoticeMapper.java
new file mode 100644
index 0000000..59ef49b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TNoticeMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.model.TNotice;
+
+/**
+ * <p>
+ * 首页待办事项 Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2025-04-08
+ */
+public interface TNoticeMapper extends BaseMapper<TNotice> {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TNotice.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TNotice.java
new file mode 100644
index 0000000..e065ddf
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TNotice.java
@@ -0,0 +1,72 @@
+package com.ruoyi.system.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 首页待办事项
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2025-04-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_notice")
+@ApiModel(value="TNotice对象", description="首页待办事项")
+public class TNotice implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private String id;
+
+    @ApiModelProperty(value = "用户id")
+    @TableField("user_id")
+    private Long userId;
+
+    @ApiModelProperty(value = "内容")
+    @TableField("content")
+    private String content;
+
+    @ApiModelProperty(value = "提交人姓名")
+    @TableField("commit_name")
+    private String commitName;
+
+    @ApiModelProperty(value = "提交时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField("commit_time")
+    private LocalDateTime commitTime;
+
+    @ApiModelProperty(value = "消息类型 1=项目课题方案审批通知 " +
+            "2=实验方案中止申请 " +
+            "3=实验结果汇报 " +
+            "4=【可研报告】/【可行报告】/【工艺开发工具】/【验证与发布】/【立项报告库】审核 " +
+            "5=【可研报告】/【可行报告】/【工艺开发工具】/【验证与发布】评定" +
+            "6=检验方法确认单审批" +
+            "7=化验师已提交检验报告" +
+            "8=实验员已提交实验方案" +
+            "9=【项目检测项、检验包列表】/【中试、生产验证试验检验分析报告】/【原辅料、包材、竞品检验分析报告】/【产品报批及项目工作总结报告】审核" +
+            "10=【项目检测项、检验包列表】/【中试、生产验证试验检验分析报告】/【原辅料、包材、竞品检验分析报告】/【产品报批及项目工作总结报告】评定" +
+            "11=实验调度 化验师" +
+            "12=检验方案确认单 已被确认" +
+            "13=送样单 等待确认接收样品" +
+            "14=实验调度 实验员")
+    @TableField("notice_type")
+    private Integer noticeType;
+
+    @ApiModelProperty(value = "是否已读 1=是 0=否")
+    @TableField("is_read")
+    private Integer isRead;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectProposal.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectProposal.java
index dc43583..d01eff8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectProposal.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectProposal.java
@@ -1,6 +1,9 @@
 package com.ruoyi.system.model;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseModel;
 import io.swagger.annotations.ApiModel;
@@ -8,7 +11,6 @@
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
-import java.io.Serializable;
 import java.time.LocalDateTime;
 
 /**
@@ -30,6 +32,10 @@
     @TableId(value = "id", type = IdType.ASSIGN_ID)
     private String id;
 
+    @ApiModelProperty(value = "项目组id")
+    @TableField("team_id")
+    private String teamId;
+
     @ApiModelProperty(value = "提交人id")
     @TableField("commit_user_id")
     private Long commitUserId;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectTeamStaff.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectTeamStaff.java
index 3824475..94972cb 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectTeamStaff.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectTeamStaff.java
@@ -38,7 +38,7 @@
     @TableField("user_id")
     private Long userId;
 
-    @ApiModelProperty(value = "角色类型 2=审批人 3=工艺工程师 4=实验员 5=化验师")
+    @ApiModelProperty(value = "角色类型 2=审批人 3=工艺工程师 4=化验师 5=实验员")
     @TableField("role_type")
     private Integer roleType;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TTestMethodConfirmSheet.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TTestMethodConfirmSheet.java
index 42bce1b..47a3c31 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TTestMethodConfirmSheet.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TTestMethodConfirmSheet.java
@@ -1,6 +1,9 @@
 package com.ruoyi.system.model;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseModel;
 import io.swagger.annotations.ApiModel;
@@ -8,7 +11,6 @@
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
-import java.io.Serializable;
 import java.time.LocalDateTime;
 
 /**
@@ -34,6 +36,10 @@
     @TableField("dispatch_id")
     private String dispatchId;
 
+    @ApiModelProperty(value = "提交人id")
+    @TableField("commit_user_id")
+    private Long commitUserId;
+
     @ApiModelProperty(value = "签字")
     @TableField("confirm_sign")
     private String confirmSign;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectProposalQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectProposalQuery.java
index 05dd4ef..8ccdf2f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectProposalQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectProposalQuery.java
@@ -5,6 +5,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 @ApiModel(value = "项目课题方案query")
 public class TProjectProposalQuery extends TimeRangeQueryBody {
@@ -19,4 +21,6 @@
     private String createBy;
     @ApiModelProperty(value = "审批状态  -1=草稿箱 1=审批中 2=已通过 3=已驳回 4=已撤销 5=已封存")
     private Integer auditStatus;
+    @ApiModelProperty(value = "项目组id集合 前端忽略")
+    private List<String> teamIds;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TNoticeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TNoticeService.java
new file mode 100644
index 0000000..6ceffa2
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TNoticeService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.model.TNotice;
+
+/**
+ * <p>
+ * 首页待办事项 服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2025-04-08
+ */
+public interface TNoticeService extends IService<TNotice> {
+
+    /**
+     * 存储待办事项
+     * @param userId
+     * @param content
+     * @param commitName
+     * @param noticeType
+     */
+    void saveNotice(Long userId, String content, String commitName,Integer noticeType);
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TNoticeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TNoticeServiceImpl.java
new file mode 100644
index 0000000..47f9f69
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TNoticeServiceImpl.java
@@ -0,0 +1,32 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.mapper.TNoticeMapper;
+import com.ruoyi.system.model.TNotice;
+import com.ruoyi.system.service.TNoticeService;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 首页待办事项 服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2025-04-08
+ */
+@Service
+public class TNoticeServiceImpl extends ServiceImpl<TNoticeMapper, TNotice> implements TNoticeService {
+
+    @Override
+    public void saveNotice(Long userId, String content, String commitName,Integer noticeType) {
+        TNotice notice = new TNotice();
+        notice.setUserId(userId);
+        notice.setContent(content);
+        notice.setCommitName(commitName);
+        notice.setCommitTime(LocalDateTime.now());
+        notice.setNoticeType(noticeType);
+        this.save(notice);
+    }
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index ea9006a..f5f1826 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -309,25 +309,25 @@
  			<if test="remark != null and remark != ''">remark,</if>
  			<if test="ifBlack != null">ifBlack,</if>
  			<if test="districtId != null">districtId,</if>
+ 			<if test="roleType != null">role_type,</if>
  			create_time
  		)values(
  			<if test="userId != null and userId != ''">#{userId},</if>
  			<if test="deptId != null and deptId != ''">#{deptId},</if>
  			<if test="userName != null and userName != ''">#{userName},</if>
-		<if test="deptName != null and deptName != ''">#{deptName},</if>
-
-		<if test="nickName != null and nickName != ''">#{nickName},</if>
+			<if test="deptName != null and deptName != ''">#{deptName},</if>
+			<if test="nickName != null and nickName != ''">#{nickName},</if>
  			<if test="email != null and email != ''">#{email},</if>
  			<if test="avatar != null and avatar != ''">#{avatar},</if>
  			<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
-		<if test="sex != null and sex != ''">#{sex},</if>
+			<if test="sex != null and sex != ''">#{sex},</if>
  			<if test="password != null and password != ''">#{password},</if>
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
 			<if test="ifBlack != null">#{ifBlack},</if>
 			<if test="districtId != null">#{districtId},</if>
-			<if test="businessDeptId != null">#{businessDeptId},</if>
+			<if test="roleType != null">#{roleType},</if>
  			sysdate()
  		)
 	</insert>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TNoticeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TNoticeMapper.xml
new file mode 100644
index 0000000..f97d1b0
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/TNoticeMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.TNoticeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.system.model.TNotice">
+        <id column="id" property="id" />
+        <result column="user_id" property="userId" />
+        <result column="content" property="content" />
+        <result column="commit_name" property="commitName" />
+        <result column="commit_time" property="commitTime" />
+        <result column="notice_type" property="noticeType" />
+        <result column="is_read" property="isRead" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, user_id,content, commit_name, commit_time,notice_type,is_read
+    </sql>
+
+</mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TProjectProposalMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TProjectProposalMapper.xml
index 035afe0..2b3f64a 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TProjectProposalMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TProjectProposalMapper.xml
@@ -5,6 +5,7 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.ruoyi.system.model.TProjectProposal">
         <id column="id" property="id" />
+        <result column="team_id" property="teamId" />
         <result column="commit_user_id" property="commitUserId" />
         <result column="project_name" property="projectName" />
         <result column="project_stage" property="projectStage" />
@@ -30,10 +31,10 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id,commit_user_id, project_name, project_stage, project_code, experiment_objective, experiment_material, experiment_device, experiment_test_method, experiment_procedure, data_acquisition, result_evaluation, precautions, audit_status, audit_person_id, audit_time, audit_remark, create_time, update_time, create_by, update_by, disabled
+        id,team_id,commit_user_id, project_name, project_stage, project_code, experiment_objective, experiment_material, experiment_device, experiment_test_method, experiment_procedure, data_acquisition, result_evaluation, precautions, audit_status, audit_person_id, audit_time, audit_remark, create_time, update_time, create_by, update_by, disabled
     </sql>
     <select id="pageList" resultType="com.ruoyi.system.vo.TProjectProposalVO">
-        select tpp.id,tpp.commit_user_id, tpp.project_name, tpp.project_stage, tpp.project_code, tpp.experiment_objective, tpp.experiment_material, tpp.experiment_device,
+        select tpp.id,tpp.team_id,tpp.commit_user_id, tpp.project_name, tpp.project_stage, tpp.project_code, tpp.experiment_objective, tpp.experiment_material, tpp.experiment_device,
         tpp.experiment_test_method, tpp.experiment_procedure, tpp.data_acquisition, tpp.result_evaluation, tpp.precautions, tpp.audit_status,
         tpp.audit_person_id, tpp.audit_time, tpp.audit_remark, tpp.create_time, tpp.update_time, tpp.create_by, tpp.update_by, tpp.disabled,
         su.nick_name as auditPersonName
@@ -58,6 +59,12 @@
             <if test="query.auditStatus != null">
                 AND tpp.audit_status = #{query.auditStatus}
             </if>
+             <if test="query.teamIds != null and query.teamIds.size() > 0">
+                AND tpp.team_id IN
+                <foreach item="teamId" collection="query.teamIds" separator="," open="(" close=")" index="">
+                    #{teamId}
+                </foreach>
+            </if>
             <if test="query.auditStatus == null">
                 AND tpp.audit_status != -1
             </if>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetMapper.xml
index 735c3b0..56466c7 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TTestMethodConfirmSheetMapper.xml
@@ -6,6 +6,7 @@
     <resultMap id="BaseResultMap" type="com.ruoyi.system.model.TTestMethodConfirmSheet">
         <id column="id" property="id" />
         <result column="dispatch_id" property="dispatchId" />
+        <result column="commit_user_id" property="commitUserId" />
         <result column="confirm_sign" property="confirmSign" />
         <result column="sign_time" property="signTime" />
         <result column="audit_status" property="auditStatus" />
@@ -21,10 +22,10 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, dispatch_id, confirm_sign, sign_time, audit_status, audit_person_id, audit_sign, audit_time, create_time, update_time, create_by, update_by, disabled
+        id, dispatch_id,commit_user_id, confirm_sign, sign_time, audit_status, audit_person_id, audit_sign, audit_time, create_time, update_time, create_by, update_by, disabled
     </sql>
     <select id="pageList" resultType="com.ruoyi.system.vo.TTestMethodConfirmSheetVO">
-        select tmcs.id, tmcs.dispatch_id, tmcs.confirm_sign, tmcs.sign_time, tmcs.audit_status, tmcs.audit_person_id,
+        select tmcs.id, tmcs.dispatch_id,tmcs.commit_user_id, tmcs.confirm_sign, tmcs.sign_time, tmcs.audit_status, tmcs.audit_person_id,
                tmcs.audit_sign, tmcs.audit_time, tmcs.create_time, tmcs.update_time, tmcs.create_by, tmcs.update_by, tmcs.disabled,
                tpp.project_name AS projectName, ted.experiment_name AS experimentName, ted.experiment_code AS experimentCode
         from t_test_method_confirm_sheet tmcs

--
Gitblit v1.7.1